Class: Relaton::Itu::RecommendationParser

Inherits:
Object
  • Object
show all
Includes:
Core::ArrayWrapper
Defined in:
lib/relaton/itu/recommendation_parser.rb

Constant Summary collapse

RECHDR =
"https://www.itu.int/mws/api/recommendations/getRecHdrDetail?idrec=%{idrec}&lang=en"
RECEDITIONS =
"https://www.itu.int/mws/api/recommendations/getRecEditions?idrec=%{idrec}&lang=en"
RECSUPPLEMENTS =
"https://www.itu.int/mws/api/recommendations/getRecSupplements?idrec=%{idrec}&lang=en"
IMPLGUIDES =
"https://www.itu.int/mws/api/recommendations/getImplGuides?idrec=%{idrec}&lang=en"

Instance Method Summary collapse

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

#docObject



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_dateObject



68
69
70
71
72
73
# File 'lib/relaton/itu/recommendation_parser.rb', line 68

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 # rubocop:disable Style/RescueModifier
end

#fetch_abstractArray<Relaton::Bib::LocalizedMarkedUpString>

Returns:

  • (Array<Relaton::Bib::LocalizedMarkedUpString>)


53
54
55
56
57
# File 'lib/relaton/itu/recommendation_parser.rb', line 53

def fetch_abstract
  array(doc["summary"]).map do |content|
    Relaton::Bib::Abstract.new(content: content, language: "en", script: "Latn")
  end
end

#fetch_datesArray<Relaton::Bib::Date>

Returns:

  • (Array<Relaton::Bib::Date>)


48
49
50
# File 'lib/relaton/itu/recommendation_parser.rb', line 48

def fetch_dates
  array(doc_date).map { |on| Relaton::Bib::Date.new(type: "published", at: on) }
end

#fetch_editionString?

Returns:

  • (String, nil)


26
27
28
# File 'lib/relaton/itu/recommendation_parser.rb', line 26

def fetch_edition
  self_edition&.dig("Version")
end

#fetch_relationsArray<Relaton::Bib::Relation>

Returns:

  • (Array<Relaton::Bib::Relation>)


76
77
78
79
80
81
82
83
84
85
86
# File 'lib/relaton/itu/recommendation_parser.rb', line 76

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_sourceArray<Relaton::Bib::Uri>

Returns:

  • (Array<Relaton::Bib::Uri>)


60
61
62
63
64
65
66
# File 'lib/relaton/itu/recommendation_parser.rb', line 60

def fetch_source
  link = imp ? doc["imp_dms_link"] : doc["handle_id"]
  links = [Relaton::Bib::Uri.new(type: "src", content: link)]
  links << Relaton::Bib::Uri.new(type: "pdf", content: doc["handle_id_pdf_link"]) if doc["handle_id_pdf_link"]
  imp_word_link { |wlink| links << Relaton::Bib::Uri.new(type: "word", content: wlink) }
  links
end

#fetch_statusRelaton::Bib::Status?

Returns:

  • (Relaton::Bib::Status, nil)


39
40
41
42
43
44
45
# File 'lib/relaton/itu/recommendation_parser.rb', line 39

def fetch_status
  inforce = imp ? imp_status : doc["status"]
  return if inforce.nil? || inforce.empty?

  status = inforce == "In force" ? "Published" : "Withdrawal"
  Relaton::Bib::Status.new(stage: Relaton::Bib::Status::Stage.new(content: status))
end

#fetch_titlesArray<Relaton::Bib::Title>

Returns:

  • (Array<Relaton::Bib::Title>)


31
32
33
34
35
36
# File 'lib/relaton/itu/recommendation_parser.rb', line 31

def fetch_titles
  title = imp ? doc["imp_title_e"] : doc["rec_title"]
  return [] if title.nil? || title.empty?

  Relaton::Bib::Title.from_string title, "en", "Latn"
end

#fetch_workgroupString?

Returns:

  • (String, nil)


90
91
92
93
94
95
96
97
# File 'lib/relaton/itu/recommendation_parser.rb', line 90

def fetch_workgroup
  url = "https://www.itu.int/ITU-T/recommendations/rec.aspx?rec=#{idrec}&lang=en"
  page = hit.hit_collection.agent.get(url)
  wg = page.at('//span[contains(@id, "uc_rec_main_info1_rpt_main_ctl00_Label8")]/a')
  wg&.text
rescue StandardError
  nil
end