pubid-core 1.12.8 → 1.12.10

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: bed399c7017bc24dfde32d04b76eef0b0a5d363fa7c6e8d4a52cda4323d68711
4
- data.tar.gz: 7b0e566fbdecd88f9243f9f18fb1e03f6b0d63d73a1211474dddfbcf1bf0d129
3
+ metadata.gz: 830c9694368efc359626ee62bb062fd449692dc0fdd70b26763f647f8702e263
4
+ data.tar.gz: 26eee79eae6bdecd35adeb61fa000d7346c653b27de8fd2259dbdddbb8f1e655
5
5
  SHA512:
6
- metadata.gz: 74e66447a935858d57b395b2324dbc2b1b250f0c8ecb45d3fb009fc82c8546bc2efb55fb0a9379c78f5c8a8d1da5c86adb8e50d8f2238edf5f92064d4a692bf2
7
- data.tar.gz: e0b4714e2936ab20d7666c9fcdd1efc4a967f627071753c2bb65e4c48deacfa9f41b1b5c5092e2cff25458bdccc849e28bfc8ba89b480f4e489c36e3c7f0873f
6
+ metadata.gz: 49f386ef299df70fc725137b186f8e375033e62874be0ec871384a131451f3f5cd28e28aa2474a8d15adeb9c887b1e9b8c47709e91211b8ec4e44b93de2a8616
7
+ data.tar.gz: 2841a2ef9b8ffe2e8b4e6577f3782ba110fb4e9a6bd6564eb428aea9675173d3743b9e65c0b388b3ad2e6f334f50eeaabc4fe25459e8ef7d2584ce0d1d028b6c
data/README.adoc CHANGED
@@ -20,7 +20,6 @@ pubid_first.exclude(:year) == pubid_second
20
20
 
21
21
  === Using #to_h to convert identifier to hash
22
22
 
23
-
24
23
  [source,ruby]
25
24
  ----
26
25
  require "pubid-core"
@@ -29,3 +28,19 @@ pubid = Identifier.parse("ISO 1:1999")
29
28
  pubid.to_h
30
29
  => { publisher: "ISO", number: 1, year: 1999 }
31
30
  ----
31
+
32
+ === Using #new_edition_of? to compare identifiers
33
+
34
+ [source,ruby]
35
+ ----
36
+ require "pubid-core"
37
+
38
+ pubid_first = Identifier.parse("ISO 1:1999")
39
+ pubid_second = Identifier.parse("ISO 1:2000")
40
+
41
+ pubid_first.new_edition_of?(pubid_second)
42
+ => false
43
+ pubid_second.new_edition_of?(pubid_first)
44
+ => true
45
+
46
+ ----
@@ -0,0 +1,26 @@
1
+ module Pubid::Core
2
+ class Edition
3
+ include Comparable
4
+ attr_accessor :year, :number, :config
5
+
6
+ def initialize(config:, year: nil, number: nil)
7
+ @config = config
8
+ @year = year
9
+ @number = number
10
+ end
11
+
12
+ def <=>(other)
13
+ if other.year && year
14
+ return number <=> other.number if year == other.year
15
+
16
+ year <=> other.year
17
+ else
18
+ number <=> other.number
19
+ end
20
+ end
21
+
22
+ # def ==(other)
23
+ # other.year == year && number == other.number
24
+ # end
25
+ end
26
+ end
@@ -8,6 +8,7 @@ module Pubid::Core
8
8
  class TypeStageParseError < StandardError; end
9
9
  class WrongTypeError < StandardError; end
10
10
  class TypedStageInvalidError < StandardError; end
11
-
11
+ class AnotherDocumentError < StandardError; end
12
+ class CannotCompareError < StandardError; end
12
13
  end
13
14
  end
@@ -89,10 +89,13 @@ module Pubid::Core
89
89
  end
90
90
 
91
91
  def ==(other)
92
- if other.is_a?(String)
92
+ case other
93
+ when String
93
94
  to_s == other
94
- elsif other.is_a?(Identifier::Base)
95
+ when Identifier::Base
95
96
  to_h == other.to_h
97
+ when Hash
98
+ to_h == other
96
99
  else
97
100
  raise Errors::WrongTypeError, "cannot compare with #{other.class} type"
98
101
  end
@@ -164,6 +167,36 @@ module Pubid::Core
164
167
  # @typed_stage = self.class::TYPED_STAGES[@typed_stage][:abbr] if @typed_stage
165
168
  end
166
169
 
170
+ # Checks if another identifier is newer edition of the same document
171
+ # @param other [Pubid::Core::Identifier::Base] pubid identifier to compare with
172
+ # @return [Boolean] true if another identifier is newer edition
173
+ def new_edition_of?(other)
174
+ if exclude(:year, :edition) != other.exclude(:year, :edition)
175
+ raise Errors::AnotherDocumentError, "cannot compare edition with #{other}"
176
+ end
177
+
178
+ if year.nil? || other.year.nil?
179
+ raise Errors::CannotCompareError, "cannot compare identifier without edition year"
180
+ end
181
+
182
+ if year == other.year && (edition || other.edition)
183
+ return false if other.edition.nil?
184
+
185
+ return true if edition.nil?
186
+
187
+ return edition > other.edition
188
+ end
189
+
190
+ year > other.year
191
+ end
192
+
193
+ # returns root identifier
194
+ def root
195
+ return base.base if base&.class&.method_defined?(:base) && base&.base
196
+
197
+ base || self
198
+ end
199
+
167
200
  class << self
168
201
  # Parses given identifier
169
202
  # @param code_or_params [String, Hash] code or hash from parser
@@ -7,6 +7,7 @@ module Pubid::Core::Renderer
7
7
  "fr" => "F",
8
8
  "en" => "E",
9
9
  "ar" => "A",
10
+ "es" => "S",
10
11
  }.freeze
11
12
 
12
13
  def initialize(params)
@@ -1,5 +1,5 @@
1
1
  module Pubid
2
2
  module Core
3
- VERSION = "1.12.8".freeze
3
+ VERSION = "1.12.10".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.12.8
4
+ version: 1.12.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-07-07 00:00:00.000000000 Z
11
+ date: 2024-10-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -68,6 +68,7 @@ files:
68
68
  - lib/pubid/core/amendment.rb
69
69
  - lib/pubid/core/configuration.rb
70
70
  - lib/pubid/core/corrigendum.rb
71
+ - lib/pubid/core/edition.rb
71
72
  - lib/pubid/core/entity.rb
72
73
  - lib/pubid/core/errors.rb
73
74
  - lib/pubid/core/harmonized_stage_code.rb