relaton-un 0.2.0 → 1.2.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/grammars/biblio.rng +145 -50
- data/grammars/isodoc.rng +481 -5
- data/grammars/un.rng +115 -1
- data/lib/relaton_un.rb +2 -0
- data/lib/relaton_un/editorialgroup.rb +25 -0
- data/lib/relaton_un/hash_converter.rb +28 -0
- data/lib/relaton_un/hit.rb +109 -15
- data/lib/relaton_un/hit_collection.rb +124 -47
- data/lib/relaton_un/processor.rb +1 -1
- data/lib/relaton_un/session.rb +65 -0
- data/lib/relaton_un/un_bibliographic_item.rb +40 -0
- data/lib/relaton_un/un_bibliography.rb +8 -5
- data/lib/relaton_un/version.rb +1 -1
- data/lib/relaton_un/xml_parser.rb +46 -9
- data/relaton_un.gemspec +13 -11
- metadata +7 -4
data/lib/relaton_un/processor.rb
CHANGED
@@ -29,7 +29,7 @@ module RelatonUn
|
|
29
29
|
# @return [RelatonIsoBib::IsoBibliographicItem]
|
30
30
|
def hash_to_bib(hash)
|
31
31
|
item_hash = ::RelatonUn::HashConverter.hash_to_bib(hash)
|
32
|
-
::
|
32
|
+
::RelatonUn::UnBibliographicItem.new item_hash
|
33
33
|
end
|
34
34
|
|
35
35
|
# Returns hash of XML grammar
|
@@ -0,0 +1,65 @@
|
|
1
|
+
module RelatonUn
|
2
|
+
class Session
|
3
|
+
include RelatonBib
|
4
|
+
|
5
|
+
# @return [String, NilClass]
|
6
|
+
attr_reader :session_number, :collaboration, :agenda_id, :item_footnote
|
7
|
+
|
8
|
+
# @return [Date, NilClass]
|
9
|
+
attr_reader :session_date
|
10
|
+
|
11
|
+
# @return [Array<String>]
|
12
|
+
attr_reader :item_number, :item_name, :subitem_name
|
13
|
+
|
14
|
+
# @param session_number [String]
|
15
|
+
# @param session_date [String]
|
16
|
+
# @param item_number [Array<String>]
|
17
|
+
# @pqrqm item_name [Array<String>]
|
18
|
+
# @pqrqm subitem_name [Array<String>]
|
19
|
+
# @param collaboration [String]
|
20
|
+
# @param agenda_id [String]
|
21
|
+
# @param item_footnote [String]
|
22
|
+
def initialize(**args)
|
23
|
+
@session_number = args[:session_number]
|
24
|
+
@session_date = Date.parse args[:session_date] if args[:session_date]
|
25
|
+
@item_number = args.fetch(:item_number, [])
|
26
|
+
@item_name = args.fetch(:item_name, [])
|
27
|
+
@subitem_name = args.fetch(:subitem_name, [])
|
28
|
+
@collaboration = args[:collaboration]
|
29
|
+
@agenda_id = args[:agenda_id]
|
30
|
+
@item_footnote = args[:item_footnote]
|
31
|
+
end
|
32
|
+
|
33
|
+
# rubocop:disable Metrics/AbcSize
|
34
|
+
|
35
|
+
# @param [Nokogiri::XML::Builder]
|
36
|
+
def to_xml(builder)
|
37
|
+
builder.session do |b|
|
38
|
+
b.number session_number if session_number
|
39
|
+
b.send "session-date", session_date.to_s if session_date
|
40
|
+
item_number.each { |n| b.send "item-number", n }
|
41
|
+
item_name.each { |n| b.send "item-name", n }
|
42
|
+
subitem_name.each { |n| b.send "subitem-name", n }
|
43
|
+
b.collaboration collaboration if collaboration
|
44
|
+
b.send "agenda-id", agenda_id if agenda_id
|
45
|
+
b.send "item-footnote", item_footnote if item_footnote
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
50
|
+
# @return [Hash]
|
51
|
+
def to_hash
|
52
|
+
hash = {}
|
53
|
+
hash["session_number"] = session_number if session_number
|
54
|
+
hash["session_date"] = session_date.to_s if session_date
|
55
|
+
hash["item_number"] = single_element_array(item_number) if item_number.any?
|
56
|
+
hash["item_name"] = single_element_array(item_name) if item_name.any?
|
57
|
+
hash["subitem_name"] = single_element_array(subitem_name) if subitem_name.any?
|
58
|
+
hash["collaboration"] = collaboration if collaboration
|
59
|
+
hash["agenda_id"] = agenda_id if agenda_id
|
60
|
+
hash["item_footnote"] = item_footnote if item_footnote
|
61
|
+
hash
|
62
|
+
end
|
63
|
+
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
64
|
+
end
|
65
|
+
end
|
@@ -4,5 +4,45 @@ module RelatonUn
|
|
4
4
|
recommendation plenary addendum communication corrigendum reissue agenda
|
5
5
|
budgetary sec-gen-notes expert-report resolution
|
6
6
|
].freeze
|
7
|
+
|
8
|
+
DISTRIBUTIONS = { "GEN" => "general", "LTD" => "limited",
|
9
|
+
"DER" => "restricted", "PRO" => "provisional" }.freeze
|
10
|
+
|
11
|
+
# @return [RelatonUn::Session, NilClass]
|
12
|
+
attr_reader :session
|
13
|
+
|
14
|
+
# @return [String, NilClass]
|
15
|
+
attr_reader :distribution
|
16
|
+
|
17
|
+
# @param session [RelatonUn::Session, NilClass]
|
18
|
+
# @param distribution [String]
|
19
|
+
def initialize(**args)
|
20
|
+
if args[:distribution] && !DISTRIBUTIONS.has_value?(args[:distribution])
|
21
|
+
warn "[relaton-un] WARNING: invalid distribution: #{args[:distribution]}"
|
22
|
+
end
|
23
|
+
@distribution = args.delete :distribution
|
24
|
+
@session = args.delete :session
|
25
|
+
super **args
|
26
|
+
# @doctype = args[:doctype]
|
27
|
+
end
|
28
|
+
|
29
|
+
# @param builder [Nokogiri::XML::Builder]
|
30
|
+
# @param bibdata [TrueClasss, FalseClass, NilClass]
|
31
|
+
def to_xml(builder = nil, **opts)
|
32
|
+
super(builder, **opts) do |b|
|
33
|
+
b.ext do
|
34
|
+
editorialgroup&.to_xml b
|
35
|
+
b.distribution distribution if distribution
|
36
|
+
session&.to_xml b if session
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# @return [Hash]
|
42
|
+
def to_hash
|
43
|
+
hash = super
|
44
|
+
hash["session"] = session.to_hash if session
|
45
|
+
hash
|
46
|
+
end
|
7
47
|
end
|
8
48
|
end
|
@@ -9,9 +9,11 @@ module RelatonUn
|
|
9
9
|
def search(text)
|
10
10
|
HitCollection.new text
|
11
11
|
rescue SocketError, Errno::EINVAL, Errno::ECONNRESET, EOFError,
|
12
|
-
Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError,
|
13
|
-
OpenSSL::SSL::SSLError,
|
14
|
-
|
12
|
+
Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError,
|
13
|
+
Net::ProtocolError, Net::ReadTimeout, OpenSSL::SSL::SSLError,
|
14
|
+
Errno::ETIMEDOUT => e
|
15
|
+
raise RelatonBib::RequestError,
|
16
|
+
"Could not access #{HitCollection::DOMAIN}: #{e.message}"
|
15
17
|
end
|
16
18
|
|
17
19
|
# @param ref [String] document reference
|
@@ -23,7 +25,8 @@ module RelatonUn
|
|
23
25
|
/^(UN\s)?(?<code>.*)/ =~ ref
|
24
26
|
result = isobib_search_filter(code)
|
25
27
|
if result
|
26
|
-
warn "[relaton-un] (\"#{ref}\")
|
28
|
+
warn "[relaton-un] (\"#{ref}\") "\
|
29
|
+
"found #{result.fetch.docidentifier[0].id}"
|
27
30
|
result.fetch
|
28
31
|
end
|
29
32
|
end
|
@@ -36,7 +39,7 @@ module RelatonUn
|
|
36
39
|
# @return [RelatonUn::HitCollection]
|
37
40
|
def isobib_search_filter(code)
|
38
41
|
result = search(code)
|
39
|
-
result.select { |i| i.hit[:
|
42
|
+
result.select { |i| i.hit[:symbol].include? code }.first
|
40
43
|
end
|
41
44
|
end
|
42
45
|
end
|
data/lib/relaton_un/version.rb
CHANGED
@@ -1,15 +1,52 @@
|
|
1
1
|
module RelatonUn
|
2
2
|
class XMLParser < RelatonBib::XMLParser
|
3
3
|
class << self
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
4
|
+
private
|
5
|
+
|
6
|
+
# @param item_hash [Hash]
|
7
|
+
# @return [RelatonBib::BibliographicItem]
|
8
|
+
def bib_item(item_hash)
|
9
|
+
UnBibliographicItem.new item_hash
|
10
|
+
end
|
11
|
+
|
12
|
+
# @param item [Nokogiri::XML::Element]
|
13
|
+
# @return [Hash]
|
14
|
+
def item_data(item)
|
15
|
+
data = super
|
16
|
+
data[:session] = fetch_session item
|
17
|
+
data[:distribution] = item.at("distribution")&.text
|
18
|
+
data
|
19
|
+
end
|
20
|
+
|
21
|
+
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
22
|
+
|
23
|
+
# @param item [Nokogiri::XML::Element]
|
24
|
+
# @return [RelatonUn::Session]
|
25
|
+
def fetch_session(item)
|
26
|
+
session = item.at "./ext/session"
|
27
|
+
return unless session
|
28
|
+
|
29
|
+
RelatonUn::Session.new(
|
30
|
+
session_number: session.at("number")&.text,
|
31
|
+
session_date: session.at("session-date")&.text,
|
32
|
+
item_number: session.xpath("item-number").map(&:text),
|
33
|
+
item_name: session.xpath("item-name").map(&:text),
|
34
|
+
subitem_name: session.xpath("subitem-name").map(&:text),
|
35
|
+
collaboration: session.at("collaboration")&.text,
|
36
|
+
agenda_id: session.at("agenda-id")&.text,
|
37
|
+
item_footnote: session.at("item-footnote")&.text,
|
38
|
+
)
|
39
|
+
end
|
40
|
+
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
41
|
+
|
42
|
+
# @param ext [Nokogiri::XML::Element]
|
43
|
+
# @return [RelatonUn::EditorialGroup]
|
44
|
+
def fetch_editorialgroup(ext)
|
45
|
+
eg = ext.at("./editorialgroup")
|
46
|
+
return unless eg
|
47
|
+
|
48
|
+
committee = eg&.xpath("committee")&.map &:text
|
49
|
+
EditorialGroup.new committee
|
13
50
|
end
|
14
51
|
end
|
15
52
|
end
|
data/relaton_un.gemspec
CHANGED
@@ -1,31 +1,32 @@
|
|
1
1
|
lib = File.expand_path("lib", __dir__)
|
2
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
-
require
|
3
|
+
require "relaton_un/version"
|
4
4
|
|
5
|
+
# rubocop:disable Metrics/BlockLength
|
5
6
|
Gem::Specification.new do |spec|
|
6
7
|
spec.name = "relaton-un"
|
7
8
|
spec.version = RelatonUn::VERSION
|
8
9
|
spec.authors = ["Ribose Inc."]
|
9
10
|
spec.email = ["open.source@ribose.com"]
|
10
11
|
|
11
|
-
spec.summary = "RelatonIso: retrieve CC Standards for bibliographic
|
12
|
-
"using the IsoBibliographicItem model"
|
13
|
-
spec.description = "RelatonIso: retrieve CC Standards for bibliographic
|
14
|
-
"using the IsoBibliographicItem model"
|
12
|
+
spec.summary = "RelatonIso: retrieve CC Standards for bibliographic "\
|
13
|
+
"use using the IsoBibliographicItem model"
|
14
|
+
spec.description = "RelatonIso: retrieve CC Standards for bibliographic "\
|
15
|
+
"use using the IsoBibliographicItem model"
|
15
16
|
spec.homepage = "https://github.com/relaton/relaton-un"
|
16
17
|
spec.license = "BSD-2-Clause"
|
17
18
|
spec.required_ruby_version = Gem::Requirement.new(">= 2.4.0")
|
18
19
|
|
19
|
-
# spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
|
20
|
-
|
21
20
|
spec.metadata["homepage_uri"] = spec.homepage
|
22
|
-
|
21
|
+
spec.metadata["source_code_uri"] = spec.homepage
|
23
22
|
# spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
|
24
23
|
|
25
24
|
# Specify which files should be added to the gem when it is released.
|
26
25
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
27
|
-
spec.files
|
28
|
-
`git ls-files -z`.split("\x0").reject
|
26
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
27
|
+
`git ls-files -z`.split("\x0").reject do |f|
|
28
|
+
f.match(%r{^(test|spec|features)/})
|
29
|
+
end
|
29
30
|
end
|
30
31
|
spec.bindir = "exe"
|
31
32
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
@@ -42,6 +43,7 @@ Gem::Specification.new do |spec|
|
|
42
43
|
|
43
44
|
spec.add_dependency "faraday"
|
44
45
|
spec.add_dependency "http-cookie"
|
45
|
-
spec.add_dependency "relaton-bib", "~>
|
46
|
+
spec.add_dependency "relaton-bib", "~> 1.2.0"
|
46
47
|
spec.add_dependency "unf_ext", ">= 0.0.7.7"
|
47
48
|
end
|
49
|
+
# rubocop:enable Metrics/BlockLength
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: relaton-un
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.2.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-06-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: debase
|
@@ -156,14 +156,14 @@ dependencies:
|
|
156
156
|
requirements:
|
157
157
|
- - "~>"
|
158
158
|
- !ruby/object:Gem::Version
|
159
|
-
version:
|
159
|
+
version: 1.2.0
|
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:
|
166
|
+
version: 1.2.0
|
167
167
|
- !ruby/object:Gem::Dependency
|
168
168
|
name: unf_ext
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
@@ -205,10 +205,12 @@ files:
|
|
205
205
|
- grammars/reqt.rng
|
206
206
|
- grammars/un.rng
|
207
207
|
- lib/relaton_un.rb
|
208
|
+
- lib/relaton_un/editorialgroup.rb
|
208
209
|
- lib/relaton_un/hash_converter.rb
|
209
210
|
- lib/relaton_un/hit.rb
|
210
211
|
- lib/relaton_un/hit_collection.rb
|
211
212
|
- lib/relaton_un/processor.rb
|
213
|
+
- lib/relaton_un/session.rb
|
212
214
|
- lib/relaton_un/un_bibliographic_item.rb
|
213
215
|
- lib/relaton_un/un_bibliography.rb
|
214
216
|
- lib/relaton_un/version.rb
|
@@ -220,6 +222,7 @@ licenses:
|
|
220
222
|
- BSD-2-Clause
|
221
223
|
metadata:
|
222
224
|
homepage_uri: https://github.com/relaton/relaton-un
|
225
|
+
source_code_uri: https://github.com/relaton/relaton-un
|
223
226
|
post_install_message:
|
224
227
|
rdoc_options: []
|
225
228
|
require_paths:
|