pubid-core 1.2.0 → 1.2.2

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: 1e9bf3dd3d9bc2b650200a864109ae197ab92914d1badcbf211d414b9b72d535
4
- data.tar.gz: 65ceef880cc4e59dfa4cd059cd2b57090cfee8400cf26717f6bd480d3a29b7db
3
+ metadata.gz: 2a3c1e99b3327c14f2364992238d1d6a4040809dca85a6640254e2669784a449
4
+ data.tar.gz: ca910a6333a2e5e9dc1c907577bee5c3e0c34bc6a891e07b310f4be39e9ecc59
5
5
  SHA512:
6
- metadata.gz: 57670502ba1de60b88d0befb0933f990c37b3dd23544a5bd4889d2da0aea6086ea1d87032e9c547c2c5a9430037c3325d77149ebe36edf3a66c349ec3d734274
7
- data.tar.gz: 1c9917b90d532faf17a601fea62ea18fe204098052b349b189067287877f29ba66dd2e244389b4b906d8772d33eced7aa2f204f61082a81aede616168e11b038
6
+ metadata.gz: b148eeaf72cd34a292d1da244e33a4c4f7eb1549cca374e9c7da7aadc6a09de262c992de578725ebb5ecaad4c1fa625365dbfda519119ccec82c39da224d71f7
7
+ data.tar.gz: 9fb7676fbd6e7ffbf1bce920a626d70a260c24e83d59569447595c4e28157e879969b6700423d9199564e915d7929ca5c93a507e2703d79c192f0cc21d6f91cf
@@ -74,33 +74,37 @@ module Pubid::Core
74
74
  def parse(code_or_params)
75
75
  params = code_or_params.is_a?(String) ?
76
76
  get_parser_class.new.parse(update_old_code(code_or_params)) : code_or_params
77
- transform(params)
77
+ transform(params.is_a?(Array) ? array_to_hash(params) : params)
78
78
  rescue Parslet::ParseFailed => failure
79
79
  raise Errors::ParseError, "#{failure.message}\ncause: #{failure.parse_failure_cause.ascii_tree}"
80
80
  end
81
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
+
82
95
  # Transform parameters hash or array or hashes to identifier
83
96
  def transform(params)
84
- # Parslet returns an array when match any copublisher
85
- # otherwise it's hash
86
- if params.is_a?(Array)
87
- new(
88
- **(
89
- params.inject({}) do |r, i|
90
- result = r
91
- i.map {|k, v| get_transformer_class.new.apply(k => v).to_a.first }.each do |k, v|
92
- result = result.merge(k => r.key?(k) ? [v, r[k]].flatten : v)
93
- end
94
- result
95
- end
96
- )
97
- )
98
- else
99
- new(**params.map do |k, v|
100
- get_transformer_class.new.apply(k => v).to_a.first
101
- end.to_h)
102
- end
103
- # 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)
104
108
  end
105
109
 
106
110
  def get_amendment_class
@@ -13,6 +13,22 @@ module Pubid::Core::Renderer
13
13
  @params = params
14
14
  end
15
15
 
16
+ # Prerender parameters and store in @prerendered_params
17
+ # @param opts [Hash] options for render method, eg. { with_language_code: :single, with_date: true }
18
+ # @return [Renderer::Base] self
19
+ def prerender(**opts)
20
+ @prerendered_params = prerender_params(@params, opts)
21
+ @prerendered_params.default = ""
22
+ self
23
+ end
24
+
25
+ def render_base_identifier(**args)
26
+ prerender(**args)
27
+
28
+ render_identifier(@prerendered_params)
29
+ end
30
+
31
+
16
32
  def prerender_params(params, opts)
17
33
  params.map do |key, value|
18
34
  next unless value
@@ -24,16 +40,44 @@ module Pubid::Core::Renderer
24
40
  end.compact.to_h
25
41
  end
26
42
 
43
+ # Renders amendment and corrigendum when applied through identifier type
44
+ def render_supplement(supplement_params, **args)
45
+ if supplement_params[:base].type == :amd
46
+ # render inner amendment (cor -> amd -> base)
47
+ render_supplement(supplement_params[:base].get_params, **args)
48
+ else
49
+ self.class.new(supplement_params[:base].get_params).render_base_identifier(
50
+ # always render year for identifiers with supplement
51
+ **args.merge({ with_date: true }),
52
+ )
53
+ end +
54
+ case supplement_params[:type].type
55
+ when :amd
56
+ render_amendments(
57
+ [Pubid::Iso::Amendment.new(**supplement_params.slice(:number, :year, :stage, :edition, :iteration))],
58
+ args,
59
+ nil,
60
+ )
61
+ when :cor
62
+ render_corrigendums(
63
+ [Pubid::Iso::Corrigendum.new(**supplement_params.slice(:number, :year, :stage, :edition, :iteration))],
64
+ args,
65
+ nil,
66
+ )
67
+ # copy parameters from Identifier only supported by Corrigendum
68
+ end +
69
+ (supplement_params[:base].language ? render_language(supplement_params[:base].language, args, nil) : "")
70
+ end
71
+
27
72
  # Render identifier
28
73
  # @param with_date [Boolean] include year in output
29
74
  # @param with_language_code [:iso,:single] render document language as 2-letter ISO 639-1 language code or single code
30
- def render(with_date: true, with_language_code: :iso)
31
- params = prerender_params(@params,
32
- { with_date: with_date, with_language_code: with_language_code })
33
- # render empty string when the key is not exist
34
- params.default = ""
35
-
36
- render_identifier(params)
75
+ def render(with_date: true, with_language_code: :iso, **args)
76
+ if %i(amd cor).include? @params[:type]&.type
77
+ render_supplement(@params, **args.merge({ with_date: with_date, with_language_code: with_language_code}))
78
+ else
79
+ render_base_identifier(**args.merge({ with_date: with_date, with_language_code: with_language_code})) + @prerendered_params[:language].to_s
80
+ end
37
81
  end
38
82
 
39
83
  def render_base(params, prefix = "")
@@ -1,5 +1,5 @@
1
1
  module Pubid
2
2
  module Core
3
- VERSION = "1.2.0".freeze
3
+ VERSION = "1.2.2".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.2.0
4
+ version: 1.2.2
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-19 00:00:00.000000000 Z
11
+ date: 2022-10-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake