relaton-iso 1.5.0 → 1.6.pre1
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 +4 -4
- data/.github/workflows/macos.yml +2 -0
- data/lib/relaton_iso/iso_bibliography.rb +51 -33
- data/lib/relaton_iso/scrapper.rb +3 -2
- data/lib/relaton_iso/version.rb +1 -1
- data/relaton_iso.gemspec +2 -2
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9633da24028b24feabd31b81e93ee19e2af47994b26305d7c023aecc3ca9a090
|
4
|
+
data.tar.gz: 910de158883fc2f7cff8c36c4d78cd44fdf7f6d0f215096e0375b4a96389dcff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d413b2093884a16461db0a7358835f2279d8b227f54469caaf5bd215fa9a270f419844678359471fa16c9d7968e0339177ce37326113ebb7b6e88bc933a1115
|
7
|
+
data.tar.gz: 5c883c4a58a857589ad9019507a87e68a137b3df605bd24e3d21a563b0796e5c0f56981515ec72f46dd7769c6504178758c9abcc0640b0b960c2c7c9f00bd7f3
|
data/.github/workflows/macos.yml
CHANGED
@@ -26,6 +26,8 @@ jobs:
|
|
26
26
|
- name: Update gems
|
27
27
|
run: |
|
28
28
|
sudo gem install bundler --force
|
29
|
+
ruby -v | grep 2.5 && bundle config set build.debase --with-cflags="-Wno-error=implicit-function-declaration"
|
30
|
+
ruby -v | grep 2.5 && bundle config set build.ruby-debug-ide --with-cflags="-Wno-error=implicit-function-declaration"
|
29
31
|
bundle install --jobs 4 --retry 3
|
30
32
|
- name: Run specs
|
31
33
|
run: |
|
@@ -44,10 +44,16 @@ module RelatonIso
|
|
44
44
|
year = year2 || year1
|
45
45
|
end
|
46
46
|
end
|
47
|
-
|
48
|
-
|
47
|
+
%r{\s(?<num>\d+)(-(?<part>[\d-]+))?} =~ code
|
48
|
+
opts[:part] = part
|
49
|
+
opts[:num] = num
|
50
|
+
opts[:corr] = corr
|
51
|
+
opts[:all_parts] ||= !part && opts[:all_parts].nil? && code2.nil?
|
52
|
+
if %r[^ISO/IEC DIR].match? code
|
53
|
+
return RelatonIec::IecBibliography.get(code, year, opts)
|
54
|
+
end
|
49
55
|
|
50
|
-
ret = isobib_get1(code, year,
|
56
|
+
ret = isobib_get1(code, year, opts)
|
51
57
|
return nil if ret.nil?
|
52
58
|
|
53
59
|
if year || opts[:keep_year] || opts[:all_parts]
|
@@ -65,15 +71,18 @@ module RelatonIso
|
|
65
71
|
id = year ? "#{code}:#{year}" : code
|
66
72
|
warn "[relaton-iso] WARNING: no match found online for #{id}. "\
|
67
73
|
"The code must be exactly like it is on the standards website."
|
68
|
-
|
69
|
-
"
|
70
|
-
|
71
|
-
|
72
|
-
|
74
|
+
unless missed_years.empty?
|
75
|
+
warn "[relaton-iso] (There was no match for #{year}, though there "\
|
76
|
+
"were matches found for #{missed_years.join(', ')}.)"
|
77
|
+
end
|
78
|
+
if /\d-\d/.match? code
|
79
|
+
warn "[relaton-iso] The provided document part may not exist, "\
|
80
|
+
"or the document may no longer be published in parts."
|
73
81
|
else
|
74
|
-
warn "[relaton-iso] If you wanted to cite all document parts for
|
75
|
-
"use \"#{code} (all parts)\".\nIf the document is
|
76
|
-
"use its document type abbreviation (TS, TR, PAS,
|
82
|
+
warn "[relaton-iso] If you wanted to cite all document parts for "\
|
83
|
+
"the reference, use \"#{code} (all parts)\".\nIf the document is "\
|
84
|
+
"not a standard, use its document type abbreviation (TS, TR, PAS, "\
|
85
|
+
"Guide)."
|
77
86
|
end
|
78
87
|
nil
|
79
88
|
end
|
@@ -83,66 +92,74 @@ module RelatonIso
|
|
83
92
|
# Search for hits. If no found then trying missed stages and ISO/IEC.
|
84
93
|
#
|
85
94
|
# @param code [String] reference without correction
|
86
|
-
# @param
|
95
|
+
# @param opts [Hash]
|
87
96
|
# @return [Array<RelatonIso::Hit>]
|
88
|
-
def isobib_search_filter(code,
|
97
|
+
def isobib_search_filter(code, opts)
|
89
98
|
warn "[relaton-iso] (\"#{opts[:ref]}\") fetching..."
|
90
99
|
result = search(code)
|
91
|
-
res = search_code result, code,
|
100
|
+
res = search_code result, code, opts
|
92
101
|
return res unless res.empty?
|
93
102
|
|
94
103
|
# try stages
|
95
104
|
if %r{^\w+/[^/]+\s\d+} =~ code # code like ISO/IEC 123, ISO/IEC/IEE 123
|
96
|
-
res = try_stages(result,
|
105
|
+
res = try_stages(result, opts) do |st|
|
97
106
|
code.sub(%r{^(?<pref>[^\s]+\s)}) { "#{$~[:pref]}#{st} " }
|
98
107
|
end
|
99
108
|
return res unless res.empty?
|
100
109
|
elsif %r{^\w+\s\d+} =~ code # code like ISO 123
|
101
|
-
res = try_stages(result,
|
110
|
+
res = try_stages(result, opts) do |st|
|
102
111
|
code.sub(%r{^(?<pref>\w+)}) { "#{$~[:pref]}/#{st}" }
|
103
112
|
end
|
104
113
|
return res unless res.empty?
|
105
114
|
end
|
106
115
|
|
107
|
-
if %r{^ISO\s}
|
116
|
+
if %r{^ISO\s}.match? code # try ISO/IEC if ISO not found
|
108
117
|
warn "[relaton-iso] Attempting ISO/IEC retrieval"
|
109
118
|
c = code.sub "ISO", "ISO/IEC"
|
110
|
-
res = search_code result, c,
|
119
|
+
res = search_code result, c, opts
|
111
120
|
end
|
112
121
|
res
|
113
122
|
end
|
114
123
|
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
|
115
124
|
|
116
125
|
# @param result [RelatonIso::HitCollection]
|
117
|
-
# @param corr [String] correction
|
118
126
|
# @param opts [Hash]
|
119
|
-
|
127
|
+
# @return [RelatonIso::HitCollection]
|
128
|
+
def try_stages(result, opts)
|
120
129
|
res = nil
|
121
130
|
%w[NP WD CD DIS FDIS PRF IS AWI TR].each do |st| # try stages
|
122
131
|
c = yield st
|
123
|
-
res = search_code result, c,
|
132
|
+
res = search_code result, c, opts
|
124
133
|
return res unless res.empty?
|
125
134
|
end
|
126
135
|
res
|
127
136
|
end
|
128
137
|
|
129
|
-
|
138
|
+
# @param result [RelatonIso::HitCollection]
|
139
|
+
# @param code [String]
|
140
|
+
# @param opts [Hash]
|
141
|
+
# @return [RelatonIso::HitCollection]
|
142
|
+
def search_code(result, code, opts) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity
|
143
|
+
ref_regex = %r{^#{code}(?!-)}
|
144
|
+
corr_regex = %r{^#{code}[\w-]*(:\d{4})?/#{opts[:corr]}}
|
145
|
+
no_corr_regex = %r{^#{code}[\w-]*(:\d{4})?/}
|
130
146
|
result.select do |i|
|
131
|
-
(opts[:all_parts] || i.hit["docRef"] =~
|
132
|
-
corr &&
|
133
|
-
!corr &&
|
134
|
-
)
|
147
|
+
(opts[:all_parts] || i.hit["docRef"] =~ ref_regex) && (
|
148
|
+
opts[:corr] && corr_regex =~ i.hit["docRef"] ||
|
149
|
+
!opts[:corr] && no_corr_regex !~ i.hit["docRef"]
|
150
|
+
)
|
135
151
|
end
|
136
152
|
end
|
137
153
|
|
138
154
|
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
|
139
155
|
|
140
156
|
# Sort through the results from RelatonIso, fetching them three at a time,
|
141
|
-
# and return the first result that matches the code,
|
142
|
-
#
|
157
|
+
# and return the first result that matches the code, matches the year
|
158
|
+
# (if provided), and which # has a title (amendments do not).
|
143
159
|
# Only expects the first page of results to be populated.
|
144
160
|
# Does not match corrigenda etc (e.g. ISO 3166-1:2006/Cor 1:2007)
|
145
|
-
# If no match, returns any years which caused mismatch, for error
|
161
|
+
# If no match, returns any years which caused mismatch, for error
|
162
|
+
# reporting
|
146
163
|
def isobib_results_filter(result, year, opts)
|
147
164
|
missed_years = []
|
148
165
|
hits = result.reduce!([]) do |hts, h|
|
@@ -155,7 +172,9 @@ module RelatonIso
|
|
155
172
|
end
|
156
173
|
return { years: missed_years } unless hits.any?
|
157
174
|
|
158
|
-
|
175
|
+
if !opts[:all_parts] || hits.size == 1
|
176
|
+
return { ret: hits.first.fetch(opts[:lang]) }
|
177
|
+
end
|
159
178
|
|
160
179
|
{ ret: hits.to_all_parts(opts[:lang]) }
|
161
180
|
end
|
@@ -163,11 +182,10 @@ module RelatonIso
|
|
163
182
|
|
164
183
|
# @param code [String]
|
165
184
|
# @param year [String, NilClass]
|
166
|
-
# @param corr [String, NilClass]
|
167
185
|
# @param opts [Hash]
|
168
|
-
def isobib_get1(code, year,
|
186
|
+
def isobib_get1(code, year, opts)
|
169
187
|
# return iev(code) if /^IEC 60050-/.match code
|
170
|
-
result = isobib_search_filter(code,
|
188
|
+
result = isobib_search_filter(code, opts) || return
|
171
189
|
ret = isobib_results_filter(result, year, opts)
|
172
190
|
if ret[:ret]
|
173
191
|
warn "[relaton-iso] (\"#{opts[:ref]}\") found #{ret[:ret].docidentifier.first.id}"
|
data/lib/relaton_iso/scrapper.rb
CHANGED
@@ -162,7 +162,7 @@ module RelatonIso
|
|
162
162
|
[Nokogiri::HTML(resp.body), url]
|
163
163
|
rescue SocketError, Timeout::Error, Errno::EINVAL, Errno::ECONNRESET,
|
164
164
|
EOFError, Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError,
|
165
|
-
Net::ProtocolError,
|
165
|
+
Net::ProtocolError, Errno::ETIMEDOUT
|
166
166
|
raise RelatonBib::RequestError, "Could not access #{url}"
|
167
167
|
end
|
168
168
|
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
@@ -394,7 +394,8 @@ module RelatonIso
|
|
394
394
|
links << { type: "obp", content: obp[:href] } if obp
|
395
395
|
rss = doc.at("//a[contains(@href, 'rss')]")
|
396
396
|
links << { type: "rss", content: DOMAIN + rss[:href] } if rss
|
397
|
-
pub = doc.at "//p[contains(., 'publicly available')]/a"
|
397
|
+
pub = doc.at "//p[contains(., 'publicly available')]/a",
|
398
|
+
"//p[contains(., 'can be downloaded from the')]/a"
|
398
399
|
links << { type: "pub", content: pub[:href] } if pub
|
399
400
|
links
|
400
401
|
end
|
data/lib/relaton_iso/version.rb
CHANGED
data/relaton_iso.gemspec
CHANGED
@@ -37,6 +37,6 @@ Gem::Specification.new do |spec|
|
|
37
37
|
spec.add_development_dependency "vcr"
|
38
38
|
spec.add_development_dependency "webmock"
|
39
39
|
|
40
|
-
spec.add_dependency "relaton-iec", "~> 1.
|
41
|
-
spec.add_dependency "relaton-iso-bib", "~> 1.
|
40
|
+
spec.add_dependency "relaton-iec", "~> 1.6.pre"
|
41
|
+
spec.add_dependency "relaton-iso-bib", "~> 1.6.pre"
|
42
42
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: relaton-iso
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.pre1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-11-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: byebug
|
@@ -156,28 +156,28 @@ dependencies:
|
|
156
156
|
requirements:
|
157
157
|
- - "~>"
|
158
158
|
- !ruby/object:Gem::Version
|
159
|
-
version: 1.
|
159
|
+
version: 1.6.pre
|
160
160
|
type: :runtime
|
161
161
|
prerelease: false
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
163
163
|
requirements:
|
164
164
|
- - "~>"
|
165
165
|
- !ruby/object:Gem::Version
|
166
|
-
version: 1.
|
166
|
+
version: 1.6.pre
|
167
167
|
- !ruby/object:Gem::Dependency
|
168
168
|
name: relaton-iso-bib
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
170
170
|
requirements:
|
171
171
|
- - "~>"
|
172
172
|
- !ruby/object:Gem::Version
|
173
|
-
version: 1.
|
173
|
+
version: 1.6.pre
|
174
174
|
type: :runtime
|
175
175
|
prerelease: false
|
176
176
|
version_requirements: !ruby/object:Gem::Requirement
|
177
177
|
requirements:
|
178
178
|
- - "~>"
|
179
179
|
- !ruby/object:Gem::Version
|
180
|
-
version: 1.
|
180
|
+
version: 1.6.pre
|
181
181
|
description: 'RelatonIso: retrieve ISO Standards for bibliographic use using the IsoBibliographicItem
|
182
182
|
model'
|
183
183
|
email:
|
@@ -236,9 +236,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
236
236
|
version: 2.4.0
|
237
237
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
238
238
|
requirements:
|
239
|
-
- - "
|
239
|
+
- - ">"
|
240
240
|
- !ruby/object:Gem::Version
|
241
|
-
version:
|
241
|
+
version: 1.3.1
|
242
242
|
requirements: []
|
243
243
|
rubygems_version: 3.0.6
|
244
244
|
signing_key:
|