pubid-core 1.1.2 → 1.2.1

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: 452665bfc83c23fed5563fb65e94b05e003491474be0572c10628838bf9bb8d4
4
- data.tar.gz: 2c5282618c3bd1e04f26760791371205383191ab752878ac74ed32ac61ff6a2d
3
+ metadata.gz: 7cc372a0160fd8c1a670be2957f3b3e0a98766dd89ed6f8782b1f52085bcbb8f
4
+ data.tar.gz: 9a0d58a218b982531fe206bd7505203428ec6f9d7dcbaa649f80267b09e44030
5
5
  SHA512:
6
- metadata.gz: 57ec902835845daa759d264308e0456851e202a791d0f2dac62c6fb5253202741420f47c9c45f2a2a7398a691e3c17a61c6189ab01f177cbf2b46eb47be15d08
7
- data.tar.gz: ae150bad555421587020450b38fba534f1b94429ad7506ff6b32c0a0a4717be367ead10d5b5266259dbd4f9dfdc7a407e87acba122d7bd4f5562e643685c8a88
6
+ metadata.gz: 04e0297f6ce7bea0cabc3e41c7718e1eee523f93e039fa42f4b08c7a34d4fcb7b3c979fbcdb2c0c7bd980b4523d2c6985198cf61f03bb1fad64765a51ad2ccd8
7
+ data.tar.gz: f0c98e3158ff918fe1f0df2e5ae3c2e7cff838e6cdf37cd078d1abdc1d147561b2453ffb6b5c749dbc7b019f1691f59d0b0b52356a61efcbb10533ce44319d64
@@ -14,16 +14,34 @@ module Pubid::Core
14
14
  # @param edition [Integer] document's edition, eg. "1"
15
15
  # @param language [String] document's translation language
16
16
  # (available languages: "ru", "fr", "en", "ar")
17
- # @param amendments [Array<Amendment>] document's amendments
18
- # @param corrigendums [Array<Corrigendum>] document's corrigendums
17
+ # @param amendments [Array<Amendment>,Array<Hash>] document's amendments
18
+ # @param corrigendums [Array<Corrigendum>,Array<Hash>] document's corrigendums
19
19
  # @see Amendment
20
20
  # @see Corrigendum
21
21
  def initialize(publisher:, number:, copublisher: nil, part: nil, type: nil,
22
22
  year: nil, edition: nil, language: nil, amendments: nil,
23
23
  corrigendums: nil)
24
24
 
25
- @amendments = amendments
26
- @corrigendums = corrigendums
25
+ if amendments
26
+ @amendments = amendments.map do |amendment|
27
+ if amendment.is_a?(Hash)
28
+ self.class.get_transformer_class.new.apply(:amendments => [amendment])[:amendments].first
29
+ else
30
+ amendment
31
+ end
32
+ end
33
+ end
34
+
35
+ if corrigendums
36
+ @corrigendums = corrigendums.map do |corrigendum|
37
+ if corrigendum.is_a?(Hash)
38
+ self.class.get_transformer_class.new.apply(:corrigendums => [corrigendum])[:corrigendums].first
39
+ else
40
+ corrigendum
41
+ end
42
+ end
43
+ end
44
+
27
45
  @publisher = publisher.to_s
28
46
  @number = number
29
47
  @copublisher = copublisher if copublisher
@@ -56,33 +74,37 @@ module Pubid::Core
56
74
  def parse(code_or_params)
57
75
  params = code_or_params.is_a?(String) ?
58
76
  get_parser_class.new.parse(update_old_code(code_or_params)) : code_or_params
59
- transform(params)
77
+ transform(params.is_a?(Array) ? array_to_hash(params) : params)
60
78
  rescue Parslet::ParseFailed => failure
61
79
  raise Errors::ParseError, "#{failure.message}\ncause: #{failure.parse_failure_cause.ascii_tree}"
62
80
  end
63
81
 
82
+ # Converts array of hashes into single hash
83
+ # array like [{ publisher: "ISO" }, { number: 1 }] to hash { publisher: "ISO", number: 1 }
84
+ # @param params [Array<Hash>] input array of hashes, eg. [{ a: 1 }, { b: 2 }]
85
+ def array_to_hash(params)
86
+ params.inject({}) do |r, i|
87
+ result = r
88
+ i.each do |k, v|
89
+ result = result.merge(k => r.key?(k) ? [v, r[k]].flatten : v)
90
+ end
91
+ result
92
+ end
93
+ end
94
+
64
95
  # Transform parameters hash or array or hashes to identifier
65
96
  def transform(params)
66
- # Parslet returns an array when match any copublisher
67
- # otherwise it's hash
68
- if params.is_a?(Array)
69
- new(
70
- **(
71
- params.inject({}) do |r, i|
72
- result = r
73
- i.map {|k, v| get_transformer_class.new.apply(k => v).to_a.first }.each do |k, v|
74
- result = result.merge(k => r.key?(k) ? [v, r[k]].flatten : v)
75
- end
76
- result
77
- end
78
- )
79
- )
80
- else
81
- new(**params.map do |k, v|
82
- get_transformer_class.new.apply(k => v).to_a.first
83
- end.to_h)
84
- end
85
- # merge values repeating keys into array (for copublishers)
97
+ # run transform through each element,
98
+ # like running transformer.apply(number: 1) and transformer.apply(year: 1999)
99
+ # instead of running transformer on whole hash, like running transformer.apply({ number: 1, year: 1999 })
100
+ # where rule for number or year only will be not applied
101
+ # transformation only applied to rules matching the whole hash
102
+
103
+ identifier_params = params.map do |k, v|
104
+ get_transformer_class.new.apply(k => v).to_a.first
105
+ end.to_h
106
+
107
+ new(**identifier_params)
86
108
  end
87
109
 
88
110
  def get_amendment_class
@@ -1,5 +1,5 @@
1
1
  module Pubid
2
2
  module Core
3
- VERSION = "1.1.2".freeze
3
+ VERSION = "1.2.1".freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pubid-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-09-04 00:00:00.000000000 Z
11
+ date: 2022-10-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake