relaton-bib 1.0.2 → 1.0.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cf7f7fdcccb7d2f3eb0b90d3587b7cfd50dee1b053b0d9e8132fb6eb951a9791
4
- data.tar.gz: 1624c2c3d7ccdd0d63055f4235e22fed6a7dd053a2d122d1010adb967d005a8b
3
+ metadata.gz: bedb89ee8f076ed4e8425c31c97f6649944de4e3402e4cfb6747688ad63a9889
4
+ data.tar.gz: aa1391e5af6e07da77b848dfa0fc71be21b95ecd77972952ed922bcdf7ce59db
5
5
  SHA512:
6
- metadata.gz: d75fa292183abc36290aeaf09893b4f899fe597c91652a90643af78c53d3ef6ad6ef00fa034f5e79dbe73914c5c099a26116ea93534edbd1dc092cb7f6dddbb0
7
- data.tar.gz: 9aec03e6ac2b3a338a326551c6a2fbc44aa2e74fe5b0d48d1b992fff828aa5de3fd2997972be2cbc5618053b2dd70df9c6fa3cf3b019af40e8f5da5f55002df0
6
+ metadata.gz: 27d51cee453b3449681b498fffb6067f2366e9ceeb1525bf13c80ff13c12f39dbfb2158da0cbee60111d4623d7054fb5a8e22ad89edc18ee582f04fe5c3ae35a
7
+ data.tar.gz: 56ee00e29060d7f7eaccdbb8ac16b3c0d9186916583b28f5e01eaaadf6a42bc54b5ac3e8695e1f4d17eac5e202b6be53b6e0ed7ea6bfea0b277e01a73fc8c1e4
@@ -4,11 +4,16 @@ module RelatonBib
4
4
  include RelatonBib
5
5
 
6
6
  TYPES = %w[
7
- obsoletes obsoletedBy supersedes supersededBy updates updatedBy
8
- complements derivedFrom translatedFrom hasTranslation adoptedFrom
9
- equivalent identical nonequivalent includedIn includes instance
10
- instanceOf partOf hasPart hasDraft draftOf merges splits amends amendedBy
11
- corrects correctedBy revises revisedBy describes describedBy
7
+ includes includedIn hasPart partOf merges mergedInto splits splitInto
8
+ instance hasInstance exemplarOf hasExemplar manifestationOf
9
+ hasManifestation reproductionOf hasReproduction reprintOf hasReprint
10
+ expressionOf hasExpression translatedFrom hasTranslation arrangementOf
11
+ hasArrangement abridgementOf hasAbridgement annotationOf hasAnnotation
12
+ draftOf hasDraft editionOf hasEdition updates updatedBy derivedFrom
13
+ derives describes describedBy catalogues cataloguedBy hasSuccessor
14
+ successorOf adaptedFrom hasAdaptation adoptedFrom adoptedAs reviewOf
15
+ hasReview commentaryOf hasCommentary related complements complementOf
16
+ obsoletes obsoletedBy cited isCitedIn
12
17
  ].freeze
13
18
 
14
19
  # @return [String]
@@ -14,12 +14,12 @@ module RelatonBib
14
14
  # @return [String, NilClass]
15
15
  attr_reader :iteration
16
16
 
17
- # @param stage [String]
18
- # @param substage [String, NilClass]
17
+ # @param stage [String, Hash, RelatonBib::DocumentStatus::Stage]
18
+ # @param substage [String, Hash, NilClass, RelatonBib::DocumentStatus::Stage]
19
19
  # @param iteration [String, NilClass]
20
20
  def initialize(stage:, substage: nil, iteration: nil)
21
- @stage = stage
22
- @substage = substage
21
+ @stage = stage_new stage
22
+ @substage = stage_new substage
23
23
  @iteration = iteration
24
24
  end
25
25
 
@@ -27,18 +27,56 @@ module RelatonBib
27
27
  def to_xml(builder)
28
28
  builder.status do
29
29
  # FormattedString.instance_method(:to_xml).bind(status).call builder
30
- builder.stage stage
31
- builder.substage substage if substage
30
+ builder.stage { |b| stage.to_xml b }
31
+ builder.substage { |b| substage.to_xml b } if substage
32
32
  builder.iteration iteration unless iteration.to_s.empty?
33
33
  end
34
34
  end
35
35
 
36
36
  # @return [Hash]
37
37
  def to_hash
38
- hash = { "stage" => stage }
39
- hash["substage"] = substage if substage
38
+ hash = { "stage" => stage.to_hash }
39
+ hash["substage"] = substage.to_hash if substage
40
40
  hash["iteration"] = iteration if iteration
41
41
  hash
42
42
  end
43
+
44
+ private
45
+
46
+ # @param stg [RelatonBib::DocumentStatus::Stage, Hash, String, NilClass]
47
+ def stage_new(stg)
48
+ if stg.is_a?(Stage) then stg
49
+ elsif stg.is_a?(Hash) then Stage.new(stg)
50
+ elsif stg.is_a?(String) then Stage.new(value: stg)
51
+ end
52
+ end
53
+
54
+ class Stage
55
+ # @return [String]
56
+ attr_reader :value
57
+
58
+ # @return [String, NilClass]
59
+ attr_reader :abbreviation
60
+
61
+ # @parma value [String]
62
+ # @param abbreviation [String, NilClass]
63
+ def initialize(value:, abbreviation: nil)
64
+ @value = value
65
+ @abbreviation = abbreviation
66
+ end
67
+
68
+ # @param [Nokogiri::XML::Builder]
69
+ def to_xml(builder)
70
+ builder.parent[:abbreviation] = abbreviation if abbreviation
71
+ builder.text value
72
+ end
73
+
74
+ # @return [Hash]
75
+ def to_hash
76
+ hash = { "value" => value }
77
+ hash["abbreviation"] = abbreviation if abbreviation
78
+ hash
79
+ end
80
+ end
43
81
  end
44
82
  end
@@ -1,6 +1,11 @@
1
1
  module RelatonBib
2
2
  class HashConverter
3
3
  class << self
4
+ # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
5
+
6
+ # @param args [Hash]
7
+ # @param neated [TrueClas, FalseClass] default true
8
+ # @return [Hash]
4
9
  def hash_to_bib(args, nested = false)
5
10
  return nil unless args.is_a?(Hash)
6
11
 
@@ -30,6 +35,7 @@ module RelatonBib
30
35
  ret[:license] = array(ret[:license])
31
36
  ret
32
37
  end
38
+ # rubocop:enable Metrics/MethodLength, Metrics/AbcSize
33
39
 
34
40
  def timestamp_hash(ret)
35
41
  ret[:fetched] ||= Date.today.to_s
@@ -151,12 +157,20 @@ module RelatonBib
151
157
 
152
158
  def docstatus_hash_to_bib(ret)
153
159
  ret[:docstatus] && ret[:docstatus] = DocumentStatus.new(
154
- stage: ret[:docstatus][:stage],
155
- substage: ret[:docstatus][:substage],
160
+ stage: stage(ret[:docstatus][:stage]),
161
+ substage: stage(ret[:docstatus][:substage]),
156
162
  iteration: ret[:docstatus][:iteration],
157
163
  )
158
164
  end
159
165
 
166
+ # @param stg [Hash]
167
+ # @return [RelatonBib::DocumentStatus::Stage]
168
+ def stage(stg)
169
+ return unless stg
170
+
171
+ DocumentStatus::Stage.new(**stg)
172
+ end
173
+
160
174
  def contributors_hash_to_bib(ret)
161
175
  return unless ret[:contributor]
162
176
 
@@ -1,3 +1,3 @@
1
1
  module RelatonBib
2
- VERSION = "1.0.2".freeze
2
+ VERSION = "1.0.3".freeze
3
3
  end
@@ -169,14 +169,22 @@ module RelatonBib
169
169
  status = item.at("./status")
170
170
  return unless status
171
171
 
172
- stage = status.at "stage"
172
+ stg = status.at "stage"
173
173
  DocumentStatus.new(
174
- stage: stage ? stage.text : status.text,
175
- substage: status.at("substage")&.text,
174
+ stage: stg ? stage(stg) : status.text,
175
+ substage: stage(status.at("substage")),
176
176
  iteration: status.at("iteration")&.text,
177
177
  )
178
178
  end
179
179
 
180
+ # @param node [Nokogiri::XML::Elemen]
181
+ # @return [RelatonBib::DocumentStatus::Stage]
182
+ def stage(elm)
183
+ return unless elm
184
+
185
+ DocumentStatus::Stage.new value: elm.text, abbreviation: elm[:abbreviation]
186
+ end
187
+
180
188
  def fetch_dates(item)
181
189
  item.xpath("./date").reduce([]) do |a, d|
182
190
  type = d[:type].to_s.empty? ? "published" : d[:type]
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: 1.0.2
4
+ version: 1.0.3
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-05-10 00:00:00.000000000 Z
11
+ date: 2020-05-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: debase