relaton-ietf 1.7.1 → 1.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 90f95ffe25f46c8cd5ae35332277f6b39bd787c7840a30c9315b4ca393076033
4
- data.tar.gz: 0e591717abcf1ae0ff27feb518469ca5703103c9d8184fea7286b3eb43b3764c
3
+ metadata.gz: fe0909b3d346a37c7e6363a2c1b4c2822464b1b8bcaa589e3b9efad9148b24a8
4
+ data.tar.gz: b1a22b2905d52f0f014a27ea7eb11abe049ec62c2e6918818c6ca5cf3e2af843
5
5
  SHA512:
6
- metadata.gz: 4d4cee3c808eedf011dbf3ee0199b6baa70c4e390821a88a685e34dd486a53ba330cda666597521c70f26670c9063cb20c98c867139bee710efe857f0623d734
7
- data.tar.gz: 1e9297ebf9b3897ce346a0b1fdedf04779220c7f0210a10fa667a67df923382293029cc3126c0edf6a40857712e9bbf3a72d7fb2f4d94fc90a40f896b8e5dbc2
6
+ metadata.gz: 151fddd3a5168eb80b1fcd0f86a33f58ab222993457c2c1eb8b24a03ccf976b4048b01e7a7ff182957c846a258fe77602114f2de394b285b6291e16baca2cd35
7
+ data.tar.gz: '08ed81561c2737cc7852c868990064e4bf23bfd270c24f55ecb6948b6b97e7bcff09274baebab5d4003797c0babc1fc1c4dfabbd19e72cfd33e73f05533b4e13'
@@ -7,7 +7,7 @@ module RelatonIetf
7
7
  # @param item [Hash]
8
8
  # @retirn [RelatonIec::IecBibliographicItem]
9
9
  def bib_item(item)
10
- IecBibliographicItem.new(item)
10
+ IetfBibliographicItem.new(item)
11
11
  end
12
12
  end
13
13
  end
@@ -11,22 +11,18 @@ module RelatonIetf
11
11
  # Scrapper module
12
12
  module Scrapper
13
13
  GH_URL = "https://raw.githubusercontent.com/relaton/relaton-data-ietf/master/data/reference."
14
- RFC_URI_PATTERN = "https://xml2rfc.tools.ietf.org/public/rfc/bibxml"
15
- # ID_URI_PATTERN = "https://xml2rfc.tools.ietf.org/public/rfc/bibxml-ids/reference.CODE"
16
14
  BCP_URI_PATTERN = "https://www.rfc-editor.org/info/CODE"
17
15
 
18
16
  class << self
19
- # rubocop:disable Metrics/MethodLength
20
-
21
17
  # @param text [String]
22
18
  # @param is_relation [TrueClass, FalseClass]
23
19
  # @return [RelatonIetf::IetfBibliographicItem]
24
20
  def scrape_page(text, is_relation = false)
25
21
  # Remove initial "IETF " string if specified
26
22
  ref = text.gsub(/^IETF /, "")
27
- if ref.match? /^BCP/ then bcp_item BCP_URI_PATTERN.dup, ref
28
- else rfc_item ref, is_relation
29
- end
23
+ /^(RFC|BCP|FYI|STD)\s(?<num>\d+)/ =~ ref
24
+ ref.sub! /(?<=^(?:RFC|BCP|FYI|STD)\s)(\d+)/, num.rjust(4, "0") if num
25
+ rfc_item ref, is_relation
30
26
  rescue Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, EOFError,
31
27
  Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError,
32
28
  Net::ProtocolError, SocketError
@@ -38,7 +34,7 @@ module RelatonIetf
38
34
  # @param url [String, NilClass]
39
35
  # @param ver [String, NilClass] Internet Draft version
40
36
  # @return [RelatonIetf::IetfBibliographicItem]
41
- def fetch_rfc(reference, is_relation = false, url = nil, ver = nil) # rubocop:disable Metrics/AbcSize
37
+ def fetch_rfc(reference, is_relation = false, url = nil, ver = nil) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
42
38
  return unless reference
43
39
 
44
40
  ietf_item(
@@ -50,8 +46,10 @@ module RelatonIetf
50
46
  language: [language(reference)],
51
47
  link: link(reference, url, ver),
52
48
  title: titles(reference),
49
+ formattedref: formattedref(reference),
53
50
  abstract: abstracts(reference),
54
51
  contributor: contributors(reference),
52
+ relation: relations(reference),
55
53
  date: dates(reference),
56
54
  series: series(reference),
57
55
  place: ["Fremont, CA"],
@@ -59,7 +57,6 @@ module RelatonIetf
59
57
  doctype: doctype(reference[:anchor])
60
58
  )
61
59
  end
62
- # rubocop:enable Metrics/MethodLength
63
60
 
64
61
  private
65
62
 
@@ -105,35 +102,19 @@ module RelatonIetf
105
102
 
106
103
  uri = "#{GH_URL}#{ref.sub(/\s|\u00a0/, '.')}.xml"
107
104
  doc = Nokogiri::XML get_page(uri)
108
- fetch_rfc doc.at("//reference"), is_relation, uri, ver
109
- end
110
-
111
- # @param uri_template [String]
112
- # @param reference [String]
113
- # @return [RelatonIetf::IetfBibliographicItem]
114
- def bcp_item(uri_template, reference) # rubocop:disable Metrics/MethodLength
115
- uri = uri_template.sub "CODE", reference.sub(" ", "").downcase
116
- doc = Nokogiri::HTML get_page(uri)
117
- ietf_item(
118
- id: reference,
119
- title: [content: ""],
120
- docid: [RelatonBib::DocumentIdentifier.new(type: "IETF", id: reference)],
121
- language: ["en"],
122
- link: [{ type: "src", content: uri }],
123
- relation: fetch_relations(doc),
124
- doctype: "rfc"
125
- )
105
+ fetch_rfc doc.at("/referencegroup", "/reference"), is_relation, uri, ver
126
106
  end
127
107
 
128
- def fetch_relations(doc)
129
- doc.xpath("//table/tr/td/a[contains(., 'RFC')]").map do |r|
130
- RelatonBib::DocumentRelation.new(
131
- type: "merges",
132
- bibitem: scrape_page(r.text, true)
133
- )
108
+ # @param reference [Nokogiri::XML::Element]
109
+ # @return [Hash]
110
+ def relations(reference)
111
+ reference.xpath("reference").map do |ref|
112
+ { type: "includes", bibitem: fetch_rfc(ref, true) }
134
113
  end
135
114
  end
136
115
 
116
+ # @param uri [String]
117
+ # @return [String] HTTP response body
137
118
  def get_page(uri)
138
119
  res = Net::HTTP.get_response(URI(uri))
139
120
  if res.code != "200"
@@ -143,17 +124,30 @@ module RelatonIetf
143
124
  res.body
144
125
  end
145
126
 
127
+ # @param reference [Nokogiri::XML::Element]
146
128
  # @return [String]
147
129
  def language(reference)
148
130
  reference[:lang] || "en"
149
131
  end
150
132
 
133
+ # @param reference [Nokogiri::XML::Element]
151
134
  # @return [Array<Hash>]
152
135
  def titles(reference)
153
- title = reference.at("./front/title")
154
- [{ content: title.text, language: language(reference), script: "Latn" }]
136
+ reference.xpath("./front/title").map do |title|
137
+ { content: title.text, language: language(reference), script: "Latn" }
138
+ end
155
139
  end
156
140
 
141
+ # @param reference [Nokogiri::XML::Element]
142
+ # @return [RelatonBib::FormattedRef, nil]
143
+ def formattedref(reference)
144
+ return if reference.at "./fornt/title"
145
+
146
+ cont = (reference[:anchor] || reference[:docName] || reference[:number])
147
+ RelatonBib::FormattedRef.new content: cont, language: language(reference), script: "Latn" if cont
148
+ end
149
+
150
+ # @param reference [Nokogiri::XML::Element]
157
151
  # @return [Array<RelatonBib::FormattedString>]
158
152
  def abstracts(ref)
159
153
  ref.xpath("./front/abstract").map do |a|
@@ -164,11 +158,13 @@ module RelatonIetf
164
158
  end
165
159
  end
166
160
 
161
+ # @param reference [Nokogiri::XML::Element]
167
162
  # @return [Array<Hash>]
168
163
  def contributors(reference)
169
164
  persons(reference) + organizations(reference)
170
165
  end
171
166
 
167
+ # @param reference [Nokogiri::XML::Element]
172
168
  # @return [Array<Hash{Symbol=>RelatonBib::Person,Symbol=>Array<String>}>]
173
169
  def persons(reference)
174
170
  reference.xpath("./front/author[@surname]|./front/author[@fullname]")
@@ -182,6 +178,7 @@ module RelatonIetf
182
178
  end
183
179
  end
184
180
 
181
+ # @param reference [Nokogiri::XML::Element]
185
182
  # @return [Array<Hash{Symbol=>RelatonBib::Organization,Symbol=>Array<String>}>]
186
183
  def organizations(reference)
187
184
  publisher = { entity: new_org, role: [type: "publisher"] }
@@ -197,8 +194,8 @@ module RelatonIetf
197
194
  end
198
195
  end
199
196
 
200
- # @param author [Nokogiri::XML::Document]
201
- # @param ref [Nokogiri::XML::Document]
197
+ # @param author [Nokogiri::XML::Element]
198
+ # @param ref [Nokogiri::XML::Element]
202
199
  # @return [RelatonBib::FullName]
203
200
  def full_name(author, ref)
204
201
  lang = language ref
@@ -218,7 +215,7 @@ module RelatonIetf
218
215
  RelatonBib::LocalizedString.new(content, lang)
219
216
  end
220
217
 
221
- # @param postal [Nokogiri::XML::Document]
218
+ # @param postal [Nokogiri::XML::Element]
222
219
  # @return [Array<RelatonBib::Address, RelatonBib::Phone>]
223
220
  def contacts(addr)
224
221
  contacts = []
@@ -232,7 +229,7 @@ module RelatonIetf
232
229
  contacts
233
230
  end
234
231
 
235
- # @param postal [Nokogiri::XML::Document]
232
+ # @param postal [Nokogiri::XML::Element]
236
233
  # @rerurn [RelatonBib::Address]
237
234
  def address(postal) # rubocop:disable Metrics/CyclomaticComplexity
238
235
  RelatonBib::Address.new(
@@ -252,7 +249,7 @@ module RelatonIetf
252
249
  contacts << RelatonBib::Contact.new(type: type, value: value.text)
253
250
  end
254
251
 
255
- # @param author [Nokogiri::XML::Document]
252
+ # @param author [Nokogiri::XML::Element]
256
253
  # @return [RelatonBib::Affiliation]
257
254
  def affiliation(author)
258
255
  organization = author.at("./organization")
@@ -287,6 +284,7 @@ module RelatonIetf
287
284
  #
288
285
  # Extract date from reference.
289
286
  #
287
+ # @param reference [Nokogiri::XML::Element]
290
288
  # @return [Array<RelatonBib::BibliographicDate>] published data.
291
289
  #
292
290
  def dates(reference)
@@ -298,8 +296,6 @@ module RelatonIetf
298
296
  [RelatonBib::BibliographicDate.new(type: "published", on: date)]
299
297
  end
300
298
 
301
- # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
302
-
303
299
  #
304
300
  # Extract document identifiers from reference
305
301
  #
@@ -308,7 +304,7 @@ module RelatonIetf
308
304
  #
309
305
  # @return [Array<RelatonBib::DocumentIdentifier>]
310
306
  #
311
- def docids(reference, ver) # rubocop:disable Metrics/MethodLength,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
307
+ def docids(reference, ver) # rubocop:disable Metrics/MethodLength,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity,Metrics/AbcSize
312
308
  id = (reference[:anchor] || reference[:docName] || reference[:number])
313
309
  ret = []
314
310
  if id
@@ -327,11 +323,10 @@ module RelatonIetf
327
323
  RelatonBib::DocumentIdentifier.new(id: id, type: si[:name])
328
324
  end.compact
329
325
  end
330
- # enable Metrics/MethodLength, Metrics/AbcSize
331
326
 
332
327
  #
333
328
  # Extract series form reference
334
- # @param reference [Nokogiri::XML::Document]
329
+ # @param reference [Nokogiri::XML::Element]
335
330
  #
336
331
  # @return [Array<RelatonBib::Series>]
337
332
  #
@@ -351,7 +346,7 @@ module RelatonIetf
351
346
 
352
347
  #
353
348
  # extract status
354
- # @param reference [Nokogiri::XML::Document]
349
+ # @param reference [Nokogiri::XML::Element]
355
350
  #
356
351
  # @return [RelatonBib::DocumentStatus]
357
352
  #
@@ -1,3 +1,3 @@
1
1
  module RelatonIetf
2
- VERSION = "1.7.1".freeze
2
+ VERSION = "1.7.2".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: relaton-ietf
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.1
4
+ version: 1.7.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-02-05 00:00:00.000000000 Z
11
+ date: 2021-02-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: debase