pubid-iso 0.5.2 → 0.5.3

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: 6f3adc0da212bf94d36e4cf03a2c0df042faec56fd9c218d2ffad51fa63dfb0e
4
- data.tar.gz: a0daec7e03a71688ebb1959531415d4c842b75dd1e0c8ed7b48f8399148e5848
3
+ metadata.gz: fc8335f48f32190dc97e33a697eb6c4e4c167dde7439ed9ea7c86f993b63851e
4
+ data.tar.gz: 761131f2e57b70c3c7cc1544cd916c262f4fc747910e36f015280d17367e14d6
5
5
  SHA512:
6
- metadata.gz: 48d74a1e76b6ee3c7e064c56ce7c6623533f584e85b4c227ea9e0e68993a82c98fb2d30e4e19c5ed61670ce9160503bcfcc6142c277c66812b3cd3bffb51d0ee
7
- data.tar.gz: 0764db7a06d34fdf687f577663f3b03b1e2181a38444f03eba5f3ec8678c787ad01e83aadf27baebd9bdf3f72a1d90edaa7817683173ed271a93c7379c12e00f
6
+ metadata.gz: fb15a0823609ccf7b45858407d2bf9ebb3bf64eb47cbac1d0c3295b7bd6db5d702ba46ece8908aa4ed326eb219f0d3d35dc4eb33158e5fc48a68a35e7689e53e
7
+ data.tar.gz: cf0520e2b7ce394218c1a3cfd898d7b562eec3c55f4ddbf0ccdfa3ff933aa32ce53c69b6835e9254e59a9966c988b933bddc047a27a52de8863556f362bfb5c2
data/README.adoc CHANGED
@@ -1,5 +1,7 @@
1
1
  = ISO publication identifiers ("ISO PubID")
2
2
 
3
+ image:https://badge.fury.io/rb/pubid-iso.svg["Gem Version", link="https://badge.fury.io/rb/pubid-iso"]
4
+
3
5
  == Purpose
4
6
 
5
7
  This gem implements a mechanism to parse and utilize ISO publication
@@ -349,12 +351,19 @@ final draft International Standards (FDIS) and International Standards`",
349
351
  distinguished by a numerical suffix (.2, .3, etc.).
350
352
  ____
351
353
 
352
- The stage iteration number is assigned accordingly for all stages, which is
353
- patterned as:
354
+ [example]
355
+ ====
356
+ ISO/CD TR 10064-2.2
357
+ ISO/IEC CD 23264-2.4
358
+ ISO/DIS 80369-3.2
359
+ ====
360
+
361
+ In an ISO PubID, the stage iteration number is applied to the standard
362
+ number, patterned as:
354
363
 
355
- * `{document stage}` (no suffix if iteration is 1); or
356
- * `{document stage}.{iteration number}`
357
- (suffix including iteration number after 1).
364
+ * `{document stage} {document number}` (if iteration is 1); or
365
+ * `{document stage} {document number}.{iteration number}`
366
+ (if iteration is larger than 1).
358
367
 
359
368
  Once the document is published (stage 60 substage 60), no status abbreviation is
360
369
  given.
@@ -0,0 +1,24 @@
1
+ require_relative "../renderer/addendum"
2
+
3
+ module Pubid::Iso
4
+ module Identifier
5
+ class Addendum < Supplement
6
+ def_delegators 'Pubid::Iso::Identifier::Addendum', :type
7
+
8
+ TYPED_STAGES = {
9
+ dad: {
10
+ abbr: "DAD",
11
+ name: "Draft Addendum",
12
+ harmonized_stages: %w[],
13
+ },
14
+ }.freeze
15
+ def self.type
16
+ { key: :add, title: "Addendum" }
17
+ end
18
+
19
+ def self.get_renderer_class
20
+ Renderer::Addendum
21
+ end
22
+ end
23
+ end
24
+ end
@@ -186,6 +186,13 @@ module Pubid::Iso
186
186
  )
187
187
  end
188
188
 
189
+ if identifier_params[:extract]
190
+ base_parameters = params.reject { |k, _| k == :extract }
191
+
192
+ return Identifier.create(base: Identifier.create(**base_parameters),
193
+ type: :ext, **identifier_params[:extract])
194
+ end
195
+
189
196
  Identifier.create(**identifier_params)
190
197
  end
191
198
 
@@ -0,0 +1,19 @@
1
+ require_relative "../renderer/extract"
2
+
3
+ module Pubid::Iso
4
+ module Identifier
5
+ class Extract < Base
6
+ def_delegators 'Pubid::Iso::Identifier::Extract', :type
7
+
8
+ TYPED_STAGES = {}.freeze
9
+
10
+ def self.type
11
+ { key: :ext, title: "Extract" }
12
+ end
13
+
14
+ def self.get_renderer_class
15
+ Renderer::Extract
16
+ end
17
+ end
18
+ end
19
+ end
@@ -4,6 +4,11 @@ module Pubid::Iso
4
4
  def_delegators 'Pubid::Iso::Identifier::InternationalStandard', :type
5
5
 
6
6
  TYPED_STAGES = {
7
+ dp: {
8
+ abbr: "DP",
9
+ name: "Draft Proposal",
10
+ harmonized_stages: %w[],
11
+ },
7
12
  dis: {
8
13
  abbr: "DIS",
9
14
  name: "Draft International Standard",
@@ -3,7 +3,7 @@ require_relative "renderer/base"
3
3
 
4
4
  module Pubid::Iso
5
5
  class Parser < Pubid::Core::Parser
6
- STAGES = %w[NP NWIP WD CD PRF AWI PWI FPD].freeze
6
+ STAGES = %w[NP NWIP WD CD FCD PRF AWI PWI FPD].freeze
7
7
  TYPES = %w[DATA ISP IWA R TTA TS TR IS PAS Guide GUIDE DIR].freeze
8
8
  # TYPED_STAGES = %w[DIS FDIS DPAS FDTR FDTS DTS DTR PDTR PDTS].freeze
9
9
  SUPPLEMENTS = %w[Amd Cor AMD COR Suppl].freeze
@@ -18,13 +18,17 @@ module Pubid::Iso
18
18
  end.flatten +
19
19
  %w[pDCOR PDAM]
20
20
 
21
+ STAGED_ADDENDA = Pubid::Iso::Identifier::Addendum::TYPED_STAGES.map do |_, v|
22
+ v[:abbr]
23
+ end
24
+
21
25
  DIR_SUPPLEMENTS = %w[Supplement SUP].freeze
22
26
 
23
- TYPED_STAGES = Identifier.config.types.map do |type|
27
+ TYPED_STAGES = (Identifier.config.types.map do |type|
24
28
  type::TYPED_STAGES.map do |_, v|
25
29
  v.key?(:legacy_abbr) ? (v[:legacy_abbr] + [v[:abbr]]) : v[:abbr]
26
30
  end
27
- end.flatten - STAGED_SUPPLEMENTS + %w[PDTR PDTS]
31
+ end.flatten - STAGED_SUPPLEMENTS + %w[PDTR PDTS]).sort_by(&:length).reverse
28
32
 
29
33
  TCTYPES = ["TC", "JTC", "PC", "IT", "CAB", "CASCO", "COPOLCO",
30
34
  "COUNCIL", "CPSG", "CS", "DEVCO", "GA", "GAAB", "INFCO",
@@ -40,6 +44,10 @@ module Pubid::Iso
40
44
  "CSC/SP", "CSC/FIN", "JAG"].freeze
41
45
 
42
46
  ORGANIZATIONS = %w[IEC IEEE CIW SAE CIE ASME ASTM OECD ISO HL7 CEI].freeze
47
+ rule(:dash) do
48
+ str("-") | str("‑") | str("‐")
49
+ end
50
+
43
51
  rule(:stage) do
44
52
  array_to_str(Pubid::Iso::Renderer::Base::TRANSLATION[:russian][:stage].values) | array_to_str(STAGES)
45
53
  end
@@ -60,6 +68,10 @@ module Pubid::Iso
60
68
  (array_to_str(Pubid::Iso::Renderer::Base::TRANSLATION[:russian][:type].values) | array_to_str(TYPES)).as(:type)
61
69
  end
62
70
 
71
+ rule(:staged_addenda) do
72
+ array_to_str(STAGED_ADDENDA)
73
+ end
74
+
63
75
  rule(:tctype) do
64
76
  # tc-types
65
77
  array_to_str(TCTYPES)
@@ -82,11 +94,12 @@ module Pubid::Iso
82
94
 
83
95
  rule(:part_matcher) do
84
96
  year_digits.absent? >>
85
- (str("Amd") | str("Cor")).absent? >> ((roman_numerals >> digits.absent?) | match['[\dA-Z]'].repeat(1)).as(:part)
97
+ supplements.absent? >>
98
+ staged_addenda.absent? >> ((roman_numerals >> digits.absent?) | match['[\dA-Z]'].repeat(1)).as(:part)
86
99
  end
87
100
 
88
101
  rule(:part) do
89
- (str("/") | str("-")) >> space? >> part_matcher >> (str("-") >> part_matcher).repeat
102
+ (str("/") | dash) >> space? >> part_matcher >> (dash >> part_matcher).repeat
90
103
  end
91
104
 
92
105
  rule(:organization) do
@@ -109,13 +122,19 @@ module Pubid::Iso
109
122
  (space | str(".")).repeat(1).maybe >>
110
123
  digits.as(:number).maybe >>
111
124
  (str(".") >> digits.as(:iteration)).maybe >>
112
- ((str(":") | str("-")) >> digits.as(:year)).maybe).repeat(1).as(:supplements)
125
+ ((str(":") | dash) >> digits.as(:year)).maybe).repeat(1).as(:supplements)
113
126
  end
114
127
 
115
128
  rule(:addendum) do
116
129
  (
117
- ((str("/") >> (str("Add") | str("ADD"))) | (str(" — Addendum"))) >> space >> digits.as(:number) >> ((str(":")) >> digits.as(:year)).maybe
118
- ).as(:addendum)
130
+ (((str("/") >> (str("Add") | str("ADD")).as(:type)) | (str(" — ") >> str("Addendum").as(:type))) |
131
+ (str("/") >> staged_addenda.as(:typed_stage))) >>
132
+ space >> digits.as(:number) >> ((str(":")) >> digits.as(:year)).maybe
133
+ ).repeat(1).as(:supplements)
134
+ end
135
+
136
+ rule(:extract) do
137
+ str("/") >> str("Ext") >> space >> (digits.as(:number) >> str(":") >> digits.as(:year)).as(:extract)
119
138
  end
120
139
 
121
140
  rule(:language) do
@@ -157,15 +176,16 @@ module Pubid::Iso
157
176
  end
158
177
 
159
178
  rule(:std_document_body) do
160
- (type | stage.as(:stage)).maybe >>
179
+ (type | (stage.as(:stage) >> digits.as(:iteration).maybe)).maybe >>
161
180
  # for ISO/IEC WD TS 25025
162
181
  space? >> ((stage.as(:stage) | typed_stage.as(:stage) | type) >> space).maybe >>
163
182
  digits.as(:number) >>
164
183
  # for identifiers like ISO 5537/IDF 26
165
184
  (str("|") >> (str("IDF").as(:publisher) >> space >> digits.as(:number)).as(:joint_document)).maybe >>
166
185
  part.maybe >> iteration.maybe >>
167
- (space? >> (str(":") | str("-")) >> year).maybe >>
186
+ (space? >> (str(":") | dash) >> year).maybe >>
168
187
  supplement.maybe >>
188
+ extract.maybe >>
169
189
  addendum.maybe >>
170
190
  edition.maybe >>
171
191
  language.maybe
@@ -0,0 +1,7 @@
1
+ require_relative "supplement"
2
+
3
+ module Pubid::Iso::Renderer
4
+ class Addendum < Supplement
5
+ TYPE = "Add".freeze
6
+ end
7
+ end
@@ -0,0 +1,9 @@
1
+ require_relative "base"
2
+
3
+ module Pubid::Iso::Renderer
4
+ class Extract < Supplement
5
+ def render_identifier(params, opts)
6
+ "/Ext%{number}%{year}" % params
7
+ end
8
+ end
9
+ end
@@ -29,7 +29,12 @@ module Pubid::Iso
29
29
  end
30
30
  )
31
31
  else
32
- supplement
32
+ case supplement[:type]
33
+ when "Addendum"
34
+ supplement.merge({ type: "Add" })
35
+ else
36
+ supplement
37
+ end
33
38
  end
34
39
  end
35
40
  context
@@ -1,5 +1,5 @@
1
1
  module Pubid
2
2
  module Iso
3
- VERSION = "0.5.2".freeze
3
+ VERSION = "0.5.3".freeze
4
4
  end
5
5
  end
data/lib/pubid/iso.rb CHANGED
@@ -28,6 +28,8 @@ require_relative "iso/identifier/guide"
28
28
  require_relative "iso/identifier/recommendation"
29
29
  require_relative "iso/identifier/technology_trends_assessments"
30
30
  require_relative "iso/identifier/international_workshop_agreement"
31
+ require_relative "iso/identifier/extract"
32
+ require_relative "iso/identifier/addendum"
31
33
 
32
34
  config = Pubid::Core::Configuration.new
33
35
  config.stages = YAML.load_file(File.join(File.dirname(__FILE__), "../../stages.yaml"))
@@ -46,7 +48,9 @@ config.types = [Pubid::Iso::Identifier::InternationalStandard,
46
48
  Pubid::Iso::Identifier::TechnicalReport,
47
49
  Pubid::Iso::Identifier::TechnicalSpecification,
48
50
  Pubid::Iso::Identifier::TechnologyTrendsAssessments,
49
- Pubid::Iso::Identifier::Guide]
51
+ Pubid::Iso::Identifier::Guide,
52
+ Pubid::Iso::Identifier::Extract,
53
+ Pubid::Iso::Identifier::Addendum]
50
54
  config.type_names = { tr: {
51
55
  long: "Technical Report",
52
56
  short: "TR",
data/stages.yaml CHANGED
@@ -4,6 +4,7 @@ abbreviations:
4
4
  AWI: ["20.00", "10.99"]
5
5
  WD: ["20.20", "20.60", "20.98", "20.99"]
6
6
  CD: ["30.00", "30.20", "30.60", "30.92", "30.98", "30.99"]
7
+ FCD: ["40.00", "40.20", "40.60", "40.92", "40.98", "40.99"]
7
8
  PRF: ["50.00", "50.20", "50.60", "50.92", "50.98", "50.99"]
8
9
 
9
10
  names:
@@ -11,6 +12,7 @@ names:
11
12
  PWI: Preliminary Work Item
12
13
  NP: New Proposal
13
14
  CD: Committee Draft
15
+ FCD: Final Committee Draft
14
16
  PRF: Proof of a new
15
17
 
16
18
  codes_description:
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.2
4
+ version: 0.5.3
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-03-31 00:00:00.000000000 Z
11
+ date: 2023-05-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -123,10 +123,12 @@ files:
123
123
  - lib/pubid/iso.rb
124
124
  - lib/pubid/iso/errors.rb
125
125
  - lib/pubid/iso/identifier.rb
126
+ - lib/pubid/iso/identifier/addendum.rb
126
127
  - lib/pubid/iso/identifier/amendment.rb
127
128
  - lib/pubid/iso/identifier/base.rb
128
129
  - lib/pubid/iso/identifier/corrigendum.rb
129
130
  - lib/pubid/iso/identifier/directives.rb
131
+ - lib/pubid/iso/identifier/extract.rb
130
132
  - lib/pubid/iso/identifier/guide.rb
131
133
  - lib/pubid/iso/identifier/international_standard.rb
132
134
  - lib/pubid/iso/identifier/international_standardized_profile.rb
@@ -139,10 +141,12 @@ files:
139
141
  - lib/pubid/iso/identifier/technical_specification.rb
140
142
  - lib/pubid/iso/identifier/technology_trends_assessments.rb
141
143
  - lib/pubid/iso/parser.rb
144
+ - lib/pubid/iso/renderer/addendum.rb
142
145
  - lib/pubid/iso/renderer/amendment.rb
143
146
  - lib/pubid/iso/renderer/base.rb
144
147
  - lib/pubid/iso/renderer/corrigendum.rb
145
148
  - lib/pubid/iso/renderer/dir.rb
149
+ - lib/pubid/iso/renderer/extract.rb
146
150
  - lib/pubid/iso/renderer/guide.rb
147
151
  - lib/pubid/iso/renderer/international_standard.rb
148
152
  - lib/pubid/iso/renderer/international_standardized_profile.rb