relaton-bib 0.3.4 → 0.3.9

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.
@@ -0,0 +1,32 @@
1
+ module RelatonBib
2
+ class Hit
3
+ # @return [Array<Hash>]
4
+ attr_reader :hit
5
+
6
+ # @param hit [Hash]
7
+ # @param hit_collection [RelatonIso::HitCollection, RelatonNist:HitCollection]
8
+ def initialize(hit, hit_collection = nil)
9
+ @hit = hit
10
+ @hit_collection = hit_collection
11
+ end
12
+
13
+ # @return [String]
14
+ def to_s
15
+ inspect
16
+ end
17
+
18
+ # @return [String]
19
+ def inspect
20
+ "<#{self.class}:#{format('%#.14x', object_id << 1)} "\
21
+ "@text=\"#{@hit_collection&.text}\" "\
22
+ "@fetched=\"#{!@fetch.nil?}\" "\
23
+ "@fullIdentifier=\"#{@fetch&.shortref(nil)}\" "\
24
+ "@title=\"#{@hit[:code]}\">"
25
+ end
26
+
27
+ # @return [String]
28
+ def to_xml(**opts)
29
+ fetch.to_xml **opts
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,34 @@
1
+ module RelatonBib
2
+ class HitCollection < Array
3
+ # @return [TrueClass, FalseClass]
4
+ attr_reader :fetched
5
+
6
+ # @return [String]
7
+ attr_reader :text
8
+
9
+ # @return [String]
10
+ attr_reader :year
11
+
12
+ # @return [RelatonIso::HitCollection]
13
+ def fetch
14
+ workers = WorkersPool.new 4
15
+ workers.worker(&:fetch)
16
+ each do |hit|
17
+ workers << hit
18
+ end
19
+ workers.end
20
+ workers.result
21
+ @fetched = true
22
+ self
23
+ end
24
+
25
+ def to_s
26
+ inspect
27
+ end
28
+
29
+ # @return [String]
30
+ def inspect
31
+ "<#{self.class}:#{format('%#.14x', object_id << 1)} @fetched=#{@fetched}>"
32
+ end
33
+ end
34
+ end
@@ -3,6 +3,8 @@
3
3
  module RelatonBib
4
4
  # Localized string.
5
5
  class LocalizedString
6
+ include RelatonBib
7
+
6
8
  # @return [Array<String>] language Iso639 code
7
9
  attr_reader :language
8
10
 
@@ -42,9 +44,11 @@ module RelatonBib
42
44
 
43
45
  # @return [Hash]
44
46
  def to_hash
45
- hash = { content: content }
46
- hash[:language] = language if language&.any?
47
- hash[:script] = script if script&.any?
47
+ return content unless language || script
48
+
49
+ hash = { "content" => content }
50
+ hash["language"] = single_element_array(language) if language&.any?
51
+ hash["script"] = single_element_array(script) if script&.any?
48
52
  hash
49
53
  end
50
54
  end
@@ -24,9 +24,9 @@ module RelatonBib
24
24
  # @return [Hash]
25
25
  def to_hash
26
26
  hash = {}
27
- hash[:form] = form if form
28
- hash[:size] = size if size
29
- hash[:scale] = scale if scale
27
+ hash["form"] = form if form
28
+ hash["size"] = size if size
29
+ hash["scale"] = scale if scale
30
30
  hash
31
31
  end
32
32
  end
@@ -37,7 +37,7 @@ module RelatonBib
37
37
 
38
38
  # @return [Hash]
39
39
  def to_hash
40
- { type: type, id: value }
40
+ { "type" => type, "id" => value }
41
41
  end
42
42
  end
43
43
 
@@ -55,15 +55,9 @@ module RelatonBib
55
55
  # @return [Array<RelatonBib::OrgIdentifier>]
56
56
  attr_reader :identifier
57
57
 
58
- def hash2locstr(name)
59
- name.is_a?(Hash) ?
60
- LocalizedString.new(name[:content], name[:language], name[:script]) :
61
- LocalizedString.new(name)
62
- end
63
-
64
58
  # @param name [String, Hash, Array<String, Hash>]
65
- # @param abbreviation [RelatoBib::LocalizedStrig, String]
66
- # @param subdivision [RelatoBib::LocalizedStrig, String]
59
+ # @param abbreviation [RelatoBib::LocalizedString, String]
60
+ # @param subdivision [RelatoBib::LocalizedString, String]
67
61
  # @param url [String]
68
62
  # @param identifier [Array<RelatonBib::OrgIdentifier>]
69
63
  # @param contact [Array<RelatonBib::Address, RelatonBib::Contact>]
@@ -73,24 +67,14 @@ module RelatonBib
73
67
  super(url: args[:url], contact: args.fetch(:contact, []))
74
68
 
75
69
  @name = if args[:name].is_a?(Array)
76
- args[:name].map { |n| hash2locstr(n) }
70
+ args[:name].map { |n| localized_string(n) }
77
71
  else
78
- [hash2locstr(args[:name])]
72
+ [localized_string(args[:name])]
79
73
  end
80
74
 
81
- @abbreviation = if args[:abbreviation].is_a?(String)
82
- LocalizedString.new(args[:abbreviation])
83
- else
84
- args[:abbreviation]
85
- end
86
-
87
- @subdivision = if args[:subdivision].is_a?(String)
88
- LocalizedString.new(args[:subdivision])
89
- else
90
- args[:subdivision]
91
- end
92
-
93
- @identifier = args.fetch(:identifier, [])
75
+ @abbreviation = localized_string args[:abbreviation]
76
+ @subdivision = localized_string args[:subdivision]
77
+ @identifier = args.fetch(:identifier, [])
94
78
  end
95
79
 
96
80
  # @param builder [Nokogiri::XML::Builder]
@@ -109,11 +93,23 @@ module RelatonBib
109
93
 
110
94
  # @return [Hash]
111
95
  def to_hash
112
- hash = { name: name.map(&:to_hash) }
113
- hash[:abbreviation] = abbreviation.to_hash if abbreviation
114
- hash[:identifier] = identifier.map(&:to_hash) if identifier&.any?
115
- hash[:subdivision] = subdivision.to_hash if subdivision
116
- { organization: hash.merge(super) }
96
+ hash = { "name" => single_element_array(name) }
97
+ hash["abbreviation"] = abbreviation.to_hash if abbreviation
98
+ hash["identifier"] = single_element_array(identifier) if identifier&.any?
99
+ hash["subdivision"] = subdivision.to_hash if subdivision
100
+ { "organization" => hash.merge(super) }
101
+ end
102
+
103
+ private
104
+
105
+ # @param arg [String, Hash, RelatoBib::LocalizedString]
106
+ # @return [RelatoBib::LocalizedString]
107
+ def localized_string(arg)
108
+ if arg.is_a?(String) then LocalizedString.new(arg)
109
+ elsif arg.is_a?(Hash)
110
+ LocalizedString.new(arg[:content], arg[:language], arg[:script])
111
+ elsif arg.is_a? LocalizedString then arg
112
+ end
117
113
  end
118
114
  end
119
115
  end
@@ -5,6 +5,8 @@ require "relaton_bib/contributor"
5
5
  module RelatonBib
6
6
  # Person's full name
7
7
  class FullName
8
+ include RelatonBib
9
+
8
10
  # @return [Array<RelatonBib::LocalizedString>]
9
11
  attr_accessor :forename
10
12
 
@@ -60,22 +62,13 @@ module RelatonBib
60
62
  # @return [Hash]
61
63
  def to_hash
62
64
  hash = {}
63
- hash[:forename] = forename.map(&:to_hash) if forename&.any?
64
- hash[:initial] = initial.map(&:to_hash) if initial&.any?
65
- hash[:surname] = surname.to_hash if surname
66
- hash[:addition] = addition.map(&:to_hash) if addition&.any?
67
- hash[:prefix] = prefix.map(&:to_hash) if prefix&.any?
68
- hash[:completename] = completename.to_hash if completename
65
+ hash["forename"] = single_element_array(forename) if forename&.any?
66
+ hash["initial"] = single_element_array(initial) if initial&.any?
67
+ hash["surname"] = surname.to_hash if surname
68
+ hash["addition"] = single_element_array(addition) if addition&.any?
69
+ hash["prefix"] = single_element_array(prefix) if prefix&.any?
70
+ hash["completename"] = completename.to_hash if completename
69
71
  hash
70
- # instance_variables.reduce({}) do |hash, var|
71
- # val = instance_variable_get var
72
- # if val || val.is_a?(Array) && val.any?
73
- # key = var.to_s.sub("@", "").to_sym
74
- # hash.merge key => val
75
- # else
76
- # hash
77
- # end
78
- # end
79
72
  end
80
73
  end
81
74
 
@@ -118,7 +111,7 @@ module RelatonBib
118
111
 
119
112
  # @return [Hash]
120
113
  def to_hash
121
- { type: type, id: value }
114
+ { "type" => type, "id" => value }
122
115
  end
123
116
  end
124
117
 
@@ -156,10 +149,10 @@ module RelatonBib
156
149
 
157
150
  # @return [Hash]
158
151
  def to_hash
159
- hash = { name: name.to_hash }
160
- hash[:affiliation] = affiliation.map(&:to_hash) if affiliation&.any?
161
- hash[:identifier] = identifier.map(&:to_hash) if identifier&.any?
162
- { person: hash.merge(super) }
152
+ hash = { "name" => name.to_hash }
153
+ hash["affiliation"] = single_element_array(affiliation) if affiliation&.any?
154
+ hash["identifier"] = single_element_array(identifier) if identifier&.any?
155
+ { "person" => hash.merge(super) }
163
156
  end
164
157
  end
165
158
  end
@@ -97,16 +97,16 @@ module RelatonBib
97
97
  # @return [Hash]
98
98
  def to_hash
99
99
  hash = {}
100
- hash[:type] = type if type
101
- hash[:formattedref] = formattedref.to_hash if formattedref
102
- hash[:title] = title.to_hash if title
103
- hash[:place] = place if place
104
- hash[:organization] = organization if organization
105
- hash[:abbreviation] = abbreviation.to_hash if abbreviation
106
- hash[:from] = from if from
107
- hash[:to] = to if to
108
- hash[:number] = number if number
109
- hash[:partnumber] = partnumber if partnumber
100
+ hash["type"] = type if type
101
+ hash["formattedref"] = formattedref.to_hash if formattedref
102
+ hash["title"] = title.to_hash if title
103
+ hash["place"] = place if place
104
+ hash["organization"] = organization if organization
105
+ hash["abbreviation"] = abbreviation.to_hash if abbreviation
106
+ hash["from"] = from if from
107
+ hash["to"] = to if to
108
+ hash["number"] = number if number
109
+ hash["partnumber"] = partnumber if partnumber
110
110
  hash
111
111
  end
112
112
  end
@@ -45,9 +45,16 @@ module RelatonBib
45
45
 
46
46
  # @return [Hash]
47
47
  def to_hash
48
- hash = {}
49
- hash[:type] = type if type
50
- hash.merge title.to_hash
48
+ th = title.to_hash
49
+ return th unless type
50
+
51
+ hash = { "type" => type }
52
+ if th.is_a? String
53
+ hash["content"] = th
54
+ else
55
+ hash.merge! th
56
+ end
57
+ hash
51
58
  end
52
59
  end
53
60
  end
@@ -6,7 +6,7 @@ module RelatonBib
6
6
  # @return [Symbol] :src/:obp/:rss
7
7
  attr_reader :type
8
8
  # @retutn [URI]
9
- attr_reader :content
9
+ attr_accessor :content
10
10
 
11
11
  # @param type [String] src/obp/rss
12
12
  # @param content [String]
@@ -22,7 +22,7 @@ module RelatonBib
22
22
 
23
23
  # @return [Hash]
24
24
  def to_hash
25
- { type: type, content: content.to_s }
25
+ { "type" => type, "content" => content.to_s }
26
26
  end
27
27
  end
28
28
  end
@@ -32,9 +32,9 @@ module RelatonBib
32
32
  # @return [Hash]
33
33
  def to_hash
34
34
  hash = {}
35
- hash[:begins] = begins.strftime(FORMAT) if begins
36
- hash[:ends] = ends.strftime(FORMAT) if ends
37
- hash[:revision] = revision.strftime(FORMAT) if revision
35
+ hash["begins"] = begins.strftime(FORMAT) if begins
36
+ hash["ends"] = ends.strftime(FORMAT) if ends
37
+ hash["revision"] = revision.strftime(FORMAT) if revision
38
38
  hash
39
39
  end
40
40
  end
@@ -1,3 +1,3 @@
1
1
  module RelatonBib
2
- VERSION = "0.3.4".freeze
2
+ VERSION = "0.3.9".freeze
3
3
  end
@@ -5,7 +5,8 @@ module RelatonBib
5
5
  class << self
6
6
  def from_xml(xml)
7
7
  doc = Nokogiri::XML(xml)
8
- bibitem = doc.at "/bibitem"
8
+ doc.remove_namespaces!
9
+ bibitem = doc.at "/bibitem|/bibdata"
9
10
  BibliographicItem.new(item_data(bibitem))
10
11
  end
11
12
 
@@ -29,8 +30,8 @@ module RelatonBib
29
30
  edition: bibitem.at("./edition")&.text,
30
31
  version: fetch_version(bibitem),
31
32
  biblionote: fetch_note(bibitem),
32
- language: bibitem.xpath("./language").map(&:text),
33
- script: bibitem.xpath("./script").map(&:text),
33
+ language: fetch_language(bibitem),
34
+ script: fetch_script(bibitem),
34
35
  abstract: fetch_abstract(bibitem),
35
36
  docstatus: fetch_status(bibitem),
36
37
  copyright: fetch_copyright(bibitem),
@@ -50,7 +51,7 @@ module RelatonBib
50
51
  version = item.at "./version"
51
52
  return unless version
52
53
 
53
- revision_date = version.at("revision_date").text
54
+ revision_date = version.at("revision-date")&.text
54
55
  draft = version.xpath("draft").map &:text
55
56
  RelatonBib::BibliographicItem::Version.new revision_date, draft
56
57
  end
@@ -67,6 +68,14 @@ module RelatonBib
67
68
  end
68
69
  end
69
70
 
71
+ def fetch_language(item)
72
+ item.xpath("./language").reduce([]) { |a, l| l.text.empty? ? a : a << l.text }
73
+ end
74
+
75
+ def fetch_script(item)
76
+ item.xpath("./script").reduce([]) { |a, s| s.text.empty? ? a : a << s.text }
77
+ end
78
+
70
79
  # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
71
80
 
72
81
  def fetch_series(item)
@@ -145,8 +154,9 @@ module RelatonBib
145
154
  status = item.at("./status")
146
155
  return unless status
147
156
 
157
+ stage = status.at "stage"
148
158
  DocumentStatus.new(
149
- stage: status.at("stage").text,
159
+ stage: stage ? stage.text : status.text,
150
160
  substage: status.at("substage")&.text,
151
161
  iteration: status.at("iteration")&.text,
152
162
  )
@@ -154,8 +164,9 @@ module RelatonBib
154
164
 
155
165
  def fetch_dates(item)
156
166
  item.xpath("./date").map do |d|
167
+ type = d[:type].to_s.empty? ? "published" : d[:type]
157
168
  RelatonBib::BibliographicDate.new(
158
- type: d[:type], on: d.at("on")&.text, from: d.at("from")&.text,
169
+ type: type, on: d.at("on")&.text, from: d.at("from")&.text,
159
170
  to: d.at("to")&.text
160
171
  )
161
172
  end
data/relaton-bib.gemspec CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
 
11
11
  spec.summary = "RelatonBib: Ruby XMLDOC impementation."
12
12
  spec.description = "RelatonBib: Ruby XMLDOC impementation."
13
- spec.homepage = "https://github.com/metanorma/relaton-item"
13
+ spec.homepage = "https://github.com/relaton/relaton-item"
14
14
  spec.license = "BSD-2-Clause"
15
15
 
16
16
  # Specify which files should be added to the gem when it is released.
@@ -33,5 +33,5 @@ Gem::Specification.new do |spec|
33
33
  spec.add_development_dependency "byebug"
34
34
 
35
35
  spec.add_dependency "addressable"
36
- spec.add_dependency "nokogiri", "~> 1.10"
36
+ spec.add_dependency "nokogiri"
37
37
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: relaton-bib
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.3.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-08-13 00:00:00.000000000 Z
11
+ date: 2019-10-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -140,16 +140,16 @@ dependencies:
140
140
  name: nokogiri
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - "~>"
143
+ - - ">="
144
144
  - !ruby/object:Gem::Version
145
- version: '1.10'
145
+ version: '0'
146
146
  type: :runtime
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - "~>"
150
+ - - ">="
151
151
  - !ruby/object:Gem::Version
152
- version: '1.10'
152
+ version: '0'
153
153
  description: 'RelatonBib: Ruby XMLDOC impementation.'
154
154
  email:
155
155
  - open.source@ribose.com
@@ -157,16 +157,17 @@ executables: []
157
157
  extensions: []
158
158
  extra_rdoc_files: []
159
159
  files:
160
+ - ".github/workflows/macos.yml"
161
+ - ".github/workflows/ubuntu.yml"
162
+ - ".github/workflows/windows.yml"
160
163
  - ".gitignore"
161
164
  - ".rspec"
162
165
  - ".rubocop.yml"
163
- - ".travis.yml"
164
166
  - Gemfile
165
167
  - Gemfile.lock
166
168
  - LICENSE.txt
167
169
  - README.adoc
168
170
  - Rakefile
169
- - appveyor.yml
170
171
  - bin/console
171
172
  - bin/setup
172
173
  - docs/hash.adoc
@@ -188,6 +189,8 @@ files:
188
189
  - lib/relaton_bib/formatted_string.rb
189
190
  - lib/relaton_bib/hash_converter.rb
190
191
  - lib/relaton_bib/hash_to_bib.rb
192
+ - lib/relaton_bib/hit.rb
193
+ - lib/relaton_bib/hit_collection.rb
191
194
  - lib/relaton_bib/localized_string.rb
192
195
  - lib/relaton_bib/medium.rb
193
196
  - lib/relaton_bib/organization.rb
@@ -200,7 +203,7 @@ files:
200
203
  - lib/relaton_bib/workers_pool.rb
201
204
  - lib/relaton_bib/xml_parser.rb
202
205
  - relaton-bib.gemspec
203
- homepage: https://github.com/metanorma/relaton-item
206
+ homepage: https://github.com/relaton/relaton-item
204
207
  licenses:
205
208
  - BSD-2-Clause
206
209
  metadata: {}