relaton-iec 1.4.0 → 1.7.0
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/macos.yml +2 -0
- data/README.adoc +2 -2
- data/grammars/iec.rng +7 -0
- data/grammars/isodoc.rng +21 -44
- data/grammars/isostandard.rng +7 -0
- data/lib/relaton_iec/hit_collection.rb +48 -11
- data/lib/relaton_iec/iec_bibliography.rb +23 -8
- data/lib/relaton_iec/scrapper.rb +1 -2
- data/lib/relaton_iec/version.rb +1 -1
- data/relaton_iec.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: affb3c4e8c5d26115be469d456d5b3de4f89f1184226b7a51b8dbabdd1cae937
|
4
|
+
data.tar.gz: cb850e8a8cbae05c66b629db7f2ee548debf0f1dfe3d03d6dc75e8c6e85900d2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 107761f95543a8f188d45e5aa3ea676fe904a152d32d0ebdd92e1e66ac42e2164287ac0feef3906fbb596bd6807636c3f70938fe301a2b53f2ffaf34cf316b54
|
7
|
+
data.tar.gz: bcd04f967647bed2d2a4cebaff71cf5acf03ad1e388a81d44f150e9d1d4bbdbd9d16e3de222134d5806112453a3e0e4fd82aa3cc2f9ce1e55047b7f9439b9d4c
|
data/.github/workflows/macos.yml
CHANGED
@@ -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: |
|
data/README.adoc
CHANGED
@@ -18,7 +18,7 @@ Add this line to your application's Gemfile:
|
|
18
18
|
|
19
19
|
[source,ruby]
|
20
20
|
----
|
21
|
-
gem '
|
21
|
+
gem 'relaton-iec'
|
22
22
|
----
|
23
23
|
|
24
24
|
And then execute:
|
@@ -27,7 +27,7 @@ And then execute:
|
|
27
27
|
|
28
28
|
Or install it yourself as:
|
29
29
|
|
30
|
-
$ gem install
|
30
|
+
$ gem install relaton-iec
|
31
31
|
|
32
32
|
== Usage
|
33
33
|
|
data/grammars/iec.rng
CHANGED
@@ -23,6 +23,13 @@
|
|
23
23
|
-->
|
24
24
|
<define name="iec-standard">
|
25
25
|
<element name="iec-standard">
|
26
|
+
<attribute name="version"/>
|
27
|
+
<attribute name="type">
|
28
|
+
<choice>
|
29
|
+
<value>semantic</value>
|
30
|
+
<value>presentation</value>
|
31
|
+
</choice>
|
32
|
+
</attribute>
|
26
33
|
<ref name="bibdata"/>
|
27
34
|
<zeroOrMore>
|
28
35
|
<ref name="termdocsource"/>
|
data/grammars/isodoc.rng
CHANGED
@@ -24,6 +24,14 @@
|
|
24
24
|
<start>
|
25
25
|
<ref name="standard-document"/>
|
26
26
|
</start>
|
27
|
+
<define name="doctype">
|
28
|
+
<element name="doctype">
|
29
|
+
<optional>
|
30
|
+
<attribute name="abbreviation"/>
|
31
|
+
</optional>
|
32
|
+
<ref name="DocumentType"/>
|
33
|
+
</element>
|
34
|
+
</define>
|
27
35
|
<define name="hyperlink">
|
28
36
|
<element name="link">
|
29
37
|
<attribute name="target">
|
@@ -42,7 +50,6 @@
|
|
42
50
|
</define>
|
43
51
|
<define name="xref">
|
44
52
|
<element name="xref">
|
45
|
-
<!-- attribute target { xsd:IDREF }, -->
|
46
53
|
<attribute name="target">
|
47
54
|
<data type="string">
|
48
55
|
<param name="pattern">\i\c*|\c+#\c+</param>
|
@@ -142,6 +149,11 @@
|
|
142
149
|
<data type="boolean"/>
|
143
150
|
</attribute>
|
144
151
|
</optional>
|
152
|
+
<optional>
|
153
|
+
<attribute name="key">
|
154
|
+
<data type="boolean"/>
|
155
|
+
</attribute>
|
156
|
+
</optional>
|
145
157
|
<oneOrMore>
|
146
158
|
<ref name="dt"/>
|
147
159
|
<ref name="dd"/>
|
@@ -864,6 +876,13 @@
|
|
864
876
|
</define>
|
865
877
|
<define name="standard-document">
|
866
878
|
<element name="standard-document">
|
879
|
+
<attribute name="version"/>
|
880
|
+
<attribute name="type">
|
881
|
+
<choice>
|
882
|
+
<value>semantic</value>
|
883
|
+
<value>presentation</value>
|
884
|
+
</choice>
|
885
|
+
</attribute>
|
867
886
|
<ref name="bibdata"/>
|
868
887
|
<optional>
|
869
888
|
<ref name="boilerplate"/>
|
@@ -1158,49 +1177,7 @@
|
|
1158
1177
|
</define>
|
1159
1178
|
<define name="annex">
|
1160
1179
|
<element name="annex">
|
1161
|
-
<
|
1162
|
-
<attribute name="id">
|
1163
|
-
<data type="ID"/>
|
1164
|
-
</attribute>
|
1165
|
-
</optional>
|
1166
|
-
<optional>
|
1167
|
-
<attribute name="language"/>
|
1168
|
-
</optional>
|
1169
|
-
<optional>
|
1170
|
-
<attribute name="script"/>
|
1171
|
-
</optional>
|
1172
|
-
<optional>
|
1173
|
-
<attribute name="inline-header">
|
1174
|
-
<data type="boolean"/>
|
1175
|
-
</attribute>
|
1176
|
-
</optional>
|
1177
|
-
<attribute name="obligation">
|
1178
|
-
<choice>
|
1179
|
-
<value>normative</value>
|
1180
|
-
<value>informative</value>
|
1181
|
-
</choice>
|
1182
|
-
</attribute>
|
1183
|
-
<optional>
|
1184
|
-
<ref name="section-title"/>
|
1185
|
-
</optional>
|
1186
|
-
<group>
|
1187
|
-
<group>
|
1188
|
-
<zeroOrMore>
|
1189
|
-
<ref name="BasicBlock"/>
|
1190
|
-
</zeroOrMore>
|
1191
|
-
<zeroOrMore>
|
1192
|
-
<ref name="note"/>
|
1193
|
-
</zeroOrMore>
|
1194
|
-
</group>
|
1195
|
-
<zeroOrMore>
|
1196
|
-
<choice>
|
1197
|
-
<ref name="annex-subsection"/>
|
1198
|
-
<ref name="terms"/>
|
1199
|
-
<ref name="definitions"/>
|
1200
|
-
<ref name="references"/>
|
1201
|
-
</choice>
|
1202
|
-
</zeroOrMore>
|
1203
|
-
</group>
|
1180
|
+
<ref name="Annex-Section"/>
|
1204
1181
|
</element>
|
1205
1182
|
</define>
|
1206
1183
|
<define name="terms">
|
data/grammars/isostandard.rng
CHANGED
@@ -405,6 +405,13 @@
|
|
405
405
|
-->
|
406
406
|
<define name="iso-standard">
|
407
407
|
<element name="iso-standard">
|
408
|
+
<attribute name="version"/>
|
409
|
+
<attribute name="type">
|
410
|
+
<choice>
|
411
|
+
<value>semantic</value>
|
412
|
+
<value>presentation</value>
|
413
|
+
</choice>
|
414
|
+
</attribute>
|
408
415
|
<ref name="bibdata"/>
|
409
416
|
<zeroOrMore>
|
410
417
|
<ref name="termdocsource"/>
|
@@ -9,23 +9,60 @@ module RelatonIec
|
|
9
9
|
DOMAIN = "https://webstore.iec.ch"
|
10
10
|
|
11
11
|
# @param ref_nbr [String]
|
12
|
-
# @param year [String]
|
13
|
-
|
14
|
-
|
12
|
+
# @param year [String, nil]
|
13
|
+
# @param part [String, nil]
|
14
|
+
def initialize(ref_nbr, year = nil, part = nil)
|
15
|
+
super ref_nbr, year
|
16
|
+
@array = hits ref_nbr, year, part
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
# @param ref [String]
|
22
|
+
# @param year [String, nil]
|
23
|
+
# @param part [String, nil]
|
24
|
+
# @return [Array<RelatonIec::Hit>]
|
25
|
+
def hits(ref, year, part)
|
15
26
|
from, to = nil
|
16
27
|
if year
|
17
28
|
from = Date.strptime year, "%Y"
|
18
29
|
to = from.next_year.prev_day
|
19
30
|
end
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
31
|
+
get_results ref, from, to, part
|
32
|
+
end
|
33
|
+
|
34
|
+
# @param ref [String]
|
35
|
+
# @param from [Date, nil]
|
36
|
+
# @param to [Date, nil]
|
37
|
+
# @param part [String, nil]
|
38
|
+
# @return [Array<RelatonIec::Hit>]
|
39
|
+
def get_results(ref, from, to, part = nil)
|
40
|
+
code = part ? ref.sub(/(?<=-\d)\d+/, "*") : ref
|
41
|
+
[nil, "trf", "wr"].reduce([]) do |m, t|
|
42
|
+
url = "#{DOMAIN}/searchkey"
|
43
|
+
url += "&type=#{t}" if t
|
44
|
+
url += "&RefNbr=#{code}&From=#{from}&To=#{to}&start=1"
|
45
|
+
m + results(Addressable::URI.parse(url).normalize, part)
|
28
46
|
end
|
29
47
|
end
|
48
|
+
|
49
|
+
# @param url [String]
|
50
|
+
# @param part [String, nil]
|
51
|
+
# @return [Array<RelatonIec::Hit>]
|
52
|
+
def results(uri, part)
|
53
|
+
contains = "[contains(.,'Part #{part}:')]" if part
|
54
|
+
Nokogiri::HTML(OpenURI.open_uri(uri)).xpath(
|
55
|
+
"//body/li#{contains}",
|
56
|
+
"//ul[contains(@class,'search-results')]/li#{contains}",
|
57
|
+
"//ul[contains(@class,'morethesame')]/li#{contains}"
|
58
|
+
).map { |h| make_hit h }
|
59
|
+
end
|
60
|
+
|
61
|
+
def make_hit(hit)
|
62
|
+
link = hit.at('a[@href!="#"]')
|
63
|
+
code = link.text.tr [194, 160].pack("c*").force_encoding("UTF-8"), ""
|
64
|
+
title = hit.xpath("text()").text.gsub(/[\r\n]/, "")
|
65
|
+
Hit.new({ code: code, title: title, url: DOMAIN + link[:href] }, self)
|
66
|
+
end
|
30
67
|
end
|
31
68
|
end
|
@@ -9,10 +9,19 @@ module RelatonIec
|
|
9
9
|
# Class methods for search ISO standards.
|
10
10
|
class IecBibliography
|
11
11
|
class << self
|
12
|
+
##
|
13
|
+
# Search for standards entries. To seach packaged document it needs to
|
14
|
+
# pass part parametr.
|
15
|
+
#
|
16
|
+
# @example Search for packaged standard
|
17
|
+
# RelatonIec::IecBibliography.search 'IEC 60050-311', nil, '311'
|
18
|
+
#
|
12
19
|
# @param text [String]
|
20
|
+
# @param year [String, nil]
|
21
|
+
# @param part [String, nil] search for packaged stndard if not nil
|
13
22
|
# @return [RelatonIec::HitCollection]
|
14
|
-
def search(text, year = nil)
|
15
|
-
HitCollection.new text, year
|
23
|
+
def search(text, year = nil, part = nil)
|
24
|
+
HitCollection.new text, year, part
|
16
25
|
rescue SocketError, OpenURI::HTTPError, OpenSSL::SSL::SSLError
|
17
26
|
raise RelatonBib::RequestError, "Could not access http://www.iec.ch"
|
18
27
|
end
|
@@ -76,14 +85,20 @@ module RelatonIec
|
|
76
85
|
workers.result.sort_by { |a| a[:i] }.map { |x| x[:hit] }
|
77
86
|
end
|
78
87
|
|
79
|
-
def isobib_search_filter(code)
|
88
|
+
def isobib_search_filter(code, year) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
|
80
89
|
docidrx = %r{^(ISO|IEC)[^0-9]*\s[0-9-]+}
|
81
90
|
corrigrx = %r{^(ISO|IEC)[^0-9]*\s[0-9-]+:[0-9]+/}
|
82
91
|
warn "[relaton-iec] (\"#{code}\") fetching..."
|
83
|
-
result = search(code)
|
92
|
+
result = search(code, year)
|
93
|
+
if result.empty? && /(?<=-)(?<part>\d+)/ =~ code
|
94
|
+
# try to search packaged standard
|
95
|
+
result = search code, year, part
|
96
|
+
ref = code.sub /(?<=-\d)\d+/, ""
|
97
|
+
else ref = code
|
98
|
+
end
|
84
99
|
result.select do |i|
|
85
100
|
i.hit[:code] &&
|
86
|
-
i.hit[:code].match(docidrx).to_s.include?(
|
101
|
+
i.hit[:code].match(docidrx).to_s.include?(ref) &&
|
87
102
|
corrigrx !~ i.hit[:code]
|
88
103
|
end
|
89
104
|
end
|
@@ -136,9 +151,9 @@ module RelatonIec
|
|
136
151
|
return { ret: r } if !year
|
137
152
|
|
138
153
|
r.date.select { |d| d.type == "published" }.each do |d|
|
139
|
-
return { ret: r } if year.to_i == d.on
|
154
|
+
return { ret: r } if year.to_i == d.on(:year)
|
140
155
|
|
141
|
-
missed_years << d.on
|
156
|
+
missed_years << d.on(:year)
|
142
157
|
end
|
143
158
|
end
|
144
159
|
end
|
@@ -148,7 +163,7 @@ module RelatonIec
|
|
148
163
|
def iecbib_get1(code, year, _opts)
|
149
164
|
return iev if code.casecmp("IEV").zero?
|
150
165
|
|
151
|
-
result = isobib_search_filter(code) || return
|
166
|
+
result = isobib_search_filter(code, year) || return
|
152
167
|
ret = isobib_results_filter(result, year)
|
153
168
|
if ret[:ret]
|
154
169
|
warn "[relaton-iec] (\"#{code}\") found "\
|
data/lib/relaton_iec/scrapper.rb
CHANGED
@@ -223,8 +223,7 @@ module RelatonIec
|
|
223
223
|
def fetch_status_relations(url)
|
224
224
|
pubid = url.match(/\d+$/).to_s
|
225
225
|
uri = URI DOMAIN + "/webstore/webstore.nsf/AjaxRequestXML?"\
|
226
|
-
"Openagent&url=
|
227
|
-
"p=103:390:::::P390_PUBLICATION_ID:" + pubid
|
226
|
+
"Openagent&url=" + pubid
|
228
227
|
resp = Net::HTTP.get_response uri
|
229
228
|
doc = Nokogiri::XML resp.body
|
230
229
|
status = fetch_status doc
|
data/lib/relaton_iec/version.rb
CHANGED
data/relaton_iec.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: relaton-iec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.7.0
|
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-
|
11
|
+
date: 2020-11-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: debase
|
@@ -170,14 +170,14 @@ dependencies:
|
|
170
170
|
requirements:
|
171
171
|
- - "~>"
|
172
172
|
- !ruby/object:Gem::Version
|
173
|
-
version: 1.
|
173
|
+
version: 1.7.0
|
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.
|
180
|
+
version: 1.7.0
|
181
181
|
description: 'RelatonIec: retrieve IEC Standards for bibliographic use using the IecBibliographicItem
|
182
182
|
model'
|
183
183
|
email:
|