relaton-iso 1.13.3 → 1.13.4

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