relaton-iso 1.7.4 → 1.7.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/README.adoc +12 -0
- data/lib/relaton_iso/hit.rb +3 -0
- data/lib/relaton_iso/hit_collection.rb +47 -19
- data/lib/relaton_iso/iso_bibliography.rb +23 -35
- data/lib/relaton_iso/version.rb +1 -1
- data/relaton_iso.gemspec +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f0c5bc4d61a17fbf55ecc1d68d689198c181c5d68924b1d4cf73f4d7e166ff14
|
4
|
+
data.tar.gz: 1621f2d080eea7e977811a1616e80137317de4339fd9820e69f7245d996b3619
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4842a83c61845dc60985b5c916902d21b423be5c6eeeaf27f0d31e6db7badb63accfb48f67e64287cc77685ab23a373a17015cd15df132d7cd18f711ea30cdc6
|
7
|
+
data.tar.gz: 3729fbb3e1bdfe2406c1c80e6ad839f9f06b17f9270e5e7c19117ae943e5e750300073c2d701458c472e65a8bd4e56ec086a79b83873ec5c7ac8161cf7f18ca2
|
data/README.adoc
CHANGED
@@ -59,6 +59,18 @@ item.docidentifier
|
|
59
59
|
=> "urn:iso:std:iso-ts:ts:19115:-3:stage-90.92:ed-1:en,fr"
|
60
60
|
----
|
61
61
|
|
62
|
+
=== Search for ISO/IEC Directives
|
63
|
+
|
64
|
+
The ISO/IEC Derectives are stored in a static cache in a relaton gem. It needs to use the relaton gem to fetch the ISO/IEC Directives. Folloving reaferences are allowed to fetch:
|
65
|
+
|
66
|
+
- ISO/IEC DIR 1 - Procedures for the technical work
|
67
|
+
- ISO/IEC DIR 1 IEC SUP - Procedures for the technical work – Procedures specific to IEC
|
68
|
+
- ISO/IEC DIR 1 ISO SUP - Consolidated ISO Supplement -- Procedures specific to ISO
|
69
|
+
- ISO/IEC DIR 2 IEC - Principles and rules for the structure and drafting of ISO and IEC documents
|
70
|
+
- ISO/IEC DIR 2 ISO - Principles and rules for the structure and drafting of ISO and IEC documents
|
71
|
+
- ISO/IEC DIR IEC SUP - Procedures specific to IEC
|
72
|
+
- ISO/IEC DIR JTC 1 SUP - Procedures specific to JTC 1
|
73
|
+
|
62
74
|
=== XML serialization
|
63
75
|
|
64
76
|
Possible options:
|
data/lib/relaton_iso/hit.rb
CHANGED
@@ -10,25 +10,7 @@ module RelatonIso
|
|
10
10
|
# @param text [String] reference to search
|
11
11
|
def initialize(text)
|
12
12
|
super
|
13
|
-
|
14
|
-
http = Net::HTTP.new "www.iso.org", 443
|
15
|
-
http.use_ssl = true
|
16
|
-
search = ["status=ENT_ACTIVE,ENT_PROGRESS,ENT_INACTIVE,ENT_DELETED"]
|
17
|
-
search << "docNumber=#{num}"
|
18
|
-
search << "docPartNo=#{part}" if part
|
19
|
-
q = search.join "&"
|
20
|
-
resp = http.get("/cms/render/live/en/sites/isoorg.advancedSearch.do?#{q}",
|
21
|
-
"Accept" => "application/json, text/plain, */*")
|
22
|
-
return if resp.body.empty?
|
23
|
-
|
24
|
-
json = JSON.parse resp.body
|
25
|
-
@array = json["standards"].map { |h| Hit.new h, self }.sort! do |a, b|
|
26
|
-
if a.sort_weight == b.sort_weight
|
27
|
-
(parse_date(b.hit) - parse_date(a.hit)).to_i
|
28
|
-
else
|
29
|
-
a.sort_weight - b.sort_weight
|
30
|
-
end
|
31
|
-
end
|
13
|
+
@array = text.match?(/^ISO\sTC\s184\/SC\s?4/) ? fetch_github : fetch_iso
|
32
14
|
end
|
33
15
|
|
34
16
|
# @param lang [String, NilClass]
|
@@ -54,6 +36,52 @@ module RelatonIso
|
|
54
36
|
|
55
37
|
private
|
56
38
|
|
39
|
+
#
|
40
|
+
# Fetch document from GitHub repository
|
41
|
+
#
|
42
|
+
# @return [Array<RelatonIso::Hit]
|
43
|
+
#
|
44
|
+
def fetch_github
|
45
|
+
ref = text.gsub(/[\s\/]/, "_").upcase
|
46
|
+
url = "https://raw.githubusercontent.com/relaton/relaton-data-iso/main/data/#{ref}.yaml"
|
47
|
+
resp = Net::HTTP.get_response URI(url)
|
48
|
+
return [] unless resp.code == "200"
|
49
|
+
|
50
|
+
hash = YAML.safe_load resp.body
|
51
|
+
bib_hash = RelatonIsoBib::HashConverter.hash_to_bib hash
|
52
|
+
bib = RelatonIsoBib::IsoBibliographicItem.new **bib_hash
|
53
|
+
hit = Hit.new({ "docRef" => text }, self)
|
54
|
+
hit.fetch = bib
|
55
|
+
[hit]
|
56
|
+
end
|
57
|
+
|
58
|
+
#
|
59
|
+
# Fetch hits from iso.org
|
60
|
+
#
|
61
|
+
# @return [Array<RelatonIso::Hit>]
|
62
|
+
#
|
63
|
+
def fetch_iso
|
64
|
+
%r{\s(?<num>\d+)(-(?<part>[\d-]+))?} =~ text
|
65
|
+
http = Net::HTTP.new "www.iso.org", 443
|
66
|
+
http.use_ssl = true
|
67
|
+
search = ["status=ENT_ACTIVE,ENT_PROGRESS,ENT_INACTIVE,ENT_DELETED"]
|
68
|
+
search << "docNumber=#{num}"
|
69
|
+
search << "docPartNo=#{part}" if part
|
70
|
+
q = search.join "&"
|
71
|
+
resp = http.get("/cms/render/live/en/sites/isoorg.advancedSearch.do?#{q}",
|
72
|
+
"Accept" => "application/json, text/plain, */*")
|
73
|
+
return if resp.body.empty?
|
74
|
+
|
75
|
+
json = JSON.parse resp.body
|
76
|
+
json["standards"].map { |h| Hit.new h, self }.sort! do |a, b|
|
77
|
+
if a.sort_weight == b.sort_weight
|
78
|
+
(parse_date(b.hit) - parse_date(a.hit)).to_i
|
79
|
+
else
|
80
|
+
a.sort_weight - b.sort_weight
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
57
85
|
# @param hit [Hash]
|
58
86
|
# @return [Date]
|
59
87
|
def parse_date(hit)
|
@@ -26,32 +26,13 @@ module RelatonIso
|
|
26
26
|
# return actual reference with year
|
27
27
|
# @return [String] Relaton XML serialisation of reference
|
28
28
|
def get(ref, year = nil, opts = {})
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
}x =~ opts[:ref]
|
37
|
-
code = code1 || opts[:ref]
|
38
|
-
|
39
|
-
if year.nil?
|
40
|
-
/^(?<code1>[^\s]+(\s\w+)?\s[\d-]+)(:(?<year1>\d{4}))?(?<code2>\s\w+)?/ =~ code
|
41
|
-
/:(?<year2>\d{4})/ =~ corr
|
42
|
-
unless code1.nil?
|
43
|
-
code = code1 + code2.to_s
|
44
|
-
year = year2 || year1
|
45
|
-
end
|
46
|
-
end
|
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
|
29
|
+
code = ref.gsub(/\u2013/, "-")
|
30
|
+
%r{\s(?<num>\d+)(-(?<part>[\d-]+))?(:(?<year1>\d{4}))?} =~ code
|
31
|
+
year ||= year1
|
32
|
+
opts[:all_parts] ||= !part && opts[:all_parts].nil? # && code2.nil?
|
33
|
+
# if %r[^ISO/IEC DIR].match? code
|
34
|
+
# return RelatonIec::IecBibliography.get(code, year, opts)
|
35
|
+
# end
|
55
36
|
|
56
37
|
ret = isobib_get1(code, year, opts)
|
57
38
|
return nil if ret.nil?
|
@@ -95,7 +76,7 @@ module RelatonIso
|
|
95
76
|
# @param opts [Hash]
|
96
77
|
# @return [Array<RelatonIso::Hit>]
|
97
78
|
def isobib_search_filter(code, opts)
|
98
|
-
warn "[relaton-iso] (\"#{
|
79
|
+
warn "[relaton-iso] (\"#{code}\") fetching..."
|
99
80
|
result = search(code)
|
100
81
|
res = search_code result, code, opts
|
101
82
|
return res unless res.empty?
|
@@ -140,17 +121,24 @@ module RelatonIso
|
|
140
121
|
# @param opts [Hash]
|
141
122
|
# @return [RelatonIso::HitCollection]
|
142
123
|
def search_code(result, code, opts) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity
|
143
|
-
|
144
|
-
corr_regex = %r{^#{code}[\w-]*(:\d{4})?/#{opts[:corr]}}
|
145
|
-
no_corr_regex = %r{^#{code}[\w-]*(:\d{4})?/}
|
124
|
+
code1, part1, corr1, coryear1 = ref_components code
|
146
125
|
result.select do |i|
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
)
|
126
|
+
code2, part2, corr2, coryear2 = ref_components i.hit["docRef"]
|
127
|
+
code1 == code2 && (!part1 || part1 == part2) &&
|
128
|
+
corr1 == corr2 && (!coryear1 || coryear1 == coryear2)
|
151
129
|
end
|
152
130
|
end
|
153
131
|
|
132
|
+
def ref_components(ref)
|
133
|
+
%r{
|
134
|
+
^(?<code>ISO(?:\s|\/)[^-\/:]+)
|
135
|
+
(?:-(?<part>[^:\/]+))?
|
136
|
+
(?::\d{4})?
|
137
|
+
(?:\/(?<corr>\w+(?:\s\w+)?\s\d+)(?:(?<coryear>\d{4}))?)?
|
138
|
+
}x =~ ref
|
139
|
+
[code, part, corr, coryear]
|
140
|
+
end
|
141
|
+
|
154
142
|
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
|
155
143
|
|
156
144
|
# Sort through the results from RelatonIso, fetching them three at a time,
|
@@ -188,7 +176,7 @@ module RelatonIso
|
|
188
176
|
result = isobib_search_filter(code, opts) || return
|
189
177
|
ret = isobib_results_filter(result, year, opts)
|
190
178
|
if ret[:ret]
|
191
|
-
warn "[relaton-iso] (\"#{
|
179
|
+
warn "[relaton-iso] (\"#{code}\") found #{ret[:ret].docidentifier.first.id}"
|
192
180
|
ret[:ret]
|
193
181
|
else
|
194
182
|
fetch_ref_err(code, year, ret[:years])
|
data/lib/relaton_iso/version.rb
CHANGED
data/relaton_iso.gemspec
CHANGED
@@ -30,7 +30,7 @@ Gem::Specification.new do |spec|
|
|
30
30
|
# spec.add_development_dependency "debase"
|
31
31
|
spec.add_development_dependency "equivalent-xml", "~> 0.6"
|
32
32
|
spec.add_development_dependency "pry-byebug"
|
33
|
-
spec.add_development_dependency "rake", "~>
|
33
|
+
spec.add_development_dependency "rake", "~> 13.0"
|
34
34
|
spec.add_development_dependency "rspec", "~> 3.0"
|
35
35
|
# spec.add_development_dependency "ruby-debug-ide"
|
36
36
|
spec.add_development_dependency "simplecov"
|
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.7.
|
4
|
+
version: 1.7.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: 2021-
|
11
|
+
date: 2021-05-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: byebug
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '13.0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '13.0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rspec
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|