pubid-iso 0.5.3 → 0.6.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: fc8335f48f32190dc97e33a697eb6c4e4c167dde7439ed9ea7c86f993b63851e
4
- data.tar.gz: 761131f2e57b70c3c7cc1544cd916c262f4fc747910e36f015280d17367e14d6
3
+ metadata.gz: e0cd99c30184d624f0019e7d10fd9d3d752e86ff701b4852de0d97f79e9ac095
4
+ data.tar.gz: 1c2c1988f300757de153e28ff528f01a488c058e2b3b49a41be94a73ef242397
5
5
  SHA512:
6
- metadata.gz: fb15a0823609ccf7b45858407d2bf9ebb3bf64eb47cbac1d0c3295b7bd6db5d702ba46ece8908aa4ed326eb219f0d3d35dc4eb33158e5fc48a68a35e7689e53e
7
- data.tar.gz: cf0520e2b7ce394218c1a3cfd898d7b562eec3c55f4ddbf0ccdfa3ff933aa32ce53c69b6835e9254e59a9966c988b933bddc047a27a52de8863556f362bfb5c2
6
+ metadata.gz: 7f63fbc6f3f030698619fa235ee2ba17bc3ba8d237ae05b2b0397a6e211654defe106d6f13fabf4c28e40470bc8ba68664b07ff90ec12f8e1fb7d7f33a1302b2
7
+ data.tar.gz: dfa9bcb9441abc1ce2d5e56cce1ea915d72f3c9599ba64b6ec5e554e464397fe22940abc659eee1298136abba27acc26d5457f8e025a2f648a1fa32dfbe88159
@@ -11,8 +11,6 @@ module Pubid::Iso
11
11
  :iteration, :joint_document,
12
12
  :tctype, :sctype, :wgtype, :tcnumber, :scnumber, :wgnumber,
13
13
  :dirtype,
14
- # supplement for DIR type identifiers
15
- :supplement,
16
14
  :base,
17
15
  :typed_stage,
18
16
  :supplements,
@@ -24,7 +22,7 @@ module Pubid::Iso
24
22
  # @param stage [Stage, Symbol, String] stage or typed stage, e.g. "PWI", "NP", "50.00", Stage.new(abbr: :WD), "DTR"
25
23
  # @param iteration [Integer] document iteration, eg. "1", "2", "3"
26
24
  # @param joint_document [Identifier] joint document
27
- # @param supplement [Supplement] supplement
25
+ # @param supplements [Array<Supplement>] supplements
28
26
  # @param tctype [String] Technical Committee type, eg. "TC", "JTC"
29
27
  # @param sctype [String] TC subsommittee, eg. "SC"
30
28
  # @param wgtype [String] TC working group type, eg. "AG", "AHG"
@@ -44,12 +42,12 @@ module Pubid::Iso
44
42
  # @see Identifier
45
43
  # @see Pubid::Core::Identifier
46
44
  # @see Parser
47
- def initialize(publisher: "ISO", number: nil, stage: nil, iteration: nil, supplement: nil,
45
+ def initialize(publisher: "ISO", number: nil, stage: nil, iteration: nil,
48
46
  joint_document: nil, tctype: nil, sctype: nil, wgtype: nil, tcnumber: nil,
49
47
  scnumber: nil, wgnumber:nil,
50
48
  dir: nil, dirtype: nil, year: nil, amendments: nil,
51
49
  corrigendums: nil, type: nil, base: nil, supplements: nil,
52
- part: nil, addendum: nil, **opts)
50
+ part: nil, addendum: nil, edition: nil, **opts)
53
51
  super(**opts.merge(number: number, publisher: publisher, year: year,
54
52
  amendments: amendments, corrigendums: corrigendums))
55
53
 
@@ -64,25 +62,12 @@ module Pubid::Iso
64
62
  end
65
63
 
66
64
  if stage
67
- if stage.is_a?(Pubid::Core::Stage)
68
- @stage = stage
69
- @typed_stage = resolve_typed_stage(@stage.harmonized_code) unless @stage.abbr
70
- elsif self.class.has_typed_stage?(stage)
71
- @typed_stage, @stage = find_typed_stage(stage)
72
- else
73
- @stage = Identifier.parse_stage(stage)
74
- # resolve typed stage when harmonized code provided as stage
75
- # or stage abbreviation was not resolved
76
- if /\A[\d.]+\z/.match?(stage) || @stage.empty_abbr?(with_prf: true)
77
- @typed_stage = resolve_typed_stage(@stage.harmonized_code)
78
- end
79
- end
65
+ @typed_stage, @stage = resolve_stage(stage)
80
66
  elsif iteration && !is_a?(Supplement)
81
67
  raise Errors::IterationWithoutStageError, "Document without stage cannot have iteration"
82
68
  end
83
69
 
84
70
  @iteration = iteration.to_i if iteration
85
- @supplement = supplement if supplement
86
71
  @joint_document = joint_document if joint_document
87
72
  @tctype = tctype if tctype
88
73
  @sctype = sctype.to_s if sctype
@@ -95,47 +80,7 @@ module Pubid::Iso
95
80
  @base = base if base
96
81
  @part = part if part
97
82
  @addendum = addendum if addendum
98
- end
99
-
100
- # @param typed_stage [String, Symbol] eg. "DTR" or :dtr
101
- # @return [[Symbol, Stage]] typed stage and stage with assigned harmonized codes
102
- def find_typed_stage(typed_stage)
103
- if typed_stage.is_a?(Symbol)
104
- return [typed_stage,
105
- Identifier.build_stage(
106
- harmonized_code: Identifier.build_harmonized_stage_code(self.class::TYPED_STAGES[typed_stage][:harmonized_stages])),
107
- ]
108
- end
109
-
110
- typed_stage = self.class::TYPED_STAGES.find do |_, v|
111
- if v[:abbr].is_a?(Hash)
112
- v[:abbr].value?(typed_stage)
113
- else
114
- if v.key?(:legacy_abbr)
115
- v[:legacy_abbr].include?(typed_stage) || v[:abbr] == typed_stage
116
- else
117
- v[:abbr] == typed_stage
118
- end
119
- #
120
- # v[:abbr] == typed_stage
121
- end
122
- end
123
-
124
- [typed_stage.first,
125
- Identifier.build_stage(
126
- harmonized_code: Identifier.build_harmonized_stage_code(typed_stage[1][:harmonized_stages]))]
127
- end
128
-
129
- # Resolve typed stage using stage harmonized stage code
130
- # @param harmonized_code [HarmonizedStageCode]
131
- # @return [Symbol, nil] typed stage or nil
132
- def resolve_typed_stage(harmonized_code)
133
- self.class::TYPED_STAGES.each do |k, v|
134
- if (v[:harmonized_stages] & harmonized_code.stages) == harmonized_code.stages
135
- return k
136
- end
137
- end
138
- nil
83
+ @edition = edition
139
84
  end
140
85
 
141
86
  class << self
@@ -179,7 +124,7 @@ module Pubid::Iso
179
124
  end.inject({}, :merge)
180
125
 
181
126
  # return supplement if supplements applied
182
- if identifier_params[:supplements]
127
+ if identifier_params[:supplements] && identifier_params[:supplements].is_a?(Array)
183
128
  return transform_supplements(
184
129
  identifier_params[:supplements],
185
130
  identifier_params.dup.tap { |h| h.delete(:supplements) }
@@ -196,24 +141,6 @@ module Pubid::Iso
196
141
  Identifier.create(**identifier_params)
197
142
  end
198
143
 
199
- # @param typed_stage [String, Symbol] typed stage, eg. "DTR" or :dtr
200
- # @return [Boolean] true when identifier has associated typed stage
201
- def has_typed_stage?(typed_stage)
202
- return self::TYPED_STAGES.key?(typed_stage) if typed_stage.is_a?(Symbol)
203
-
204
- self::TYPED_STAGES.any? do |_, v|
205
- if v[:abbr].is_a?(Hash)
206
- v[:abbr].value?(typed_stage)
207
- else
208
- if v.key?(:legacy_abbr)
209
- v[:legacy_abbr].include?(typed_stage) || v[:abbr] == typed_stage
210
- else
211
- v[:abbr] == typed_stage
212
- end
213
- end
214
- end
215
- end
216
-
217
144
  def get_amendment_class
218
145
  Pubid::Iso::Amendment
219
146
  end
@@ -238,6 +165,10 @@ module Pubid::Iso
238
165
  UPDATE_CODES
239
166
  end
240
167
 
168
+ def get_identifier
169
+ Identifier
170
+ end
171
+
241
172
  def type_match?(parameters)
242
173
  parameters[:type] ? has_type?(parameters[:type]) : has_typed_stage?(parameters[:stage])
243
174
  end
@@ -251,16 +182,6 @@ module Pubid::Iso
251
182
  ).render + (language ? ":#{language}" : "")
252
183
  end
253
184
 
254
- def get_params
255
- instance_variables.map do |var|
256
- if var.to_s == "@typed_stage" && @typed_stage
257
- [:typed_stage, self.class::TYPED_STAGES[@typed_stage][:abbr]]
258
- else
259
- [var.to_s.gsub("@", "").to_sym, instance_variable_get(var)]
260
- end
261
- end.to_h
262
- end
263
-
264
185
  # @param format [:ref_num_short,:ref_num_long,:ref_dated,:ref_dated_long,:ref_undated,:ref_undated_long] create reference with specified format
265
186
  # Format options are:
266
187
  # :ref_num_short -- instance reference number: 1 letter language code + short form (DAM) + dated
@@ -333,23 +254,6 @@ module Pubid::Iso
333
254
  end
334
255
 
335
256
  # Return typed stage abbreviation, eg. "FDTR", "DIS", "TR"
336
- def typed_stage_abbrev
337
- if self.class::TYPED_STAGES.key?(typed_stage)
338
- self.class::TYPED_STAGES[typed_stage][:abbr]
339
- else
340
- stage ? "#{stage.abbr} #{type[:key].to_s.upcase}" : type[:key].to_s.upcase
341
- end
342
- end
343
-
344
- # Return typed stage name, eg. "Final Draft Technical Report" for "FDTR"
345
- def typed_stage_name
346
- if self.class::TYPED_STAGES.key?(typed_stage)
347
- self.class::TYPED_STAGES[typed_stage][:name]
348
- else
349
- stage ? "#{stage.name} #{type[:title]}" : type[:title]
350
- end
351
- end
352
-
353
257
  # returns root identifier
354
258
  def root
355
259
  return base.base if base&.base
@@ -8,6 +8,13 @@ module Pubid::Iso
8
8
 
9
9
  TYPED_STAGES = {}.freeze
10
10
 
11
+ attr_accessor :edition_publisher
12
+
13
+ def initialize(edition_publisher: nil, **opts)
14
+ super(**opts)
15
+ @edition_publisher = edition_publisher
16
+ end
17
+
11
18
  def self.type
12
19
  { key: :dir, title: "Directives" }
13
20
  end
@@ -21,11 +21,7 @@ module Pubid::Iso
21
21
  },
22
22
  }.freeze
23
23
 
24
- def initialize(publisher: "ISO", number: nil, stage: nil, iteration: nil, supplement: nil,
25
- joint_document: nil, tctype: nil, sctype: nil, wgtype: nil, tcnumber: nil,
26
- scnumber: nil, wgnumber:nil,
27
- dir: nil, dirtype: nil, year: nil, amendments: nil,
28
- corrigendums: nil, type: nil, base: nil, supplements: nil, **opts)
24
+ def initialize(stage: nil, iteration: nil, **opts)
29
25
 
30
26
  if iteration && stage.nil?
31
27
  raise Errors::IsStageIterationError, "IS stage document cannot have iteration"
@@ -91,7 +91,6 @@ module Pubid::Iso
91
91
 
92
92
  rule(:year_digits) { (str("19") | str("20")) >> match('\d').repeat(2, 2) >> digits.absent? }
93
93
 
94
-
95
94
  rule(:part_matcher) do
96
95
  year_digits.absent? >>
97
96
  supplements.absent? >>
@@ -170,9 +169,13 @@ module Pubid::Iso
170
169
  ((str("DIR") | str("Directives Part") | str("Directives, Part") | str("Directives,")).as(:type) >> space).maybe >>
171
170
  (str("JTC").as(:dirtype) >> space).maybe >>
172
171
  (digits.as(:number) >> (str(":") >> year).maybe).maybe >>
173
- (str(" -- Consolidated").maybe >> (space? >> (organization.as(:publisher) >> space).maybe >>
174
- (array_to_str(DIR_SUPPLEMENTS)) >> (str(":") >> year).maybe >>
175
- dir_supplement_edition.maybe).repeat(1).as(:supplements)).maybe
172
+ (str(" -- Consolidated").maybe >> (str("").as(:mark) >> space? >>
173
+ (organization.as(:publisher) >> space?).maybe >>
174
+ array_to_str(DIR_SUPPLEMENTS) >> (str(":") >> year).maybe >>
175
+ dir_supplement_edition.maybe).repeat(1).as(:supplements)).maybe >>
176
+ # parse identifiers with publisher at the end, e.g. "ISO/IEC DIR 2 ISO"
177
+ (space >> organization.as(:publisher) >> (str(":") >> year).maybe).as(:edition).maybe
178
+
176
179
  end
177
180
 
178
181
  rule(:std_document_body) do
@@ -64,7 +64,7 @@ module Pubid::Iso::Renderer
64
64
  end
65
65
  [publisher, copublishers].join("/")
66
66
  when Array
67
- ([publisher] + copublishers.map(&:to_s).sort).map do |pub|
67
+ ([publisher] + copublishers.map(&:to_s)).map do |pub|
68
68
  if opts[:language]
69
69
  (TRANSLATION[opts[:language]][:publisher][pub] || pub).gsub('-', '/')
70
70
  else
@@ -156,8 +156,6 @@ module Pubid::Iso::Renderer
156
156
  end
157
157
 
158
158
  def render_part(part, opts, _params)
159
- return "-#{part.reverse.join('-')}" if part.is_a?(Array)
160
-
161
159
  "-#{part}"
162
160
  end
163
161
 
@@ -4,12 +4,12 @@ module Pubid::Iso::Renderer
4
4
  class Dir < Base
5
5
 
6
6
  def render_identifier(params, opts)
7
- res = ("%{publisher} DIR%{dirtype}%{number}%{year}%{supplement}" % params)
7
+ res = ("%{publisher} DIR%{dirtype}%{number}%{year}%{edition}" % params)
8
8
 
9
9
  if params.key?(:joint_document)
10
10
  joint_params = prerender_params(params[:joint_document].get_params, {})
11
11
  joint_params.default = ""
12
- res += (" + %{publisher}%{dirtype}%{number}%{year}%{supplement}" % joint_params)
12
+ res += (" + %{publisher}%{dirtype}%{number}%{year}" % joint_params)
13
13
  end
14
14
 
15
15
  res
@@ -23,13 +23,8 @@ module Pubid::Iso::Renderer
23
23
  " #{dirtype}"
24
24
  end
25
25
 
26
- def render_supplement(supplement, _opts, _params)
27
- if supplement.publisher && supplement.publisher != ""
28
- " #{supplement.publisher} SUP"
29
- else
30
- " SUP"
31
- end + (supplement.year && ":#{supplement.year}" || "") +
32
- (supplement.edition && " Edition #{supplement.edition}" || "")
26
+ def render_edition(edition, _opts, _params)
27
+ " #{edition[:publisher]}" + (edition[:year] ? ":#{edition[:year]}" : "")
33
28
  end
34
29
  end
35
30
  end
@@ -2,7 +2,7 @@ require_relative "identifier/base"
2
2
  require_relative "renderer/base"
3
3
 
4
4
  module Pubid::Iso
5
- class Transformer < Parslet::Transform
5
+ class Transformer < Pubid::Core::Transformer
6
6
  rule(edition: "Ed") do
7
7
  { edition: "1" }
8
8
  end
@@ -15,28 +15,30 @@ module Pubid::Iso
15
15
  end
16
16
 
17
17
  rule(supplements: subtree(:supplements)) do |context|
18
- context[:supplements] =
19
- context[:supplements].map do |supplement|
20
- if supplement[:typed_stage]
21
- supplement.merge(
22
- case supplement[:typed_stage]
23
- when "PDAM"
24
- { typed_stage: "CD", type: "Amd" }
25
- when "pDCOR"
26
- { typed_stage: "CD", type: "Cor" }
18
+ if context[:supplements].is_a?(Array)
19
+ context[:supplements] =
20
+ context[:supplements].map do |supplement|
21
+ if supplement[:typed_stage]
22
+ supplement.merge(
23
+ case supplement[:typed_stage]
24
+ when "PDAM"
25
+ { typed_stage: "CD", type: "Amd" }
26
+ when "pDCOR"
27
+ { typed_stage: "CD", type: "Cor" }
28
+ else
29
+ {}
30
+ end
31
+ )
32
+ else
33
+ case supplement[:type]
34
+ when "Addendum"
35
+ supplement.merge({ type: "Add" })
27
36
  else
28
- {}
37
+ supplement
29
38
  end
30
- )
31
- else
32
- case supplement[:type]
33
- when "Addendum"
34
- supplement.merge({ type: "Add" })
35
- else
36
- supplement
37
39
  end
38
40
  end
39
- end
41
+ end
40
42
  context
41
43
  end
42
44
 
@@ -96,6 +98,10 @@ module Pubid::Iso
96
98
  { publisher: russian_publisher&.to_s || publisher }
97
99
  end
98
100
 
101
+ rule(part: sequence(:part)) do
102
+ { part: part.map(&:to_s).join("-") }
103
+ end
104
+
99
105
  rule(joint_document: subtree(:joint_document)) do |context|
100
106
  context[:joint_document] =
101
107
  Identifier.create(**context[:joint_document])
@@ -108,36 +114,6 @@ module Pubid::Iso
108
114
  context.select { |k, v| k != :dir_joint_document }
109
115
  end
110
116
 
111
-
112
- rule(roman_numerals: simple(:roman_numerals)) do |context|
113
- roman_to_int(context[:roman_numerals])
114
- # case roman_numerals
115
- # when "III"
116
- # 3
117
- # else
118
- # nil
119
- # end
120
- end
121
-
122
- ROMAN_TO_INT = {
123
- "I" => 1,
124
- "V" => 5,
125
- "X" => 10,
126
- "L" => 50,
127
- "C" => 100,
128
- "D" => 500,
129
- "M" => 1000,
130
- }
131
-
132
- def self.roman_to_int(roman)
133
- sum = ROMAN_TO_INT[roman.to_s[0]]
134
- roman.to_s.chars.each_cons(2) do |c1, c2|
135
- sum += ROMAN_TO_INT[c2]
136
- sum -= ROMAN_TO_INT[c1] * 2 if ROMAN_TO_INT[c1] < ROMAN_TO_INT[c2]
137
- end
138
- sum
139
- end
140
-
141
117
  def self.convert_stage(code)
142
118
  russian_code = Pubid::Iso::Renderer::Base::TRANSLATION[:russian][:stage].key(code.to_s)
143
119
  return { stage: russian_code } if russian_code
@@ -1,5 +1,5 @@
1
1
  module Pubid
2
2
  module Iso
3
- VERSION = "0.5.3".freeze
3
+ VERSION = "0.6.1".freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pubid-iso
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.3
4
+ version: 0.6.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: 2023-05-14 00:00:00.000000000 Z
11
+ date: 2023-10-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -38,48 +38,6 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '3.0'
41
- - !ruby/object:Gem::Dependency
42
- name: nokogiri
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: thor
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: lightly
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :runtime
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
41
  - !ruby/object:Gem::Dependency
84
42
  name: parslet
85
43
  requirement: !ruby/object:Gem::Requirement
@@ -100,14 +58,14 @@ dependencies:
100
58
  requirements:
101
59
  - - "~>"
102
60
  - !ruby/object:Gem::Version
103
- version: 1.8.0
61
+ version: 1.8.7
104
62
  type: :runtime
105
63
  prerelease: false
106
64
  version_requirements: !ruby/object:Gem::Requirement
107
65
  requirements:
108
66
  - - "~>"
109
67
  - !ruby/object:Gem::Version
110
- version: 1.8.0
68
+ version: 1.8.7
111
69
  description: Library to generate, parse and manipulate ISO PubID.
112
70
  email:
113
71
  - open.source@ribose.com
@@ -187,7 +145,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
187
145
  - !ruby/object:Gem::Version
188
146
  version: '0'
189
147
  requirements: []
190
- rubygems_version: 3.0.3.1
148
+ rubygems_version: 3.3.26
191
149
  signing_key:
192
150
  specification_version: 4
193
151
  summary: Library to generate, parse and manipulate ISO PubID.