From 4a358d0cb0d522822683772b736b259070496ab1 Mon Sep 17 00:00:00 2001 From: Nemo Date: Wed, 8 Apr 2020 00:48:36 +0530 Subject: [PATCH] Journal parser now parses all issues --- spec/journal_spec.cr | 5 +++++ src/issue.cr | 9 ++++++++- src/journal.cr | 17 +++++++++++++++-- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/spec/journal_spec.cr b/spec/journal_spec.cr index bee1b04..7e0e5ec 100644 --- a/spec/journal_spec.cr +++ b/spec/journal_spec.cr @@ -20,4 +20,9 @@ describe Muse::Dl::Journal do it "should parse publisher" do j.publisher.should eq "Johns Hopkins University Press" end + + it "should return issues" do + j.issues[0].id.should eq "41793" + j.issues[-1].id.should eq "1578" + end end diff --git a/src/issue.cr b/src/issue.cr index 99e65a3..8d51421 100644 --- a/src/issue.cr +++ b/src/issue.cr @@ -1,6 +1,13 @@ require "./thing.cr" module Muse::Dl - class Issue < Muse::Dl::Thing + class Issue + @id : String + + getter :id + + def initialize(id : String) + @id = id + end end end diff --git a/src/journal.cr b/src/journal.cr index 55c5eca..9c828f6 100644 --- a/src/journal.cr +++ b/src/journal.cr @@ -1,12 +1,13 @@ require "./infoparser.cr" -require "myhtml" +require "./issue.cr" module Muse::Dl class Journal - getter :info, :summary, :publisher + getter :info, :summary, :publisher, :issues @info = Hash(String, String).new @summary : String @publisher : String + @issues = [] of Muse::Dl::Issue private getter :h @@ -15,6 +16,18 @@ module Muse::Dl @info = InfoParser.infobox(h) @summary = InfoParser.summary(h) @publisher = InfoParser.journal_publisher(h) + parse_volumes(h) + end + + def parse_volumes(myhtml : Myhtml::Parser) + myhtml.css("#available_issues_list_text a").each do |a| + link = a.attribute_by("href").to_s + + matches = /\/issue\/(\d+)/.match link + if matches + @issues.push Muse::Dl::Issue.new matches[1] + end + end end end end