pubid-iso 0.1.4 → 0.1.7

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: e9a5dae3e19189666e2259f498813de7aa502ee7d68e1ec4567d493be74e3acb
4
- data.tar.gz: f7834ffc05c7eaeec131aaef54804512d2e6d9e5494da8fe286e9730493dd7be
3
+ metadata.gz: 821262e1b683c07f484d9102195fe832fd1eb00fb3a6b23f713893f081a527f3
4
+ data.tar.gz: 105da964ba57e1c703bf4d77f485a3fc981660b218b4bf019376f937758a4f6c
5
5
  SHA512:
6
- metadata.gz: 5a3319d163496c073813d052ecc873fb6f2f90e2351f1c8ac891c2c093c56a59d8405bc942f44b3f57e013f1f7149a7b3a35fc7b73ca3c58a0116ebce5e85b63
7
- data.tar.gz: 3c72a547b1abaa06142caa496e8ce6d3769499954bfeaf3f9b01a470017bd3f38a1682be9e793f7eaab019ce202367feeda9d771f13ad14cf11b9cd901dafd42
6
+ metadata.gz: 1e5fb2bdd1b05f02c788f4b546fa0f6b2054ef0ab01dd4b59961e8c92ccd063a95b655d04969062c2d3674ab7511058b22e7882e586c9ae00e666065592cc5d3
7
+ data.tar.gz: d5ded0494dbf495d81da9a98b25d72ed90303a343159bbe4d30315d857ae19e0824437f0ebbb0e47371c6f89565b39ca9d4f08bdc5b4bc8358656f7a56b54795
@@ -0,0 +1,14 @@
1
+ module Pubid::Iso
2
+ class Amendment < Supplement
3
+
4
+ def render_pubid
5
+ stage = render_pubid_stage
6
+ stage += " " unless stage.size == 0
7
+ "/#{stage}Amd #{render_pubid_number}"
8
+ end
9
+
10
+ def render_urn
11
+ "#{render_urn_stage}:amd#{render_urn_number}"
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module Pubid::Iso
2
+ class Corrigendum < Supplement
3
+
4
+ def render_pubid
5
+ stage = render_pubid_stage
6
+ stage += " " unless stage.size == 0
7
+ "/#{stage}Cor #{render_pubid_number}"
8
+ end
9
+
10
+ def render_urn
11
+ "#{render_urn_stage}:cor#{render_urn_number}"
12
+ end
13
+ end
14
+ end
@@ -1,5 +1,9 @@
1
1
  module Pubid::Iso
2
2
  class French < Identifier
3
+ def initialize(**opts)
4
+ opts.each { |key, value| send("#{key}=", value) }
5
+ end
6
+
3
7
  def identifier(with_date, with_language_code)
4
8
  if @type == "Guide"
5
9
  "Guide #{originator}#{stage} #{number}#{part}#{iteration}"\
@@ -13,20 +17,8 @@ module Pubid::Iso
13
17
  super.map { |copublisher| copublisher.sub("IEC", "CEI") }
14
18
  end
15
19
 
16
- def amendment
17
- if @amendment_number
18
- "Amd.#{@amendment_version}:#{@amendment_number}"
19
- else
20
- "Amd.#{@amendment_version}"
21
- end
22
- end
23
-
24
- def corrigendum
25
- if @corrigendum_number
26
- "Cor.#{@corrigendum_version}:#{@corrigendum_number}"
27
- else
28
- "Cor.#{@corrigendum_version}"
29
- end
20
+ def supplements
21
+ super.gsub(" ", ".")
30
22
  end
31
23
  end
32
24
  end
@@ -17,6 +17,10 @@ module Pubid::Iso
17
17
  "ISP" => "ИСП",
18
18
  }.freeze
19
19
 
20
+ def initialize(**opts)
21
+ opts.each { |key, value| send("#{key}=", value) }
22
+ end
23
+
20
24
  def identifier(with_date, with_language_code)
21
25
  if @type == "Guide"
22
26
  "Руководство #{originator}#{stage} #{number}#{part}#{iteration}"\
@@ -37,5 +41,9 @@ module Pubid::Iso
37
41
  def stage
38
42
  "#{(@copublisher && ' ') || '/'}#{STAGE[@stage]}" if @stage
39
43
  end
44
+
45
+ def supplements
46
+ super.gsub(" ", ".")
47
+ end
40
48
  end
41
49
  end
@@ -5,7 +5,8 @@ module Pubid::Iso
5
5
  :amendment, :amendment_version, :amendment_number,
6
6
  :corrigendum, :corrigendum_version, :corrigendum_number,
7
7
  :amendment_stage, :corrigendum_stage, :joint_document,
8
- :tctype, :sctype, :wgtype, :tcnumber, :scnumber, :wgnumber
8
+ :tctype, :sctype, :wgtype, :tcnumber, :scnumber, :wgnumber,
9
+ :urn_stage
9
10
 
10
11
  LANGUAGES = {
11
12
  "ru" => "R",
@@ -14,7 +15,21 @@ module Pubid::Iso
14
15
  "ar" => "A",
15
16
  }.freeze
16
17
 
17
- def initialize(**opts)
18
+ def initialize(amendment: nil, amendment_number: nil, amendment_version: nil,
19
+ amendment_stage: nil,
20
+ corrigendum: nil, corrigendum_number: nil, corrigendum_version: nil,
21
+ corrigendum_stage: nil, **opts)
22
+ if amendment_version
23
+ @amendment = Amendment.new(number: amendment_number,
24
+ version: amendment_version,
25
+ stage: amendment_stage)
26
+ end
27
+ if corrigendum_version
28
+ @corrigendum = Corrigendum.new(number: corrigendum_number,
29
+ version: corrigendum_version,
30
+ stage: corrigendum_stage)
31
+ end
32
+
18
33
  opts.each { |key, value| send("#{key}=", value.is_a?(Array) && value || value.to_s) }
19
34
  end
20
35
 
@@ -26,6 +41,15 @@ module Pubid::Iso
26
41
  Urn.new(**get_params)
27
42
  end
28
43
 
44
+ def self.parse_from_title(title)
45
+ title.split.reverse.inject(title) do |acc, part|
46
+ return parse(acc)
47
+ rescue Pubid::Iso::Errors::ParseError
48
+ # delete parts from the title until it's parseable
49
+ acc.reverse.sub(part.reverse, "").reverse.strip
50
+ end
51
+ end
52
+
29
53
  def self.parse(code_or_params)
30
54
  params = code_or_params.is_a?(String) ? Parser.new.parse(code_or_params) : code_or_params
31
55
  # Parslet returns an array when match any copublisher
@@ -146,35 +170,10 @@ module Pubid::Iso
146
170
  ".#{@iteration}" if @iteration
147
171
  end
148
172
 
149
- def amendment
150
- if @amendment_number
151
- "Amd #{@amendment_version}:#{@amendment_number}"
152
- else
153
- "Amd #{@amendment_version}"
154
- end
155
- end
156
-
157
- def corrigendum
158
- if @corrigendum_number
159
- "Cor #{@corrigendum_version}:#{@corrigendum_number}"
160
- else
161
- "Cor #{@corrigendum_version}"
162
- end
163
- end
164
-
165
173
  def supplements
166
- result = ""
167
- if @amendment_version
168
- result += (@amendment_stage && "/#{@amendment_stage} ") || "/"
169
- result += amendment
170
- end
171
-
172
- if @corrigendum_version
173
- result += (@corrigendum_stage && "/#{@corrigendum_stage} ") || "/"
174
- result += corrigendum
175
- end
174
+ result = @amendment&.version && @amendment.render_pubid || ""
176
175
 
177
- result
176
+ result + (@corrigendum&.version && @corrigendum.render_pubid || "")
178
177
  end
179
178
 
180
179
  def language(with_language_code = :iso)
@@ -0,0 +1,37 @@
1
+ module Pubid::Iso
2
+ class Supplement
3
+ attr_accessor :version, :number, :stage
4
+
5
+ def initialize(version:, number:, stage: nil)
6
+ @version, @number, @stage = version, number, stage
7
+ end
8
+
9
+ def ==(other)
10
+ other.version == version && (number.nil? || other.number == number) && (stage.nil? || other.stage == stage)
11
+ end
12
+
13
+ def render_pubid_stage
14
+ ((@stage && @stage) || "")
15
+ end
16
+
17
+ def render_pubid_number
18
+ if @number
19
+ "#{@version}:#{@number}"
20
+ else
21
+ "#{@version}"
22
+ end
23
+ end
24
+
25
+ def render_urn_stage
26
+ ((@stage && ":stage-#{sprintf('%05.2f', Urn::STAGES[@stage.to_sym])}") || "")
27
+ end
28
+
29
+ def render_urn_number
30
+ if @number
31
+ ":#{@number}:v#{@version}"
32
+ else
33
+ ":#{@version}:v1"
34
+ end
35
+ end
36
+ end
37
+ end
data/lib/pubid/iso/urn.rb CHANGED
@@ -54,13 +54,15 @@ module Pubid::Iso
54
54
  end
55
55
 
56
56
  def render_stage(stage)
57
+ return ":stage-#{sprintf('%05.2f', stage)}#{iteration}" if stage.is_a?(Float)
58
+
57
59
  ":stage-#{sprintf('%05.2f', STAGES[stage.to_sym])}#{iteration}"
58
60
  end
59
61
 
60
62
  def stage
61
- return render_stage(@stage) if @stage
63
+ return render_stage(@urn_stage) if @urn_stage
62
64
 
63
- return render_stage(@amendment_stage) if @amendment_stage
65
+ return render_stage(@stage) if @stage
64
66
 
65
67
  render_stage(@corrigendum_stage) if @corrigendum_stage
66
68
  end
@@ -96,21 +98,9 @@ module Pubid::Iso
96
98
  end
97
99
 
98
100
  def supplement
99
- result = ""
100
- if @amendment
101
- result += if @amendment_number
102
- ":amd:#{@amendment_number}:v#{@amendment_version}"
103
- else
104
- ":amd:#{@amendment_version}:v1"
105
- end
106
- end
107
- if @corrigendum
108
- result += if @corrigendum_number
109
- ":cor:#{@corrigendum_number}:v#{@corrigendum_version}"
110
- else
111
- ":cor:#{@corrigendum_version}:v1"
112
- end
113
- end
101
+ result = @amendment&.render_urn || ""
102
+
103
+ result += @corrigendum&.render_urn || ""
114
104
 
115
105
  result
116
106
  end
@@ -1,5 +1,5 @@
1
1
  module Pubid
2
2
  module Iso
3
- VERSION = "0.1.4".freeze
3
+ VERSION = "0.1.7".freeze
4
4
  end
5
5
  end
data/lib/pubid/iso.rb CHANGED
@@ -11,6 +11,9 @@ end
11
11
  require_relative "iso/errors"
12
12
  require_relative "iso/parser"
13
13
  require_relative "iso/transformer"
14
+ require_relative "iso/supplement"
15
+ require_relative "iso/amendment"
16
+ require_relative "iso/corrigendum"
14
17
  require_relative "iso/identifier"
15
18
  require_relative "iso/identifier/french"
16
19
  require_relative "iso/identifier/russian"
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.1.4
4
+ version: 0.1.7
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-05-19 00:00:00.000000000 Z
11
+ date: 2022-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -107,11 +107,14 @@ files:
107
107
  - README.adoc
108
108
  - lib/pubid-iso.rb
109
109
  - lib/pubid/iso.rb
110
+ - lib/pubid/iso/amendment.rb
111
+ - lib/pubid/iso/corrigendum.rb
110
112
  - lib/pubid/iso/errors.rb
111
113
  - lib/pubid/iso/identifier.rb
112
114
  - lib/pubid/iso/identifier/french.rb
113
115
  - lib/pubid/iso/identifier/russian.rb
114
116
  - lib/pubid/iso/parser.rb
117
+ - lib/pubid/iso/supplement.rb
115
118
  - lib/pubid/iso/transformer.rb
116
119
  - lib/pubid/iso/urn.rb
117
120
  - lib/pubid/iso/version.rb