Class: RelatonItu::RecommendationParser
- Inherits:
-
Object
- Object
- RelatonItu::RecommendationParser
- Includes:
- Relaton::Core::ArrayWrapper
- Defined in:
- lib/relaton_itu/recommendation_parser.rb
Overview
Parse ITU Radio Regulations from XML to Relaton format.
Constant Summary collapse
- RECHDR =
"https://www.itu.int/mws/api/recommendations/getRecHdrDetail?idrec=%{idrec}&lang=en".freeze
- RECEDITIONS =
"https://www.itu.int/mws/api/recommendations/getRecEditions?idrec=%{idrec}&lang=en".freeze
- RECSUPPLEMENTS =
"https://www.itu.int/mws/api/recommendations/getRecSupplements?idrec=%{idrec}&lang=en".freeze
- IMPLGUIDES =
"https://www.itu.int/mws/api/recommendations/getImplGuides?idrec=%{idrec}&lang=en".freeze
Instance Method Summary collapse
- #doc ⇒ Object
- #doc_date ⇒ Object
-
#fetch_abstract ⇒ Array<Hash>
Fetch abstracts.
-
#fetch_dates ⇒ Array<Hash>
Fetch dates.
- #fetch_edition ⇒ Strign?
-
#fetch_link ⇒ Array<Hash>
Fetch links.
-
#fetch_relations ⇒ Array<Hash>
Fetch relations.
-
#fetch_status ⇒ RelatonBib::DocumentStatus, NilClass
Fetch status.
-
#fetch_titles ⇒ RelatonBib::TypedTitleStringCollection
Fetch titles.
-
#fetch_workgroup ⇒ RelatonItu::EditorialGroup, NilClass
Fetch workgroup.
-
#initialize(hit, idrec, imp) ⇒ RecommendationParser
constructor
A new instance of RecommendationParser.
Constructor Details
#initialize(hit, idrec, imp) ⇒ RecommendationParser
Returns a new instance of RecommendationParser.
11 12 13 14 15 |
# File 'lib/relaton_itu/recommendation_parser.rb', line 11 def initialize(hit, idrec, imp) @hit = hit @idrec = idrec @imp = imp end |
Instance Method Details
#doc ⇒ Object
17 18 19 20 21 22 23 |
# File 'lib/relaton_itu/recommendation_parser.rb', line 17 def doc @doc ||= begin url = (imp ? IMPLGUIDES : RECHDR ) % { idrec: idrec } resp = get_data url imp ? resp.first : resp end end |
#doc_date ⇒ Object
82 83 84 85 86 87 |
# File 'lib/relaton_itu/recommendation_parser.rb', line 82 def doc_date return @doc_date if defined? @doc_date date = imp ? doc["imp_approval_date"] : doc["approval_date"] @doc_date = Date.parse(date).to_s rescue date end |
#fetch_abstract ⇒ Array<Hash>
Fetch abstracts.
66 67 68 69 70 |
# File 'lib/relaton_itu/recommendation_parser.rb', line 66 def fetch_abstract array(doc["summary"]).map do |content| { content: content, language: "en", script: "Latn" } end end |
#fetch_dates ⇒ Array<Hash>
Fetch dates
51 52 53 |
# File 'lib/relaton_itu/recommendation_parser.rb', line 51 def fetch_dates array(doc_date).map { |on| { type: "published", on: on } } end |
#fetch_edition ⇒ Strign?
26 27 28 |
# File 'lib/relaton_itu/recommendation_parser.rb', line 26 def fetch_edition self_edition.dig("Version") end |
#fetch_link ⇒ Array<Hash>
Fetch links.
74 75 76 77 78 79 80 |
# File 'lib/relaton_itu/recommendation_parser.rb', line 74 def fetch_link link = imp ? doc["imp_dms_link"] : doc["handle_id"] links = [{ type: "src", content: link }] links << typed_link("pdf", doc["handle_id_pdf_link"]) if doc["handle_id_pdf_link"] imp_word_link { |wlink| links << typed_link("word", wlink) } links end |
#fetch_relations ⇒ Array<Hash>
Fetch relations.
91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/relaton_itu/recommendation_parser.rb', line 91 def fetch_relations relations = [] editions.each do |ed| next if ed["idrec"] == idrec relations << create_relation("hasEdition", ed["title"], ed["rec_name"]) end supplements.each { |supp| relations << create_relation("complementOf", supp["title_text"], supp["rec_name"]) } relations end |
#fetch_status ⇒ RelatonBib::DocumentStatus, NilClass
Fetch status.
41 42 43 44 45 46 47 |
# File 'lib/relaton_itu/recommendation_parser.rb', line 41 def fetch_status inforce = imp ? imp_status : doc["status"] return if inforce.nil? || inforce.empty? status = inforce == "In force" ? "Published" : "Withdrawal" RelatonBib::DocumentStatus.new(stage: status) end |
#fetch_titles ⇒ RelatonBib::TypedTitleStringCollection
Fetch titles.
32 33 34 35 36 37 |
# File 'lib/relaton_itu/recommendation_parser.rb', line 32 def fetch_titles title = imp ? doc["imp_title_e"] : doc["rec_title"] return [] if title.nil? || title.empty? RelatonBib::TypedTitleString.from_string title, "en", "Latn" end |
#fetch_workgroup ⇒ RelatonItu::EditorialGroup, NilClass
Fetch workgroup.
57 58 59 60 61 62 |
# File 'lib/relaton_itu/recommendation_parser.rb', line 57 def fetch_workgroup group = itugroup(doc["sg"]) EditorialGroup.new( bureau: hit.hit[:code].match(/(?<=-)./).to_s, group: group ) end |