relaton-nist 1.19.4 → 1.19.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/lib/relaton_nist/data_fetcher.rb +1 -1
- data/lib/relaton_nist/hit_collection.rb +59 -25
- data/lib/relaton_nist/mods_parser.rb +23 -12
- data/lib/relaton_nist/version.rb +1 -1
- data/lib/relaton_nist.rb +2 -0
- data/relaton_nist.gemspec +1 -0
- metadata +16 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 47c01d46202e813e27019c4beb5e5ccc4aa258a61dd4f6ea3b184009e6ae9e09
|
|
4
|
+
data.tar.gz: 2dadbcee5b551aefb4f4cefe04620964d3455acb842f005944e2f30e195d94ba
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3e264c34cfea0e5ef97894265d0e6917081d05e7d317142475badb242036eeae4e4caafde6cd2f19c62ae12b99560cef88d92638f40d2e9592a37a704cef8aca
|
|
7
|
+
data.tar.gz: 262e7bf0461fbd19f9da7346128166ab2d07fdc3e8f3cffff2ec20ec5fad2b6883a8f4f85624675e5e586a29b3a17cfe28eee426b63b23ce8b7c3fc3fb83a426
|
|
@@ -6,7 +6,7 @@ require_relative "mods_parser"
|
|
|
6
6
|
|
|
7
7
|
module RelatonNist
|
|
8
8
|
class DataFetcher
|
|
9
|
-
URL = "https://github.com/usnistgov/NIST-Tech-Pubs/releases/download/
|
|
9
|
+
URL = "https://github.com/usnistgov/NIST-Tech-Pubs/releases/download/Oct2024/allrecords-MODS.xml"
|
|
10
10
|
|
|
11
11
|
def initialize(output, format)
|
|
12
12
|
@output = output
|
|
@@ -23,7 +23,7 @@ module RelatonNist
|
|
|
23
23
|
#
|
|
24
24
|
def initialize(text, year = nil, opts = {})
|
|
25
25
|
super text, year
|
|
26
|
-
@reference = year && !text.match?(/:\d{4}$/) ? "#{text}
|
|
26
|
+
@reference = text # year && !text.match?(/:\d{4}$/) ? "#{text}-#{year}" : text
|
|
27
27
|
@opts = opts
|
|
28
28
|
end
|
|
29
29
|
|
|
@@ -58,21 +58,29 @@ module RelatonNist
|
|
|
58
58
|
# @return [Array<RelatonNist::Hit>] hits
|
|
59
59
|
#
|
|
60
60
|
def search_filter # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity,Metrics/MethodLength
|
|
61
|
+
refid = ::Pubid::Nist::Identifier.parse(@reference)
|
|
61
62
|
arr = @array.select do |item|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
63
|
+
pubid = ::Pubid::Nist::Identifier.parse(item.hit[:code].sub(/\.$/, ""))
|
|
64
|
+
pubid == refid
|
|
65
|
+
# parts = doi_parts(item.hit[:json]) || code_parts(item.hit[:code])
|
|
66
|
+
# iteration = item.hit.dig(:json, "iteration")
|
|
67
|
+
# draft = parts[:draft] || (!iteration.nil? && iteration.match?(/\wpd/i))
|
|
68
|
+
# refparts[:code] && [parts[:series], item.hit[:series]].include?(refparts[:series]) &&
|
|
69
|
+
# refparts[:code].casecmp(parts[:code].upcase).zero? &&
|
|
70
|
+
# refparts[:prt] == parts[:prt] &&
|
|
71
|
+
# (refparts[:vol].nil? || refparts[:vol] == parts[:vol]) &&
|
|
72
|
+
# (refparts[:ver].nil? || refparts[:ver] == parts[:ver]) &&
|
|
73
|
+
# (refparts[:rev].nil? || refparts[:rev] == parts[:rev]) &&
|
|
74
|
+
# refparts[:draft] == draft && refparts[:add] == parts[:add]
|
|
75
|
+
rescue StandardError
|
|
76
|
+
item.hit[:code] == text
|
|
72
77
|
end
|
|
78
|
+
rescue StandardError
|
|
79
|
+
arr = @array.select { |item| item.hit[:code] == text }
|
|
80
|
+
ensure
|
|
73
81
|
dup = self.dup
|
|
74
82
|
dup.array = arr
|
|
75
|
-
dup
|
|
83
|
+
return dup
|
|
76
84
|
end
|
|
77
85
|
|
|
78
86
|
private
|
|
@@ -182,6 +190,12 @@ module RelatonNist
|
|
|
182
190
|
self
|
|
183
191
|
end
|
|
184
192
|
|
|
193
|
+
def pubid(id = text)
|
|
194
|
+
Pubid::Nist::Identifier.parse(id).to_s
|
|
195
|
+
rescue StandardError
|
|
196
|
+
id
|
|
197
|
+
end
|
|
198
|
+
|
|
185
199
|
#
|
|
186
200
|
# Get hit from GitHub repo
|
|
187
201
|
#
|
|
@@ -191,8 +205,8 @@ module RelatonNist
|
|
|
191
205
|
#
|
|
192
206
|
def from_ga # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
|
193
207
|
Util.info "Fetching from Relaton repository ...", key: @reference
|
|
194
|
-
ref =
|
|
195
|
-
return [] if ref.empty?
|
|
208
|
+
ref = pubid
|
|
209
|
+
# return [] if ref.empty?
|
|
196
210
|
|
|
197
211
|
# fn = ref.gsub(%r{[/\s:.]}, "_").upcase
|
|
198
212
|
index = Relaton::Index.find_or_create :nist, url: "#{GHNISTDATA}index-v1.zip", file: INDEX_FILE
|
|
@@ -227,24 +241,44 @@ module RelatonNist
|
|
|
227
241
|
/(?<series>(?<=-)\w+$)/ =~ h["series"]
|
|
228
242
|
title = [h["title-main"], h["title-sub"]].compact.join " - "
|
|
229
243
|
release_date = RelatonBib.parse_date h["published-date"], false
|
|
230
|
-
Hit.new({ code:
|
|
244
|
+
Hit.new({ code: pubs_export_id(h), series: series.upcase, title: title, url: h["uri"],
|
|
231
245
|
status: h["status"], release_date: release_date, json: h }, self)
|
|
232
246
|
end
|
|
233
247
|
end
|
|
234
248
|
|
|
235
|
-
def
|
|
236
|
-
|
|
249
|
+
def pubs_export_id(json) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/MethodLength
|
|
250
|
+
if json && json["doi"]
|
|
251
|
+
json["doi"].sub(/^10.6028\//, "")
|
|
252
|
+
else
|
|
253
|
+
json["docidentifier"]
|
|
254
|
+
end => id
|
|
255
|
+
# parts = doi_parts(json) || code_parts(json["docidentifier"])
|
|
237
256
|
# return json["docidentifier"] unless parts
|
|
238
257
|
|
|
239
|
-
id
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
258
|
+
id.sub!(/(?:-draft\d*|\.\wpd)$/, "")
|
|
259
|
+
pid = ::Pubid::Nist::Identifier.parse(id)
|
|
260
|
+
case json["iteration"]
|
|
261
|
+
when "final"
|
|
262
|
+
pid.stage = ::Pubid::Nist::Stage.new id: "f", type: "pd"
|
|
263
|
+
when "fpd"
|
|
264
|
+
pid.stage = ::Pubid::Nist::Stage.new id: "f", type: "pd"
|
|
265
|
+
when /(\w)pd/
|
|
266
|
+
pid.stage = ::Pubid::Nist::Stage.new id: Regexp.last_match(1), type: "pd"
|
|
267
|
+
end
|
|
268
|
+
pid.to_s
|
|
269
|
+
rescue StandardError
|
|
270
|
+
id += " #{json["iteration"].sub('final', 'fpd')}" if json["iteration"]
|
|
247
271
|
id
|
|
272
|
+
|
|
273
|
+
# id = parts[:code]
|
|
274
|
+
# id = "NIST #{parts[:series]} #{id}" if parts[:series]
|
|
275
|
+
# id += " Part #{parts[:prt]}" if parts[:prt]
|
|
276
|
+
# id += " Vol. #{parts[:vol]}" if parts[:vol]
|
|
277
|
+
# id += " Ver. #{parts[:ver]}" if parts[:ver]
|
|
278
|
+
# id += " Rev. #{parts[:rev]}" if parts[:rev]
|
|
279
|
+
# id += "-Add" if parts[:add]
|
|
280
|
+
# id += " (Draft)" if parts[:draft] || @opts[:stage]
|
|
281
|
+
# id
|
|
248
282
|
end
|
|
249
283
|
|
|
250
284
|
#
|
|
@@ -29,33 +29,43 @@ module RelatonNist
|
|
|
29
29
|
def parse_docid
|
|
30
30
|
[
|
|
31
31
|
{ type: "NIST", id: pub_id, primary: true },
|
|
32
|
-
{ type: "DOI", id:
|
|
32
|
+
{ type: "DOI", id: parse_doi },
|
|
33
33
|
].map { |id| RelatonBib::DocumentIdentifier.new(**id) }
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
# @return [String]
|
|
37
37
|
def pub_id
|
|
38
|
-
get_id_from_str
|
|
38
|
+
get_id_from_str parse_doi
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
def get_id_from_str(str)
|
|
42
|
-
|
|
42
|
+
::Pubid::Nist::Identifier.parse(str).to_s
|
|
43
|
+
rescue ::Pubid::Core::Errors::ParseError
|
|
44
|
+
str.gsub(".", " ").sub(/^[\D]+/, &:upcase)
|
|
43
45
|
end
|
|
44
46
|
|
|
45
47
|
# @return [String]
|
|
46
|
-
def
|
|
47
|
-
url = @doc.location.reduce(nil) { |m, l| m || l.url.detect { |u| u.usage == "primary display" } }
|
|
48
|
-
id = url.content.match(/10\.6028\/.+/)[0]
|
|
48
|
+
def replace_wrong_doi(id)
|
|
49
49
|
case id
|
|
50
|
-
when "
|
|
51
|
-
when "
|
|
52
|
-
when "
|
|
53
|
-
when "
|
|
54
|
-
when "
|
|
50
|
+
when "NBS.CIRC.sup" then "NBS.CIRC.24e7sup"
|
|
51
|
+
when "NBS.CIRC.supJun1925-Jun1926" then "NBS.CIRC.24e7sup2"
|
|
52
|
+
when "NBS.CIRC.supJun1925-Jun1927" then "NBS.CIRC.24e7sup3"
|
|
53
|
+
when "NBS.CIRC.24supJuly1922" then "NBS.CIRC.24e6sup"
|
|
54
|
+
when "NBS.CIRC.24supJan1924" then "NBS.CIRC.24e6sup2"
|
|
55
55
|
else id
|
|
56
56
|
end
|
|
57
57
|
end
|
|
58
58
|
|
|
59
|
+
def parse_doi
|
|
60
|
+
url = @doc.location.reduce(nil) { |m, l| m || l.url.detect { |u| u.usage == "primary display" } }
|
|
61
|
+
id = remove_doi_prefix(url.content)
|
|
62
|
+
replace_wrong_doi(id)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def remove_doi_prefix(id)
|
|
66
|
+
id.match(/10\.6028\/(.+)/)[1]
|
|
67
|
+
end
|
|
68
|
+
|
|
59
69
|
# @return [Array<RelatonBib::TypedTitleString>]
|
|
60
70
|
def parse_title
|
|
61
71
|
title = @doc.title_info.reduce([]) do |a, ti|
|
|
@@ -180,7 +190,8 @@ module RelatonNist
|
|
|
180
190
|
item.other_type
|
|
181
191
|
else
|
|
182
192
|
item.name[0].name_part[0].content
|
|
183
|
-
end
|
|
193
|
+
end => id
|
|
194
|
+
replace_wrong_doi remove_doi_prefix(id)
|
|
184
195
|
end
|
|
185
196
|
|
|
186
197
|
def parse_place
|
data/lib/relaton_nist/version.rb
CHANGED
data/lib/relaton_nist.rb
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
require "singleton"
|
|
2
|
+
require "pubid"
|
|
2
3
|
require "relaton/index"
|
|
3
4
|
require "relaton_bib"
|
|
4
5
|
require "relaton_nist/version"
|
|
5
6
|
require "relaton_nist/util"
|
|
7
|
+
# require "relaton_nist/pubid"
|
|
6
8
|
require "relaton_nist/nist_bibliography"
|
|
7
9
|
require "relaton_nist/data_fetcher"
|
|
8
10
|
require "relaton_nist/pubs_export"
|
data/relaton_nist.gemspec
CHANGED
|
@@ -25,6 +25,7 @@ Gem::Specification.new do |spec|
|
|
|
25
25
|
|
|
26
26
|
spec.add_dependency "base64"
|
|
27
27
|
spec.add_dependency "loc_mods", "~> 0.2.0"
|
|
28
|
+
spec.add_dependency "pubid", "~> 0.1.0"
|
|
28
29
|
spec.add_dependency "relaton-bib", "~> 1.19.2"
|
|
29
30
|
spec.add_dependency "relaton-index", "~> 0.2.0"
|
|
30
31
|
spec.add_dependency "rubyzip"
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: relaton-nist
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.19.
|
|
4
|
+
version: 1.19.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ribose Inc.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2024-
|
|
11
|
+
date: 2024-10-17 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: base64
|
|
@@ -38,6 +38,20 @@ dependencies:
|
|
|
38
38
|
- - "~>"
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: 0.2.0
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: pubid
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - "~>"
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: 0.1.0
|
|
48
|
+
type: :runtime
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - "~>"
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: 0.1.0
|
|
41
55
|
- !ruby/object:Gem::Dependency
|
|
42
56
|
name: relaton-bib
|
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|