relaton-w3c 1.1.0 → 1.3.3

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: 5756c84e1bdc95815fce77b2a058687f220340c1ff154b5ee40d1d07934a71c0
4
- data.tar.gz: 5148b2d1fc04c37f310c3dde66847000941d7056940a9d7d0c1dd2dadea59a39
3
+ metadata.gz: 42a40987b4156671fee680b2ef9eb9a6b42f5a356f62c09d7f56eaf9ae466578
4
+ data.tar.gz: dcd2de5ae0c8582a2dc3fb29473faee5367c81cf48a394f6cf09b45134c66e0d
5
5
  SHA512:
6
- metadata.gz: caa8636f7bdb8a257c86acc8755a84fb30fd9f324806940881940346e93d81880a572edde4f5a5041ebd76fa27f00f95c5a3e90ef806ad0c4570e6ec9bece604
7
- data.tar.gz: e1490c909e083aabdbcbec63f3c361e847101f9e829bc804e73daf31e9acb3a5cc55fb13ecfa6f3b8911fb6565f4182baeb33aad397cf25f73e56bdf3a96c186
6
+ metadata.gz: b94a6b93e792f44145b7b70139c673e534addc6989272c623ccfd3a1828b3376755f7193ca9dbcf35049f169a9c0084c3e8111977653ccb62fb5e8d7a2a18c9b
7
+ data.tar.gz: 272f89a76aeceacd9db2366cd80a0316023c3594a9fc058bed048b883ecea0dd07e63769e14988da0ea6506581ebd0d76539ee4097750bab5ee9ea5b415f6b24
@@ -35,4 +35,5 @@ jobs:
35
35
  bundle install --jobs 4 --retry 3
36
36
  - name: Run specs
37
37
  run: |
38
+ unset JAVA_TOOL_OPTIONS
38
39
  bundle exec rake
@@ -5,6 +5,6 @@
5
5
  inherit_from:
6
6
  - https://raw.githubusercontent.com/riboseinc/oss-guides/master/ci/rubocop.yml
7
7
  AllCops:
8
- TargetRubyVersion: 2.3
8
+ TargetRubyVersion: 2.4
9
9
  Rails:
10
- Enabled: true
10
+ Enabled: false
@@ -532,7 +532,7 @@
532
532
  </define>
533
533
  <define name="LocalityType">
534
534
  <data type="string">
535
- <param name="pattern">section|clause|part|paragraph|chapter|page|whole|table|annex|figure|note|list|example|volume|issue|time|locality:[a-zA-Z0-9_]+</param>
535
+ <param name="pattern">section|clause|part|paragraph|chapter|page|whole|table|annex|figure|note|list|example|volume|issue|time|anchor|locality:[a-zA-Z0-9_]+</param>
536
536
  </data>
537
537
  </define>
538
538
  <define name="referenceFrom">
@@ -45,7 +45,12 @@ module RelatonW3c
45
45
  /(?<title>.+)\s(?<date>\d{4}-\d{2}-\d{2})$/ =~ title_date
46
46
  title ||= title_date
47
47
  result = data.select do |hit|
48
- hit["title"] == title && type_date_filter(hit, type, date)
48
+ (hit["title"].casecmp?(title) ||
49
+ hit["link"].split("/").last.match?(/-#{title}-/)) &&
50
+ type_date_filter(hit, type, date)
51
+ end
52
+ if result.empty?
53
+ result = data.select { |h| h["link"].split("/").last.match? /#{title}/ }
49
54
  end
50
55
  result.map { |h| Hit.new(h, self) }
51
56
  end
@@ -54,7 +59,7 @@ module RelatonW3c
54
59
  # @param type [String]
55
60
  # @param date [String]
56
61
  # @return [TrueClass, FalseClass]
57
- def type_date_filter(hit, type, date)
62
+ def type_date_filter(hit, type, date) # rubocop:disable Metrics/AbcSize
58
63
  if type && hit["type"] != short_type(type) || date && hit["date"] != date
59
64
  history = get_history hit, type, date
60
65
  return false unless history.any?
@@ -13,11 +13,12 @@ module RelatonW3c
13
13
 
14
14
  # @param hit [Hash]
15
15
  # @return [RelatonW3c::W3cBibliographicItem]
16
- def parse_page(hit)
16
+ def parse_page(hit) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
17
17
  resp = Net::HTTP.get_response URI.parse(hit["link"])
18
18
  doc = resp.code == "200" ? Nokogiri::HTML(resp.body) : nil
19
19
  W3cBibliographicItem.new(
20
20
  type: "standard",
21
+ docid: fetch_docid(hit),
21
22
  fetched: Date.today.to_s,
22
23
  language: ["en"],
23
24
  script: ["Latn"],
@@ -28,28 +29,38 @@ module RelatonW3c
28
29
  doctype: fetch_doctype(hit, doc),
29
30
  contributor: fetch_contributor(hit, doc),
30
31
  relation: fetch_relation(doc),
31
- keyword: hit["keyword"],
32
+ keyword: hit["keyword"]
32
33
  )
33
34
  end
34
35
 
35
36
  private
36
37
 
38
+ # @param hit [Hash]
39
+ # @return [Array<RelatonBib::DocumentIdentifier>]
40
+ def fetch_docid(hit)
41
+ id = hit["link"].split("/").last
42
+ [RelatonBib::DocumentIdentifier.new(id: id, type: "W3C")]
43
+ end
44
+
37
45
  # @param hit [Hash]
38
46
  # @param doc [Nokogiri::HTML::Document]
39
47
  # @return [Array<RelatonBib::TypedTitleString>]
40
- def fetch_title(hit, doc)
48
+ def fetch_title(hit, doc) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
41
49
  titles = []
42
50
  if doc
43
- title = doc.at("//h1[@id='title']").text
44
- titles << { content: title, type: "main" }
45
- subtitle = doc.at("//h2[@id='subtitle']").text
46
- titles << { content: subtitle, tipe: "subtitle" }
47
- elsif hit["title"]
51
+ title = doc.at("//*[contains(@id, 'title')]")&.text
52
+ titles << { content: title, type: "main" } if title && !title.empty?
53
+ subtitle = doc.at(
54
+ "//h2[@id='subtitle']|//p[contains(@class, 'subline')]"
55
+ )&.text
56
+ titles << { content: subtitle, tipe: "subtitle" } if subtitle
57
+ end
58
+ if titles.empty? && hit["title"]
48
59
  titles << { content: hit["title"], type: "main" }
49
60
  end
50
61
  titles.map do |t|
51
62
  title = RelatonBib::FormattedString.new(
52
- content: t[:content], language: "en", script: "Latn",
63
+ content: t[:content], language: "en", script: "Latn"
53
64
  )
54
65
  RelatonBib::TypedTitleString.new(type: t[:type], title: title)
55
66
  end
@@ -75,10 +86,27 @@ module RelatonW3c
75
86
  # @param doc [Nokogiri::HTML::Document, NilClass]
76
87
  # @return [Array<RelatonBib::BibliographicDate>]
77
88
  def fetch_date(hit, doc)
78
- on = hit["datepub"] || doc && doc.at("//h2/time[@datetime]")[:datetime]
89
+ on = hit["datepub"] || doc&.at("//h2/time[@datetime]")&.attr(:datetime)
90
+ on ||= fetch_date1(doc) || fetch_date2(doc)
79
91
  [RelatonBib::BibliographicDate.new(type: "published", on: on)] if on
80
92
  end
81
93
 
94
+ # @param doc [Nokogiri::HTML::Document, NilClass]
95
+ # @return [String]
96
+ def fetch_date1(doc)
97
+ d = doc&.at("//h2[@property='dc:issued']")&.attr(:content)
98
+ d&.match(/\d{4}-\d{2}-\d{2}/)&.to_s
99
+ end
100
+
101
+ # @param doc [Nokogiri::HTML::Document, NilClass]
102
+ # @return [String]
103
+ def fetch_date2(doc)
104
+ d = doc&.at("//h2[contains(@id, 'w3c-recommendation')]")
105
+ return unless d
106
+
107
+ Date.parse(d.attr(:id.match(/\d{2}-\w+-\d{4}/).to_s)).to_s
108
+ end
109
+
82
110
  # @param hit [Hash]
83
111
  # @param doc [Nokogiri::HTML::Document, NilClass]
84
112
  # @return [String]
@@ -96,17 +124,19 @@ module RelatonW3c
96
124
  # @param hit [Hash]
97
125
  # @param doc [Nokogiri::HTML::Document, NilClass]
98
126
  # @return [Array<RelatonBib::ContributionInfo>]
99
- def fetch_contributor(hit, doc)
127
+ def fetch_contributor(hit, doc) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
100
128
  if doc
101
- editors = find_contribs(doc, "Editors").map do |ed|
102
- parse_contrib ed, "editor"
129
+ editors = find_contribs(doc, "Editors").reduce([]) do |mem, ed|
130
+ c = parse_contrib ed, "editor"
131
+ mem << c if c
132
+ mem
103
133
  end
104
- contribs = find_contribs(doc, "Authors").reduce(editors) do |mem, athr|
105
- ed = mem.detect { |e| e[:id] && e[:id] == athr["data-editor-id"] }
134
+ contribs = find_contribs(doc, "Authors").reduce(editors) do |mem, ath|
135
+ ed = mem.detect { |e| e[:id] && e[:id] == ath["data-editor-id"] }
106
136
  if ed
107
137
  ed[:role] << { type: "author" }
108
138
  else
109
- mem << parse_contrib(athr, "author")
139
+ mem << parse_contrib(ath, "author")
110
140
  end
111
141
  mem
112
142
  end
@@ -131,6 +161,8 @@ module RelatonW3c
131
161
  # @return [Hash]
132
162
  def parse_contrib(element, type)
133
163
  p = element.at("a")
164
+ return unless p
165
+
134
166
  contrib = {
135
167
  name: p.text,
136
168
  url: p[:href],
@@ -1,3 +1,3 @@
1
1
  module RelatonW3c
2
- VERSION = "1.1.0".freeze
2
+ VERSION = "1.3.3".freeze
3
3
  end
@@ -5,35 +5,12 @@ module RelatonW3c
5
5
  proposedRecommendation recommendation retired workingDraft
6
6
  ].freeze
7
7
 
8
- attr_reader :doctype
9
-
10
8
  # @param doctype [String]
11
9
  def initialize(**args)
12
10
  if args[:doctype] && !TYPES.include?(args[:doctype])
13
11
  warn "[relaton-w3c] invalid document type: #{args[:doctype]}"
14
12
  end
15
- @doctype = args.delete :doctype
16
13
  super **args
17
14
  end
18
-
19
- # @param builder [Nokogiri::XML::Builder, NilClass]
20
- # @param opts [Hash]
21
- # @option opts [TrueClass, FalseClass, NilClass] bibdata
22
- def to_xml(builder = nil, **opts)
23
- super builder, **opts do |b|
24
- if opts[:bibdata] && doctype
25
- b.ext do |e|
26
- e.doctype doctype if doctype
27
- end
28
- end
29
- end
30
- end
31
-
32
- # @return [Hash]
33
- def to_hash
34
- hash = super
35
- hash["doctype"] = doctype if doctype
36
- hash
37
- end
38
15
  end
39
16
  end
@@ -39,5 +39,5 @@ Gem::Specification.new do |spec|
39
39
  spec.add_development_dependency "vcr"
40
40
  spec.add_development_dependency "webmock"
41
41
 
42
- spec.add_dependency "relaton-bib", ">= 1.1.0"
42
+ spec.add_dependency "relaton-bib", ">= 1.3.0"
43
43
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: relaton-w3c
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-06-03 00:00:00.000000000 Z
11
+ date: 2020-09-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: debase
@@ -114,14 +114,14 @@ dependencies:
114
114
  requirements:
115
115
  - - ">="
116
116
  - !ruby/object:Gem::Version
117
- version: 1.1.0
117
+ version: 1.3.0
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
- version: 1.1.0
124
+ version: 1.3.0
125
125
  description: 'RelatonIso: retrieve W3C Standards for bibliographic using the IsoBibliographicItem
126
126
  model'
127
127
  email:
@@ -162,7 +162,7 @@ licenses:
162
162
  - BSD-2-Clause
163
163
  metadata:
164
164
  homepage_uri: https://github.com/relaton/relaton-wc3
165
- post_install_message:
165
+ post_install_message:
166
166
  rdoc_options: []
167
167
  require_paths:
168
168
  - lib
@@ -178,7 +178,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
178
178
  version: '0'
179
179
  requirements: []
180
180
  rubygems_version: 3.0.6
181
- signing_key:
181
+ signing_key:
182
182
  specification_version: 4
183
183
  summary: 'RelatonIso: retrieve W3C Standards for bibliographic using the IsoBibliographicItem
184
184
  model'