relaton-itu 1.16.1 → 1.16.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.adoc +21 -10
- data/lib/relaton_itu/editorial_group.rb +2 -2
- data/lib/relaton_itu/hit_collection.rb +9 -7
- data/lib/relaton_itu/itu_bibliographic_item.rb +1 -1
- data/lib/relaton_itu/itu_bibliography.rb +15 -14
- data/lib/relaton_itu/pubid.rb +4 -3
- data/lib/relaton_itu/scrapper.rb +2 -2
- data/lib/relaton_itu/structured_identifier.rb +1 -1
- data/lib/relaton_itu/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 443de281f4001442162f16fb86986ab597616e3ae2981a44efe8ae9fccaa0a2b
|
4
|
+
data.tar.gz: 4389f4b0d42563047b6bb7cd927b95872f0ec0a18a5ef377e900df1f2646b473
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bac3b34ee7dd29bb81d34e684e10310c0d4496745e610fce3bc20668b8ae17ec85171823b9b48d8709137086d7d2171edbf702bc16b7b0956506a95b6273a60a
|
7
|
+
data.tar.gz: 52e8ddec0d293ab9dbe4f0c1ece20562aaf2ea838bca96f3ec423d16117be291251f4cc7b655117fa3edd18e341ecc38559b79e46b8903ac6c1f781c7eefd89b
|
data/README.adoc
CHANGED
@@ -29,13 +29,24 @@ Or install it yourself as:
|
|
29
29
|
|
30
30
|
== Usage
|
31
31
|
|
32
|
-
===
|
32
|
+
=== Configuration
|
33
|
+
|
34
|
+
Configuration is optional. The available option is `logger` which is a `Logger` instance. By default, the logger is `Logger.new($stderr)` with `Logger::WARN` level. To change the logger level, use `RelatonItu.configure` block.
|
33
35
|
|
34
36
|
[source,ruby]
|
35
37
|
----
|
36
38
|
require 'relaton_itu'
|
37
39
|
=> true
|
38
40
|
|
41
|
+
RelatonItu.configure do |config|
|
42
|
+
config.logger.level = Logger::DEBUG
|
43
|
+
end
|
44
|
+
----
|
45
|
+
|
46
|
+
=== Search for a standard using keywords
|
47
|
+
|
48
|
+
[source,ruby]
|
49
|
+
----
|
39
50
|
hit_collection = RelatonItu::ItuBibliography.search("ITU-T L.163")
|
40
51
|
=> <RelatonItu::HitCollection:0x007fbf5fb4ab60 @ref=ITU-T L.163 @fetched=false>
|
41
52
|
|
@@ -73,8 +84,8 @@ item.to_xml bibdata: true
|
|
73
84
|
[source,ruby]
|
74
85
|
----
|
75
86
|
RelatonItu::ItuBibliography.get("ITU-T L.163", "2018", {})
|
76
|
-
[relaton-itu] (
|
77
|
-
[relaton-itu] (
|
87
|
+
[relaton-itu] (ITU-T L.163) Fetching from www.itu.int ...
|
88
|
+
[relaton-itu] (ITU-T L.163) Found: `ITU-T L.163`
|
78
89
|
=> #<RelatonItu::ItuBibliographicItem:0x007fbf5f94b9b8
|
79
90
|
...
|
80
91
|
----
|
@@ -83,8 +94,8 @@ RelatonItu::ItuBibliography.get("ITU-T L.163", "2018", {})
|
|
83
94
|
[source,ruby]
|
84
95
|
----
|
85
96
|
RelatonItu::ItuBibliography.get "ITU-T G.989.2/Amd 1"
|
86
|
-
[relaton-itu] (
|
87
|
-
[relaton-itu] (
|
97
|
+
[relaton-itu] (ITU-T G.989.2/Amd 1) Fetching from www.itu.int ...
|
98
|
+
[relaton-itu] (ITU-T G.989.2/Amd 1) Found: `ITU-T G.989.2/Amd 1`
|
88
99
|
=> #<RelatonItu::ItuBibliographicItem:0x007fe5409e5840
|
89
100
|
...
|
90
101
|
----
|
@@ -94,8 +105,8 @@ RelatonItu::ItuBibliography.get "ITU-T G.989.2/Amd 1"
|
|
94
105
|
[source,ruby]
|
95
106
|
----
|
96
107
|
RelatonItu::ItuBibliography.get "ITU-R BO.600-1"
|
97
|
-
[relaton-itu] (
|
98
|
-
[relaton-itu] (
|
108
|
+
[relaton-itu] (ITU-R BO.600-1) Fetching from www.itu.int ...
|
109
|
+
[relaton-itu] (ITU-R BO.600-1) Found: `ITU-R BO.600-1`
|
99
110
|
=> #<RelatonItu::ItuBibliographicItem:0x00007fb0cf8a1308
|
100
111
|
...
|
101
112
|
----
|
@@ -105,9 +116,9 @@ RelatonItu::ItuBibliography.get "ITU-R BO.600-1"
|
|
105
116
|
[source,ruby]
|
106
117
|
----
|
107
118
|
RelatonItu::ItuBibliography.get 'ITU-R RR (2020)'
|
108
|
-
[relaton-itu] (
|
109
|
-
[relaton-itu] WARNING:
|
110
|
-
[relaton-itu] (
|
119
|
+
[relaton-itu] (ITU-R RR) Fetching from www.itu.int ...
|
120
|
+
[relaton-itu] WARNING: Invalid doctype: `publication`
|
121
|
+
[relaton-itu] (ITU-R RR) Found: ITU-R RR
|
111
122
|
=> #<RelatonItu::ItuBibliographicItem:0x007fb4b55eb660
|
112
123
|
...
|
113
124
|
----
|
@@ -17,8 +17,8 @@ module RelatonItu
|
|
17
17
|
# @param workgroup [Hash, RelatonItu::ItuGroup, NilClass]
|
18
18
|
def initialize(bureau:, group:, subgroup: nil, workgroup: nil)
|
19
19
|
unless BUREAUS.include? bureau
|
20
|
-
Util.warn "WARNING:
|
21
|
-
Util.warn "WARNING:
|
20
|
+
Util.warn "WARNING: Invalid bureau: `#{bureau}`"
|
21
|
+
Util.warn "WARNING: Valid bureaus are: `#{BUREAUS.join('`, `')}`"
|
22
22
|
end
|
23
23
|
@bureau = bureau
|
24
24
|
@group = group.is_a?(Hash) ? ItuGroup.new(**group) : group
|
@@ -21,6 +21,7 @@ module RelatonItu
|
|
21
21
|
# @param refid [RelatonItu::Pubid] reference
|
22
22
|
#
|
23
23
|
def initialize(refid) # rubocop:todo Metrics/MethodLength
|
24
|
+
@refid = refid
|
24
25
|
text = refid.to_ref.sub(/(?<=\.)Imp\s?(?=\d)/, "")
|
25
26
|
super text, refid.year
|
26
27
|
@agent = Mechanize.new
|
@@ -32,25 +33,24 @@ module RelatonItu
|
|
32
33
|
when /^(ITU-T|ITU-R\sRR)/
|
33
34
|
request_search
|
34
35
|
when /^ITU-R\s/
|
35
|
-
request_document
|
36
|
+
request_document
|
36
37
|
end
|
37
38
|
end
|
38
39
|
|
39
40
|
private
|
40
41
|
|
41
42
|
def request_search
|
43
|
+
Util.warn "(#{@refid}) Fetching from www.itu.int ..."
|
42
44
|
url = "#{DOMAIN}/net4/ITU-T/search/GlobalSearch/RunSearch"
|
43
45
|
data = { json: params.to_json }
|
44
46
|
resp = agent.post url, data
|
45
47
|
@array = hits JSON.parse(resp.body)
|
46
48
|
end
|
47
49
|
|
48
|
-
#
|
49
|
-
|
50
|
-
#
|
51
|
-
def request_document(refid) # rubocop:todo Metrics/MethodLength, Metrics/AbcSize
|
50
|
+
def request_document # rubocop:todo Metrics/MethodLength, Metrics/AbcSize
|
51
|
+
Util.warn "(#{@refid}) Fetching from Relaton repository ..."
|
52
52
|
index = Relaton::Index.find_or_create :itu, url: "#{GH_ITU_R}index-v1.zip", file: INDEX_FILE
|
53
|
-
row = index.search(refid.to_ref).min_by { |i| i[:id] }
|
53
|
+
row = index.search(@refid.to_ref).min_by { |i| i[:id] }
|
54
54
|
return unless row
|
55
55
|
|
56
56
|
uri = URI("#{GH_ITU_R}#{row[:file]}")
|
@@ -77,8 +77,10 @@ module RelatonItu
|
|
77
77
|
|
78
78
|
# @return [Hash]
|
79
79
|
def params # rubocop:disable Metrics/MethodLength
|
80
|
+
input = @refid.dup
|
81
|
+
input.year = nil
|
80
82
|
{
|
81
|
-
"Input" =>
|
83
|
+
"Input" => input.to_s,
|
82
84
|
"Start" => 0,
|
83
85
|
"Rows" => 10,
|
84
86
|
"SortBy" => "RELEVANCE",
|
@@ -10,7 +10,7 @@ module RelatonItu
|
|
10
10
|
# @params structuredidentifier [RelatonItu::StructuredIdentifier]
|
11
11
|
def initialize(**args)
|
12
12
|
if args[:doctype] && !TYPES.include?(args[:doctype])
|
13
|
-
Util.warn "WARNING:
|
13
|
+
Util.warn "WARNING: Invalid doctype: `#{args[:doctype]}`"
|
14
14
|
end
|
15
15
|
super
|
16
16
|
end
|
@@ -22,9 +22,9 @@ module RelatonItu
|
|
22
22
|
def search(refid)
|
23
23
|
refid = RelatonItu::Pubid.parse refid if refid.is_a? String
|
24
24
|
if refid.to_ref =~ /(ITU[\s-]T\s\w)\.(Suppl\.|Annex)\s?(\w?\d+)/
|
25
|
-
correct_ref = "
|
26
|
-
Util.warn "WARNING: Incorrect reference `#{refid}`"
|
27
|
-
Util.warn "the reference should be
|
25
|
+
correct_ref = "#{$~[1]} #{$~[2]} #{$~[3]}"
|
26
|
+
Util.warn "WARNING: Incorrect reference: `#{refid}`"
|
27
|
+
Util.warn "the reference should be: `#{correct_ref}`"
|
28
28
|
end
|
29
29
|
HitCollection.new refid
|
30
30
|
rescue SocketError, Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, EOFError, Net::HTTPBadResponse,
|
@@ -63,19 +63,21 @@ module RelatonItu
|
|
63
63
|
private
|
64
64
|
|
65
65
|
def fetch_ref_err(refid, missed_years) # rubocop:disable Metrics/MethodLength
|
66
|
-
Util.warn "WARNING: no match found online for `#{refid}`. " \
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
66
|
+
# Util.warn "WARNING: no match found online for `#{refid}`. " \
|
67
|
+
# "The code must be exactly like it is on the standards website."
|
68
|
+
Util.warn "(#{refid}) Not found."
|
69
|
+
if missed_years.any?
|
70
|
+
plural = missed_years.size > 1 ? "s" : ""
|
71
|
+
Util.warn "(#{refid}) There was no match for `#{refid.year}` year, though " \
|
72
|
+
"there were matches found for `#{missed_years.join('`, `')}` year#{plural}."
|
71
73
|
end
|
72
74
|
# if /\d-\d/.match? refid.code
|
73
75
|
# warn "[relaton-itu] The provided document part may not exist, or " \
|
74
76
|
# "the document may no longer be published in parts."
|
75
77
|
# else
|
76
|
-
Util.warn "If you wanted to cite all document parts for the reference, " \
|
77
|
-
|
78
|
-
|
78
|
+
# Util.warn "If you wanted to cite all document parts for the reference, " \
|
79
|
+
# "use `#{refid} (all parts)`.\nIf the document is not a standard, " \
|
80
|
+
# "use its document type abbreviation `S`, `TR`, `PAS`, `Guide`)."
|
79
81
|
# end
|
80
82
|
nil
|
81
83
|
end
|
@@ -90,7 +92,6 @@ module RelatonItu
|
|
90
92
|
# (?:\s\((?:(?<cormonth1>\d{2})/)?(?<coryear1>\d{4})\))?
|
91
93
|
# }x =~ code
|
92
94
|
# year ||= year1
|
93
|
-
Util.warn "(#{refid}) fetching..."
|
94
95
|
result = search(refid)
|
95
96
|
# refid.code.sub!(/(?<=\.)Imp(?=\d)/, "") if result.gi_imp
|
96
97
|
# if corr1
|
@@ -101,7 +102,7 @@ module RelatonItu
|
|
101
102
|
next true unless i.hit[:code]
|
102
103
|
|
103
104
|
pubid = Pubid.parse i.hit[:code]
|
104
|
-
refid
|
105
|
+
refid.===(pubid, [:year])
|
105
106
|
# %r{
|
106
107
|
# ^(?<pref2>ITU)?(?:-(?<type2>\w))?\s?(?<code2>\S+)
|
107
108
|
# (?:\s\(?(?<ver2>v\d+)\)?)?
|
@@ -143,7 +144,7 @@ module RelatonItu
|
|
143
144
|
result = search_filter(refid) || return
|
144
145
|
ret = isobib_results_filter(result, refid)
|
145
146
|
if ret[:ret]
|
146
|
-
Util.warn "(#{refid})
|
147
|
+
Util.warn "(#{refid}) Found: `#{ret[:ret].docidentifier.first&.id}`"
|
147
148
|
ret[:ret]
|
148
149
|
else
|
149
150
|
fetch_ref_err(refid, ret[:years])
|
data/lib/relaton_itu/pubid.rb
CHANGED
@@ -65,8 +65,8 @@ module RelatonItu
|
|
65
65
|
id_parts = Parser.new.parse(id).to_h.transform_values(&:to_s)
|
66
66
|
new(**id_parts)
|
67
67
|
rescue Parslet::ParseFailed => e
|
68
|
-
warn "
|
69
|
-
|
68
|
+
Util.warn "WARNING: `#{id}` is invalid ITU publication identifier \n" \
|
69
|
+
"#{e.parse_failure_cause.ascii_tree}"
|
70
70
|
raise e
|
71
71
|
end
|
72
72
|
|
@@ -96,11 +96,12 @@ module RelatonItu
|
|
96
96
|
s
|
97
97
|
end
|
98
98
|
|
99
|
-
def ===(other)
|
99
|
+
def ===(other, ignore_args = [])
|
100
100
|
hash = to_h with_type: false
|
101
101
|
other_hash = other.to_h with_type: false
|
102
102
|
hash.delete(:month)
|
103
103
|
other_hash.delete(:month)
|
104
|
+
hash.delete(:year) if ignore_args.include?(:year)
|
104
105
|
other_hash.delete(:year) unless hash[:year]
|
105
106
|
hash == other_hash
|
106
107
|
end
|
data/lib/relaton_itu/scrapper.rb
CHANGED
@@ -75,7 +75,7 @@ module RelatonItu
|
|
75
75
|
url = abstract_url[:onclick].match(/https?[^']+/).to_s
|
76
76
|
rsp = hit.hit_collection.agent.get url
|
77
77
|
d = Nokogiri::HTML rsp.body.encode(undef: :replace, replace: "")
|
78
|
-
d.css("p.MsoNormal").text.gsub(
|
78
|
+
d.css("p.MsoNormal").text.gsub("\r\n", "").squeeze(" ").gsub("\u00a0", "")
|
79
79
|
elsif a = doc.at('//table/tr/td/span[contains(@class, "observation")]/text()')
|
80
80
|
a.text.strip
|
81
81
|
end
|
@@ -87,7 +87,7 @@ module RelatonItu
|
|
87
87
|
script: "Latn",
|
88
88
|
}]
|
89
89
|
rescue Mechanize::ResponseCodeError => e
|
90
|
-
warn "HTTP Service Unavailable: #{e.message}"
|
90
|
+
Util.warn "HTTP Service Unavailable: #{e.message}"
|
91
91
|
[]
|
92
92
|
end
|
93
93
|
|
@@ -11,7 +11,7 @@ module RelatonItu
|
|
11
11
|
# @param annexid [String, NilClass]
|
12
12
|
def initialize(bureau:, docnumber:, annexid: nil)
|
13
13
|
unless EditorialGroup::BUREAUS.include? bureau
|
14
|
-
warn "
|
14
|
+
Util.warn "WARNING: Invalid bureau: `#{bureau}`"
|
15
15
|
end
|
16
16
|
@bureau = bureau
|
17
17
|
@docnumber = docnumber
|
data/lib/relaton_itu/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: relaton-itu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.16.
|
4
|
+
version: 1.16.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-10-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mechanize
|