pubid-core 1.1.2 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
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