relaton-iso 1.13.3 → 1.13.5
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/rake.yml +0 -1
- data/lib/relaton_iso/iso_bibliography.rb +108 -39
- data/lib/relaton_iso/version.rb +1 -1
- data/relaton_iso.gemspec +2 -1
- metadata +23 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 545043eab945ec715dbf08c77dbd3c07379b87d0c06c317431223a97cb0b7816
|
4
|
+
data.tar.gz: 8f7594c2399682c780e47eb4e770deb19d48a17ffd5c21efc1938a463768eb25
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 15b2628861c98f99a4879ec5d4c94f52d6551cdd20b322127d9ec4f42e2370e6f85350b95a257ecaaa49843bd29975a74e33fadff12bcbacc594d5ab3dd00d75
|
7
|
+
data.tar.gz: d5491c7ac248b6e3ba7bee7dbd2c32527103a3ede84dc14bfc67d29597c35e735ea47b5beed488f104ae3e9a46e28201aad0bc2667a85203a95d9bb9c9486c6e
|
data/.github/workflows/rake.yml
CHANGED
@@ -40,6 +40,13 @@ module RelatonIso
|
|
40
40
|
|
41
41
|
resp = isobib_search_filter(query_pubid, opts)
|
42
42
|
|
43
|
+
# Try with ISO/IEC prefix if ISO not found
|
44
|
+
if resp[:hits].empty? && query_pubid.copublisher.nil? &&
|
45
|
+
query_pubid.publisher == "ISO"
|
46
|
+
resp_isoiec = retry_isoiec_prefix(query_pubid, opts)
|
47
|
+
resp = resp_isoiec unless resp_isoiec.nil?
|
48
|
+
end
|
49
|
+
|
43
50
|
# return only first one if not all_parts
|
44
51
|
ret = if !opts[:all_parts] || resp[:hits].size == 1
|
45
52
|
resp[:hits].any? && resp[:hits].first.fetch(opts[:lang])
|
@@ -47,17 +54,37 @@ module RelatonIso
|
|
47
54
|
resp[:hits].to_all_parts(opts[:lang])
|
48
55
|
end
|
49
56
|
|
50
|
-
|
51
|
-
warn "[relaton-iso] (\"#{query_pubid}\") found #{ret.docidentifier.first.id}"
|
52
|
-
else
|
53
|
-
return fetch_ref_err(query_pubid)
|
54
|
-
end
|
57
|
+
return fetch_ref_err(query_pubid) unless ret
|
55
58
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
59
|
+
# puts "xxxxx #{ret.docidentifier.first.id.inspect}"
|
60
|
+
response_docid = ret.docidentifier.first.id.sub(" (all parts)", "")
|
61
|
+
response_pubid = Pubid::Iso::Identifier.parse(response_docid)
|
62
|
+
|
63
|
+
puts "xxxxx query_pubid(#{query_pubid}) response_pubid(#{response_pubid})"
|
64
|
+
|
65
|
+
if query_pubid.to_s == response_pubid.to_s
|
66
|
+
warn "[relaton-iso] (\"#{query_pubid}\") Found exact match."
|
67
|
+
elsif matches_base?(query_pubid, response_pubid)
|
68
|
+
warn "[relaton-iso] (\"#{query_pubid}\") " \
|
69
|
+
"Found (\"#{response_pubid}\")."
|
70
|
+
elsif matches_base?(query_pubid, response_pubid, any_types_stages: true)
|
71
|
+
warn "[relaton-iso] (\"#{query_pubid}\") TIP: " \
|
72
|
+
"Found with different type/stage, " \
|
73
|
+
"please amend to (\"#{response_pubid}\")."
|
74
|
+
else
|
75
|
+
# when there are all parts
|
76
|
+
warn "[relaton-iso] (\"#{query_pubid}\") Found (\"#{response_pubid}\")."
|
60
77
|
end
|
78
|
+
|
79
|
+
get_all = (
|
80
|
+
(query_pubid.year && opts[:keep_year].nil?) ||
|
81
|
+
opts[:keep_year] ||
|
82
|
+
opts[:all_parts]
|
83
|
+
)
|
84
|
+
return ret if get_all
|
85
|
+
|
86
|
+
ret.to_most_recent_reference
|
87
|
+
|
61
88
|
rescue Pubid::Core::Errors::ParseError
|
62
89
|
warn "[relaton-iso] (\"#{code}\") is not recognized as a standards identifier."
|
63
90
|
end
|
@@ -67,12 +94,10 @@ module RelatonIso
|
|
67
94
|
# @param all_parts [Boolean] match with any parts when true
|
68
95
|
# @return [Boolean]
|
69
96
|
def matches_parts?(query_pubid, pubid, all_parts: false)
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
query_pubid.part == pubid.part
|
75
|
-
end
|
97
|
+
# match only with documents with part number
|
98
|
+
return !pubid.part.nil? if all_parts
|
99
|
+
|
100
|
+
query_pubid.part == pubid.part
|
76
101
|
end
|
77
102
|
|
78
103
|
def matches_base?(query_pubid, pubid, any_types_stages: false) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics?PerceivedComplexity
|
@@ -111,22 +136,68 @@ module RelatonIso
|
|
111
136
|
|
112
137
|
private
|
113
138
|
|
139
|
+
# @param query_pubid [Pubid::Iso::Identifier] PubID with no results
|
114
140
|
def fetch_ref_err(query_pubid) # rubocop:disable Metrics/MethodLength
|
115
|
-
warn "[relaton-iso]
|
116
|
-
"
|
117
|
-
|
118
|
-
|
119
|
-
|
141
|
+
warn "[relaton-iso] (\"#{query_pubid}\") " \
|
142
|
+
"Not found. " \
|
143
|
+
"The identifier must be exactly as shown on the ISO website."
|
144
|
+
|
145
|
+
if query_pubid.part
|
146
|
+
warn "[relaton-iso] (\"#{query_pubid}\") TIP: " \
|
147
|
+
"If it cannot be found, the document may no longer be published in parts."
|
120
148
|
else
|
121
|
-
warn "[relaton-iso]
|
122
|
-
"the reference,
|
123
|
-
|
124
|
-
"document type abbreviation (TS, TR, PAS, Guide)."
|
149
|
+
warn "[relaton-iso] (\"#{query_pubid}\") TIP: " \
|
150
|
+
"If you wish to cite all document parts for the reference, " \
|
151
|
+
"use (\"#{query_pubid.to_s(with_date: false)} (all parts)\")."
|
125
152
|
end
|
153
|
+
|
154
|
+
unless %w(TS TR PAS Guide).include?(query_pubid.type)
|
155
|
+
warn "[relaton-iso] (\"#{query_pubid}\") TIP: " \
|
156
|
+
"If the document is not an International Standard, use its " \
|
157
|
+
"deliverable type abbreviation (TS, TR, PAS, Guide)."
|
158
|
+
end
|
159
|
+
|
126
160
|
nil
|
127
161
|
end
|
128
162
|
|
129
|
-
#
|
163
|
+
# @param pubid [Pubid::Iso::Identifier]
|
164
|
+
# @param missed_years [Array<String>]
|
165
|
+
def warn_missing_years(pubid, missed_years)
|
166
|
+
warn "[relaton-iso] (\"#{pubid}\") TIP: " \
|
167
|
+
"No match for edition year #{pubid.year}, " \
|
168
|
+
"but matches exist for #{missed_years.uniq.join(', ')}."
|
169
|
+
end
|
170
|
+
|
171
|
+
# Search for hits using ISO/IEC prefix.
|
172
|
+
#
|
173
|
+
# @param old_pubid [Pubid::Iso::Identifier] reference with ISO prefix
|
174
|
+
# @param opts [Hash]
|
175
|
+
# @return [Array<RelatonIso::Hit>]
|
176
|
+
def retry_isoiec_prefix(old_pubid, opts)
|
177
|
+
return nil unless (
|
178
|
+
old_pubid.copublisher.nil? &&
|
179
|
+
old_pubid.publisher == "ISO"
|
180
|
+
)
|
181
|
+
|
182
|
+
pubid = old_pubid.dup
|
183
|
+
pubid.copublisher = "IEC"
|
184
|
+
warn "[relaton-iso] (\"#{old_pubid}\") Not found, " \
|
185
|
+
"trying with ISO/IEC prefix (\"#{pubid}\")..."
|
186
|
+
resp_isoiec = isobib_search_filter(pubid, opts)
|
187
|
+
|
188
|
+
if resp_isoiec[:hits].empty?
|
189
|
+
warn "[relaton-iso] (\"#{pubid}\") Not found. "
|
190
|
+
return nil
|
191
|
+
end
|
192
|
+
|
193
|
+
warn "[relaton-iso] (\"#{pubid}\") TIP: " \
|
194
|
+
"Found with ISO/IEC prefix, " \
|
195
|
+
"please amend to (\"#{pubid}\")."
|
196
|
+
|
197
|
+
resp_isoiec
|
198
|
+
end
|
199
|
+
|
200
|
+
# Search for hits. If no found then trying missed stages.
|
130
201
|
#
|
131
202
|
# @param query_pubid [Pubid::Iso::Identifier] reference without correction
|
132
203
|
# @param opts [Hash]
|
@@ -134,32 +205,29 @@ module RelatonIso
|
|
134
205
|
def isobib_search_filter(query_pubid, opts) # rubocop:disable Metrics/MethodLength,Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
|
135
206
|
missed_years = []
|
136
207
|
query_pubid.part = nil if opts[:all_parts]
|
137
|
-
warn "[relaton-iso] (\"#{query_pubid}\")
|
208
|
+
warn "[relaton-iso] (\"#{query_pubid}\") Fetching from ISO..."
|
209
|
+
|
138
210
|
# fetch hits collection
|
139
|
-
|
211
|
+
query_pubid_without_year = query_pubid.dup
|
212
|
+
# remove year for query
|
213
|
+
query_pubid_without_year.year = nil
|
214
|
+
hit_collection = search(query_pubid_without_year.to_s(with_date: false))
|
215
|
+
|
140
216
|
# filter only matching hits
|
141
217
|
res = filter_hits hit_collection, query_pubid, all_parts: opts[:all_parts]
|
142
218
|
return res unless res[:hits].empty?
|
143
|
-
|
144
219
|
missed_years += res[:missed_years]
|
220
|
+
|
145
221
|
# lookup for documents with stages when no match without stage
|
146
222
|
res = filter_hits hit_collection, query_pubid,
|
147
223
|
all_parts: opts[:all_parts], any_types_stages: true
|
148
224
|
return res unless res[:hits].empty?
|
149
|
-
|
150
225
|
missed_years += res[:missed_years]
|
151
|
-
# TODO: do this at pubid-iso
|
152
|
-
if query_pubid.publisher == "ISO" && query_pubid.copublisher.nil? # try ISO/IEC if ISO not found
|
153
|
-
warn "[relaton-iso] Attempting ISO/IEC retrieval"
|
154
|
-
query_pubid.copublisher = "IEC"
|
155
|
-
res = filter_hits hit_collection, query_pubid, all_parts: opts[:all_parts]
|
156
|
-
missed_years += res[:missed_years]
|
157
|
-
end
|
158
226
|
|
159
|
-
if
|
160
|
-
|
161
|
-
"were matches found for #{missed_years.uniq.join(', ')}.)"
|
227
|
+
if missed_years.any?
|
228
|
+
warn_missing_years(query_pubid, missed_years)
|
162
229
|
end
|
230
|
+
|
163
231
|
res
|
164
232
|
end
|
165
233
|
|
@@ -180,6 +248,7 @@ module RelatonIso
|
|
180
248
|
|
181
249
|
filter_hits_by_year(result, query_pubid.year)
|
182
250
|
end
|
251
|
+
|
183
252
|
end
|
184
253
|
end
|
185
254
|
end
|
data/lib/relaton_iso/version.rb
CHANGED
data/relaton_iso.gemspec
CHANGED
@@ -39,6 +39,7 @@ Gem::Specification.new do |spec|
|
|
39
39
|
spec.add_development_dependency "webmock"
|
40
40
|
|
41
41
|
spec.add_dependency "algolia"
|
42
|
-
spec.add_dependency "pubid-
|
42
|
+
spec.add_dependency "pubid-core", "1.2.1"
|
43
|
+
spec.add_dependency "pubid-iso", "~> 0.2.0"
|
43
44
|
spec.add_dependency "relaton-iso-bib", "~> 1.13.0"
|
44
45
|
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.13.
|
4
|
+
version: 1.13.5
|
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: 2022-
|
11
|
+
date: 2022-10-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: byebug
|
@@ -179,19 +179,33 @@ dependencies:
|
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: '0'
|
181
181
|
- !ruby/object:Gem::Dependency
|
182
|
-
name: pubid-
|
182
|
+
name: pubid-core
|
183
183
|
requirement: !ruby/object:Gem::Requirement
|
184
184
|
requirements:
|
185
185
|
- - '='
|
186
186
|
- !ruby/object:Gem::Version
|
187
|
-
version:
|
187
|
+
version: 1.2.1
|
188
188
|
type: :runtime
|
189
189
|
prerelease: false
|
190
190
|
version_requirements: !ruby/object:Gem::Requirement
|
191
191
|
requirements:
|
192
192
|
- - '='
|
193
193
|
- !ruby/object:Gem::Version
|
194
|
-
version:
|
194
|
+
version: 1.2.1
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
name: pubid-iso
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - "~>"
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: 0.2.0
|
202
|
+
type: :runtime
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - "~>"
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: 0.2.0
|
195
209
|
- !ruby/object:Gem::Dependency
|
196
210
|
name: relaton-iso-bib
|
197
211
|
requirement: !ruby/object:Gem::Requirement
|
@@ -259,7 +273,7 @@ homepage: https://github.com/relaton/relaton-iso
|
|
259
273
|
licenses:
|
260
274
|
- BSD-2-Clause
|
261
275
|
metadata: {}
|
262
|
-
post_install_message:
|
276
|
+
post_install_message:
|
263
277
|
rdoc_options: []
|
264
278
|
require_paths:
|
265
279
|
- lib
|
@@ -274,8 +288,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
274
288
|
- !ruby/object:Gem::Version
|
275
289
|
version: '0'
|
276
290
|
requirements: []
|
277
|
-
rubygems_version: 3.
|
278
|
-
signing_key:
|
291
|
+
rubygems_version: 3.1.6
|
292
|
+
signing_key:
|
279
293
|
specification_version: 4
|
280
294
|
summary: 'RelatonIso: retrieve ISO Standards for bibliographic use using the IsoBibliographicItem
|
281
295
|
model'
|