From 91cfaf1e5780579922088780dc5dc77ea509d22b Mon Sep 17 00:00:00 2001 From: Andrei Kislichenko Date: Sun, 26 Nov 2023 23:15:25 -0500 Subject: [PATCH] update Nokogiri to v1.15 & doctype model --- lib/relaton_jis.rb | 1 + lib/relaton_jis/bibliographic_item.rb | 1 - lib/relaton_jis/document_type.rb | 16 ++++++++++++++++ lib/relaton_jis/hash_converter.rb | 11 +++++++++-- lib/relaton_jis/scraper.rb | 13 +++++++------ lib/relaton_jis/version.rb | 2 +- relaton_jis.gemspec | 2 +- spec/relaton_jis/document_type_spec.rb | 7 +++++++ spec/relaton_jis/hash_converter_spec.rb | 6 ++++++ spec/relaton_jis/scraper_spec.rb | 2 +- 10 files changed, 49 insertions(+), 12 deletions(-) create mode 100644 lib/relaton_jis/document_type.rb create mode 100644 spec/relaton_jis/document_type_spec.rb diff --git a/lib/relaton_jis.rb b/lib/relaton_jis.rb index 5458c94..09190b2 100644 --- a/lib/relaton_jis.rb +++ b/lib/relaton_jis.rb @@ -5,6 +5,7 @@ require_relative "relaton_jis/version" require_relative "relaton_jis/config" require_relative "relaton_jis/util" +require_relative "relaton_jis/document_type" require_relative "relaton_jis/bibliographic_item" require_relative "relaton_jis/xml_parser" require_relative "relaton_jis/hash_converter" diff --git a/lib/relaton_jis/bibliographic_item.rb b/lib/relaton_jis/bibliographic_item.rb index 5ea5899..99d1003 100644 --- a/lib/relaton_jis/bibliographic_item.rb +++ b/lib/relaton_jis/bibliographic_item.rb @@ -1,6 +1,5 @@ module RelatonJis class BibliographicItem < RelatonIsoBib::IsoBibliographicItem - DOCTYPES = %w[japanese-industrial-standard technical-report technical-specification amendment].freeze # # Fetch the flavor shcema version # diff --git a/lib/relaton_jis/document_type.rb b/lib/relaton_jis/document_type.rb new file mode 100644 index 0000000..a6fd40d --- /dev/null +++ b/lib/relaton_jis/document_type.rb @@ -0,0 +1,16 @@ +module RelatonJis + class DocumentType < RelatonBib::DocumentType + DOCTYPES = %w[japanese-industrial-standard technical-report technical-specification amendment].freeze + + def initialize(type:, abbreviation: nil) + check_type type + super + end + + def check_type(type) + unless DOCTYPES.include? type + Util.warn "WARNING: invalid doctype: `#{type}`" + end + end + end +end diff --git a/lib/relaton_jis/hash_converter.rb b/lib/relaton_jis/hash_converter.rb index d50e533..d60f13a 100644 --- a/lib/relaton_jis/hash_converter.rb +++ b/lib/relaton_jis/hash_converter.rb @@ -1,9 +1,16 @@ module RelatonJis - class HashConverter < RelatonBib::HashConverter + module HashConverter + include RelatonBib::HashConverter + extend self + # @param item_hash [Hash] # @return [Relaton3gpp::BibliographicItem] - def self.bib_item(item_hash) + def bib_item(item_hash) BibliographicItem.new(**item_hash) end + + def create_doctype(**args) + DocumentType.new(**args) + end end end diff --git a/lib/relaton_jis/scraper.rb b/lib/relaton_jis/scraper.rb index e8a6f8a..e5e8daf 100644 --- a/lib/relaton_jis/scraper.rb +++ b/lib/relaton_jis/scraper.rb @@ -103,12 +103,13 @@ def fetch_docstatus end def fetch_doctype - case document_id - when /JIS\s[A-Z]\s[\w-]+:\d{4}\/AMENDMENT/ then "amendment" - when /JIS\s[A-Z]\s[\w-]+/ then "japanese-industrial-standard" - when /TR[\s\/][\w-]+/ then "technical-report" - when /TS[\s\/][\w-]+/ then "technical-specification" - end + type = case document_id + when /JIS\s[A-Z]\s[\w-]+:\d{4}\/AMENDMENT/ then "amendment" + when /JIS\s[A-Z]\s[\w-]+/ then "japanese-industrial-standard" + when /TR[\s\/][\w-]+/ then "technical-report" + when /TS[\s\/][\w-]+/ then "technical-specification" + end + DocumentType.new type: type end def fetch_ics diff --git a/lib/relaton_jis/version.rb b/lib/relaton_jis/version.rb index b6fd655..2f0f857 100644 --- a/lib/relaton_jis/version.rb +++ b/lib/relaton_jis/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module RelatonJis - VERSION = "1.16.8" + VERSION = "1.17.0" end diff --git a/relaton_jis.gemspec b/relaton_jis.gemspec index b81a9d9..bcc3389 100644 --- a/relaton_jis.gemspec +++ b/relaton_jis.gemspec @@ -35,7 +35,7 @@ Gem::Specification.new do |spec| # Uncomment to register a new dependency of your gem spec.add_dependency "mechanize", "~> 2.8.0" - spec.add_dependency "relaton-iso-bib", "~> 1.16.0" + spec.add_dependency "relaton-iso-bib", "~> 1.17.0" # For more information and examples about making a new gem, check out our # guide at: https://bundler.io/guides/creating_gem.html diff --git a/spec/relaton_jis/document_type_spec.rb b/spec/relaton_jis/document_type_spec.rb new file mode 100644 index 0000000..fdd3e6a --- /dev/null +++ b/spec/relaton_jis/document_type_spec.rb @@ -0,0 +1,7 @@ +describe RelatonJis::DocumentType do + it "warn if type is not valid" do + expect do + RelatonJis::DocumentType.new type: "invalid" + end.to output(/\[relaton-jis\] WARNING: invalid doctype: `invalid`/).to_stderr + end +end diff --git a/spec/relaton_jis/hash_converter_spec.rb b/spec/relaton_jis/hash_converter_spec.rb index 7ad6749..d9c5b00 100644 --- a/spec/relaton_jis/hash_converter_spec.rb +++ b/spec/relaton_jis/hash_converter_spec.rb @@ -3,4 +3,10 @@ bib = described_class.bib_item title: [{ content: "title" }] expect(bib).to be_instance_of(RelatonJis::BibliographicItem) end + + it "create_doctype" do + doctype = described_class.create_doctype type: "type" + expect(doctype).to be_instance_of RelatonJis::DocumentType + expect(doctype.type).to eq "type" + end end diff --git a/spec/relaton_jis/scraper_spec.rb b/spec/relaton_jis/scraper_spec.rb index a17d2d3..b4cc8a1 100644 --- a/spec/relaton_jis/scraper_spec.rb +++ b/spec/relaton_jis/scraper_spec.rb @@ -6,7 +6,7 @@ shared_examples "doctype" do |id, doctype| it do expect(subject).to receive(:document_id).and_return id - expect(subject.fetch_doctype).to eq doctype + expect(subject.fetch_doctype.type).to eq doctype end end