relaton-iso 1.5.0 → 1.6.pre1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8238914d2b7ec4d2bc0825eb915f9cfa0f902530b825a7e26fbe6c3034cc3a77
4
- data.tar.gz: 0d3f40d3e1961da0ee55af73b316824cf5706c4e4bb0e5d44514307049f4b01f
3
+ metadata.gz: 9633da24028b24feabd31b81e93ee19e2af47994b26305d7c023aecc3ca9a090
4
+ data.tar.gz: 910de158883fc2f7cff8c36c4d78cd44fdf7f6d0f215096e0375b4a96389dcff
5
5
  SHA512:
6
- metadata.gz: 1788fa153b924357d86d5430a147d32da9e4a036a58179cbbe2057e0cb8c13567e9d78a3668fc4114e7233fb3f1a208a3dbb26080e0b0b90e430727e1ccab1dc
7
- data.tar.gz: e4e5c01f048d6b51638429d4bad4200ae0a4b964e67a2ff14389365a6d3e398b541301d11f26dc3053362f4f6ba11b22d66b2aa7df9385aa054569cd4939f480
6
+ metadata.gz: 0d413b2093884a16461db0a7358835f2279d8b227f54469caaf5bd215fa9a270f419844678359471fa16c9d7968e0339177ce37326113ebb7b6e88bc933a1115
7
+ data.tar.gz: 5c883c4a58a857589ad9019507a87e68a137b3df605bd24e3d21a563b0796e5c0f56981515ec72f46dd7769c6504178758c9abcc0640b0b960c2c7c9f00bd7f3
@@ -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
- opts[:all_parts] ||= code !~ %r{^[^\s]+\s\d+-\d+} && opts[:all_parts].nil? && code2.nil?
48
- return RelatonIec::IecBibliography.get(code, year, opts) if %r[^ISO/IEC DIR] =~ code
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, corr, opts)
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
- warn "[relaton-iso] (There was no match for #{year}, though there were matches "\
69
- "found for #{missed_years.join(', ')}.)" unless missed_years.empty?
70
- if /\d-\d/ =~ code
71
- warn "[relaton-iso] The provided document part may not exist, or the document "\
72
- "may no longer be published in parts."
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 the reference, "\
75
- "use \"#{code} (all parts)\".\nIf the document is not a standard, "\
76
- "use its document type abbreviation (TS, TR, PAS, Guide)."
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 corr [String] correction
95
+ # @param opts [Hash]
87
96
  # @return [Array<RelatonIso::Hit>]
88
- def isobib_search_filter(code, corr, opts)
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, corr, opts
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, corr, opts) do |st|
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, corr, opts) do |st|
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} =~ code # try ISO/IEC if ISO not found
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, corr, opts
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
- def try_stages(result, corr, opts)
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, corr, opts
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
- def search_code(result, code, corr, opts)
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"] =~ %r{^#{code}(?!-)}) && (
132
- corr && %r{^#{code}[\w-]*(:\d{4})?/#{corr}} =~ i.hit["docRef"] ||
133
- !corr && %r{^#{code}[\w-]*(:\d{4})?/} !~ i.hit["docRef"]
134
- ) # && %r{^#{code}} =~ i.hit["docRef"]
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
- # matches the year (if provided), and which # has a title (amendments do not).
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 reporting
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
- return { ret: hits.first.fetch(opts[:lang]) } if !opts[:all_parts] || hits.size == 1
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, corr, opts)
186
+ def isobib_get1(code, year, opts)
169
187
  # return iev(code) if /^IEC 60050-/.match code
170
- result = isobib_search_filter(code, corr, opts) || return
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}"
@@ -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, OpenSSL::SSL::SSLError, Errno::ETIMEDOUT
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RelatonIso
4
- VERSION = "1.5.0"
4
+ VERSION = "1.6.pre1"
5
5
  end
@@ -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.5.0"
41
- spec.add_dependency "relaton-iso-bib", "~> 1.5.0"
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.5.0
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-10-09 00:00:00.000000000 Z
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.5.0
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.5.0
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.5.0
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.5.0
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: '0'
241
+ version: 1.3.1
242
242
  requirements: []
243
243
  rubygems_version: 3.0.6
244
244
  signing_key: