pubid-bsi 0.1.1 → 0.3.0
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 +4 -4
- data/lib/pubid/bsi/identifier/base.rb +47 -5
- data/lib/pubid/bsi/identifier/collection.rb +22 -0
- data/lib/pubid/bsi/identifier/expert_commentary.rb +22 -0
- data/lib/pubid/bsi/identifier/national_annex.rb +23 -0
- data/lib/pubid/bsi/parser.rb +40 -7
- data/lib/pubid/bsi/renderer/base.rb +15 -2
- data/lib/pubid/bsi/renderer/collection.rb +15 -0
- data/lib/pubid/bsi/renderer/expert_commentary.rb +9 -0
- data/lib/pubid/bsi/renderer/national_annex.rb +10 -0
- data/lib/pubid/bsi/transformer.rb +16 -0
- data/lib/pubid/bsi/version.rb +1 -1
- data/lib/pubid/bsi.rb +11 -1
- metadata +28 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 93e79aa30559f8e41d5b9cb74e4b3d5e808188a615d8f3311fadfdf6709d58e4
|
4
|
+
data.tar.gz: e544f503afb1e40eb7ba2cec6efa945357bac3e72234e0ffe05f5f87ce2c07ad
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7cde8daf524af5296c9ed7ace2eb757b47ddeec768eee945d47a7eb3d305e12fa1495d9a88497a63ee6895bd4e12cdaa49a0d578fb44599252739d3e975a4da2
|
7
|
+
data.tar.gz: 208451435217ad215d3209799d929d14329cc7d026e4d532667732a4900b227327190ea78fdf39ed8cdf57fb3903abed97223bfbe49308630cc3fa8de44189c8
|
@@ -3,30 +3,72 @@ require 'forwardable'
|
|
3
3
|
module Pubid::Bsi
|
4
4
|
module Identifier
|
5
5
|
class Base < Pubid::Core::Identifier::Base
|
6
|
-
attr_accessor :month, :supplement, :adopted
|
6
|
+
attr_accessor :month, :supplement, :adopted, :tracked_changes, :translation, :pdf
|
7
|
+
|
7
8
|
extend Forwardable
|
8
9
|
|
9
10
|
# @param month [Integer] document's month
|
10
11
|
# @param edition [String] document's edition version, e.g. "3.0", "1.0"
|
11
12
|
def initialize(publisher: "BS", month: nil, edition: nil,
|
12
|
-
supplement: nil, number: nil, adopted: nil,
|
13
|
+
supplement: nil, number: nil, adopted: nil,
|
14
|
+
expert_commentary: false, tracked_changes: false,
|
15
|
+
translation: nil, pdf: false, **opts)
|
16
|
+
|
13
17
|
super(**opts.merge(publisher: publisher, number: number))
|
14
18
|
@month = month if month
|
15
19
|
@edition = edition if edition
|
16
20
|
@supplement = supplement
|
17
21
|
@adopted = adopted
|
22
|
+
@tracked_changes = tracked_changes
|
23
|
+
@translation = translation
|
24
|
+
@pdf = pdf
|
18
25
|
end
|
19
26
|
|
20
27
|
class << self
|
28
|
+
def transform_hash(params)
|
29
|
+
params.map do |k, v|
|
30
|
+
get_transformer_class.new.apply(k => v.is_a?(Hash) ? transform_hash(v) : v)
|
31
|
+
end.inject({}, :merge)
|
32
|
+
end
|
33
|
+
|
21
34
|
# Use Identifier#create to resolve identifier's type class
|
22
35
|
def transform(params)
|
23
|
-
identifier_params = params
|
24
|
-
|
25
|
-
|
36
|
+
identifier_params = transform_hash(params)
|
37
|
+
|
38
|
+
if identifier_params[:national_annex]
|
39
|
+
return transform_national_annex(
|
40
|
+
identifier_params[:national_annex],
|
41
|
+
identifier_params.dup.tap { |h| h.delete(:national_annex) })
|
42
|
+
end
|
43
|
+
|
44
|
+
return transform_expert_commentary(identifier_params) if identifier_params[:expert_commentary]
|
45
|
+
|
46
|
+
return transform_collection(identifier_params) if identifier_params[:second_number]
|
26
47
|
|
27
48
|
Identifier.create(**identifier_params)
|
28
49
|
end
|
29
50
|
|
51
|
+
def transform_collection(params)
|
52
|
+
first_identifier_params =
|
53
|
+
params.reject { |k, _| %i[second_number year supplement].include?(k) }
|
54
|
+
second_identifier_params = first_identifier_params.dup
|
55
|
+
second_identifier_params[:number] = params[:second_number]
|
56
|
+
Collection.new(identifiers: [Identifier.create(**first_identifier_params),
|
57
|
+
Identifier.create(**second_identifier_params)],
|
58
|
+
**params.slice(:supplement, :year))
|
59
|
+
end
|
60
|
+
|
61
|
+
def transform_expert_commentary(base_params)
|
62
|
+
Identifier.create(type: :ec,
|
63
|
+
base: Identifier.create(**base_params))
|
64
|
+
end
|
65
|
+
|
66
|
+
def transform_national_annex(params, base_params)
|
67
|
+
Identifier.create(type: params[:type],
|
68
|
+
supplement: params[:supplement],
|
69
|
+
base: Identifier.create(**base_params))
|
70
|
+
end
|
71
|
+
|
30
72
|
def get_parser_class
|
31
73
|
Parser
|
32
74
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Pubid::Bsi
|
2
|
+
module Identifier
|
3
|
+
class Collection < Base
|
4
|
+
def_delegators 'Pubid::Bsi::Identifier::Collection', :type
|
5
|
+
|
6
|
+
attr_accessor :identifiers
|
7
|
+
|
8
|
+
def initialize(identifiers:, **args)
|
9
|
+
@identifiers = identifiers
|
10
|
+
super(publisher: nil, number: nil, **args)
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.type
|
14
|
+
{ key: :collection, title: "Collection" }
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_s
|
18
|
+
Renderer::Collection.new(get_params).render
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Pubid::Bsi
|
2
|
+
module Identifier
|
3
|
+
class ExpertCommentary < Base
|
4
|
+
attr_accessor :base
|
5
|
+
|
6
|
+
def_delegators 'Pubid::Bsi::Identifier::ExpertCommentary', :type
|
7
|
+
|
8
|
+
def initialize(base: nil, **opts)
|
9
|
+
super(**opts)
|
10
|
+
@base = base
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.type
|
14
|
+
{ key: :ec, title: "Expert Commentary", short: "ExComm" }
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.get_renderer_class
|
18
|
+
Renderer::ExpertCommentary
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Pubid::Bsi
|
2
|
+
module Identifier
|
3
|
+
class NationalAnnex < Base
|
4
|
+
attr_accessor :base
|
5
|
+
|
6
|
+
def_delegators 'Pubid::Bsi::Identifier::NationalAnnex', :type
|
7
|
+
|
8
|
+
def initialize(base: nil, **opts)
|
9
|
+
|
10
|
+
super(**opts)
|
11
|
+
@base = base
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.type
|
15
|
+
{ key: :na, title: "National Annex", short: "NA" }
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.get_renderer_class
|
19
|
+
Renderer::NationalAnnex
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/pubid/bsi/parser.rb
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
module Pubid::Bsi
|
2
2
|
class Parser < Pubid::Core::Parser
|
3
|
+
rule(:year) do
|
4
|
+
match('\d').repeat(2, 4).as(:year)
|
5
|
+
end
|
6
|
+
|
3
7
|
rule(:type) do
|
4
|
-
array_to_str(Identifier.config.types.map { |type| type.type[:short] }.compact).as(:type)
|
8
|
+
national_annex.maybe >> array_to_str(Identifier.config.types.map { |type| type.type[:short] }.compact).as(:type)
|
5
9
|
end
|
6
10
|
|
7
11
|
rule(:part) do
|
@@ -13,17 +17,46 @@ module Pubid::Bsi
|
|
13
17
|
end
|
14
18
|
|
15
19
|
rule(:supplement) do
|
16
|
-
(str("+") >> match("[AC]").as(:type) >> digits.as(:number) >> str(":") >> year).as(:supplement)
|
20
|
+
(str("+") >> match("[AC]").as(:type) >> digits.as(:number) >> (str(":") >> year).maybe).as(:supplement)
|
21
|
+
end
|
22
|
+
|
23
|
+
rule(:expert_commentary) do
|
24
|
+
space >> str("ExComm").as(:expert_commentary)
|
25
|
+
end
|
26
|
+
|
27
|
+
rule(:tracked_changes) do
|
28
|
+
str(" - TC").as(:tracked_changes)
|
29
|
+
end
|
30
|
+
|
31
|
+
rule(:national_annex) do
|
32
|
+
(str("NA").as(:type) >> supplement.maybe >> str(" to ").ignore).as(:national_annex)
|
33
|
+
end
|
34
|
+
|
35
|
+
rule(:translation) do
|
36
|
+
# space >> (match("[A-Z]").repeat(1).as(:translation) >> str(" TRANSLATION"))
|
37
|
+
space >> ((str("(") >> match("[A-Za-z]").repeat(1).as(:translation) >>
|
38
|
+
(space >> (str("Translation") | str("version"))).maybe >> str(")")) |
|
39
|
+
(match("[A-Z]").repeat(1).as(:translation) >> str(" TRANSLATION"))
|
40
|
+
)
|
41
|
+
end
|
42
|
+
|
43
|
+
rule(:pdf) do
|
44
|
+
space >> str("PDF").as(:pdf)
|
45
|
+
end
|
46
|
+
|
47
|
+
rule(:second_number) do
|
48
|
+
str("/") >> digits.as(:second_number)
|
17
49
|
end
|
18
50
|
|
19
51
|
rule(:identifier) do
|
20
52
|
str("BSI ").maybe >> type >> space >>
|
21
53
|
(
|
22
|
-
(digits.as(:number) >> part.maybe >> (space >> edition).maybe >>
|
23
|
-
(space? >> str(":") >> year >> (dash >> month_digits.as(:month)).maybe).maybe
|
24
|
-
|
25
|
-
|
26
|
-
|
54
|
+
(digits.as(:number) >> second_number.maybe >> part.maybe >> (space >> edition).maybe >>
|
55
|
+
(space? >> str(":") >> year >> (dash >> month_digits.as(:month)).maybe).maybe) |
|
56
|
+
# exclude expert_commentary and translation from adopted scope
|
57
|
+
(expert_commentary.absent? >> translation.absent? >> space? >>
|
58
|
+
match("[^+ ]").repeat(1)).repeat.as(:adopted)
|
59
|
+
) >> supplement.maybe >> expert_commentary.maybe >> tracked_changes.maybe >> translation.maybe >> pdf.maybe
|
27
60
|
end
|
28
61
|
|
29
62
|
rule(:root) { identifier }
|
@@ -3,9 +3,10 @@ module Pubid::Bsi::Renderer
|
|
3
3
|
TYPE = "".freeze
|
4
4
|
|
5
5
|
def render_identifier(params)
|
6
|
-
|
6
|
+
suffix = "%{supplement}%{tracked_changes}%{translation}%{pdf}" % params
|
7
|
+
return "%{publisher} %{adopted}#{suffix}" % params unless params[:adopted].to_s.empty?
|
7
8
|
|
8
|
-
"%{publisher} %{number}%{part}%{edition}%{year}%{month}
|
9
|
+
"%{publisher} %{number}%{part}%{edition}%{year}%{month}#{suffix}" % params
|
9
10
|
end
|
10
11
|
|
11
12
|
def render_month(month, _opts, _params)
|
@@ -19,5 +20,17 @@ module Pubid::Bsi::Renderer
|
|
19
20
|
def render_supplement(supplement, _opts, _params)
|
20
21
|
supplement.to_s
|
21
22
|
end
|
23
|
+
|
24
|
+
def render_tracked_changes(tracked_changes, _opts, _params)
|
25
|
+
" - TC" if tracked_changes
|
26
|
+
end
|
27
|
+
|
28
|
+
def render_translation(translation, _opts, _params)
|
29
|
+
" (#{translation})"
|
30
|
+
end
|
31
|
+
|
32
|
+
def render_pdf(pdf, _opts, _params)
|
33
|
+
" PDF" if pdf
|
34
|
+
end
|
22
35
|
end
|
23
36
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Pubid::Bsi::Renderer
|
2
|
+
class Collection < Pubid::Core::Renderer::Base
|
3
|
+
def render_identifier(params)
|
4
|
+
"%{identifiers}%{year}%{supplement}" % params
|
5
|
+
end
|
6
|
+
|
7
|
+
def render_supplement(supplement, _opts, _params)
|
8
|
+
supplement.to_s
|
9
|
+
end
|
10
|
+
|
11
|
+
def render_identifiers(identifiers, _opts, _params)
|
12
|
+
"#{identifiers.first}/" + identifiers[1..-1].map(&:number).join("/")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -4,6 +4,14 @@ require_relative "renderer/base"
|
|
4
4
|
module Pubid::Bsi
|
5
5
|
class Transformer < Parslet::Transform
|
6
6
|
rule(supplement: subtree(:supplement)) do |context|
|
7
|
+
if context[:supplement][:year] && context[:supplement][:year].to_s.length == 2
|
8
|
+
context[:supplement][:year] = if context[:supplement][:year].to_i > 50
|
9
|
+
"19#{context[:supplement][:year]}"
|
10
|
+
else
|
11
|
+
"20#{context[:supplement][:year]}"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
7
15
|
{ supplement:
|
8
16
|
case context[:supplement][:type]
|
9
17
|
when "A"
|
@@ -17,7 +25,15 @@ module Pubid::Bsi
|
|
17
25
|
rule(adopted: subtree(:adopted)) do |context|
|
18
26
|
{ adopted: Pubid::Iec::Identifier.parse(context[:adopted].to_s) }
|
19
27
|
rescue Pubid::Core::Errors::ParseError
|
28
|
+
begin
|
20
29
|
{ adopted: Pubid::Iso::Identifier.parse(context[:adopted].to_s) }
|
30
|
+
rescue Pubid::Core::Errors::ParseError
|
31
|
+
{ adopted: Pubid::Cen::Identifier.parse(context[:adopted].to_s) }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
rule(translation: simple(:translation)) do
|
36
|
+
{ translation: translation.to_s.downcase.capitalize }
|
21
37
|
end
|
22
38
|
end
|
23
39
|
end
|
data/lib/pubid/bsi/version.rb
CHANGED
data/lib/pubid/bsi.rb
CHANGED
@@ -8,6 +8,7 @@ end
|
|
8
8
|
require "pubid-core"
|
9
9
|
require "pubid-iso"
|
10
10
|
require "pubid-iec"
|
11
|
+
require "pubid-cen"
|
11
12
|
|
12
13
|
require_relative "bsi/errors"
|
13
14
|
require_relative "bsi/transformer"
|
@@ -19,6 +20,9 @@ require_relative "bsi/identifier/draft_document"
|
|
19
20
|
require_relative "bsi/identifier/flex"
|
20
21
|
require_relative "bsi/identifier/amendment"
|
21
22
|
require_relative "bsi/identifier/corrigendum"
|
23
|
+
require_relative "bsi/identifier/national_annex"
|
24
|
+
require_relative "bsi/identifier/expert_commentary"
|
25
|
+
require_relative "bsi/identifier/collection"
|
22
26
|
require_relative "bsi/renderer/base"
|
23
27
|
require_relative "bsi/renderer/publicly_available_specification"
|
24
28
|
require_relative "bsi/renderer/published_document"
|
@@ -26,6 +30,9 @@ require_relative "bsi/renderer/draft_document"
|
|
26
30
|
require_relative "bsi/renderer/flex"
|
27
31
|
require_relative "bsi/renderer/amendment"
|
28
32
|
require_relative "bsi/renderer/corrigendum"
|
33
|
+
require_relative "bsi/renderer/national_annex"
|
34
|
+
require_relative "bsi/renderer/expert_commentary"
|
35
|
+
require_relative "bsi/renderer/collection"
|
29
36
|
require_relative "bsi/parser"
|
30
37
|
require_relative "bsi/identifier"
|
31
38
|
|
@@ -37,7 +44,10 @@ config.types = [Pubid::Bsi::Identifier::BritishStandard,
|
|
37
44
|
Pubid::Bsi::Identifier::PublishedDocument,
|
38
45
|
Pubid::Bsi::Identifier::DraftDocument,
|
39
46
|
Pubid::Bsi::Identifier::Amendment,
|
40
|
-
Pubid::Bsi::Identifier::Corrigendum
|
47
|
+
Pubid::Bsi::Identifier::Corrigendum,
|
48
|
+
Pubid::Bsi::Identifier::NationalAnnex,
|
49
|
+
Pubid::Bsi::Identifier::ExpertCommentary,
|
50
|
+
Pubid::Bsi::Identifier::Collection]
|
41
51
|
config.type_names = {
|
42
52
|
bs: {
|
43
53
|
long: "British Standard",
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pubid-bsi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
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-04-
|
11
|
+
date: 2023-04-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -100,42 +100,56 @@ dependencies:
|
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: 1.
|
103
|
+
version: 1.8.0
|
104
104
|
type: :runtime
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: 1.
|
110
|
+
version: 1.8.0
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: pubid-iso
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: 0.5.
|
117
|
+
version: 0.5.2
|
118
118
|
type: :runtime
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: 0.5.
|
124
|
+
version: 0.5.2
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: pubid-iec
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
129
|
- - "~>"
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: 0.2.
|
131
|
+
version: 0.2.2
|
132
132
|
type: :runtime
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
136
|
- - "~>"
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: 0.2.
|
138
|
+
version: 0.2.2
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: pubid-cen
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: 0.2.1
|
146
|
+
type: :runtime
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 0.2.1
|
139
153
|
description: Library to generate, parse and manipulate ISO PubID.
|
140
154
|
email:
|
141
155
|
- open.source@ribose.com
|
@@ -154,17 +168,23 @@ files:
|
|
154
168
|
- lib/pubid/bsi/identifier/amendment.rb
|
155
169
|
- lib/pubid/bsi/identifier/base.rb
|
156
170
|
- lib/pubid/bsi/identifier/british_standard.rb
|
171
|
+
- lib/pubid/bsi/identifier/collection.rb
|
157
172
|
- lib/pubid/bsi/identifier/corrigendum.rb
|
158
173
|
- lib/pubid/bsi/identifier/draft_document.rb
|
174
|
+
- lib/pubid/bsi/identifier/expert_commentary.rb
|
159
175
|
- lib/pubid/bsi/identifier/flex.rb
|
176
|
+
- lib/pubid/bsi/identifier/national_annex.rb
|
160
177
|
- lib/pubid/bsi/identifier/publicly_available_specification.rb
|
161
178
|
- lib/pubid/bsi/identifier/published_document.rb
|
162
179
|
- lib/pubid/bsi/parser.rb
|
163
180
|
- lib/pubid/bsi/renderer/amendment.rb
|
164
181
|
- lib/pubid/bsi/renderer/base.rb
|
182
|
+
- lib/pubid/bsi/renderer/collection.rb
|
165
183
|
- lib/pubid/bsi/renderer/corrigendum.rb
|
166
184
|
- lib/pubid/bsi/renderer/draft_document.rb
|
185
|
+
- lib/pubid/bsi/renderer/expert_commentary.rb
|
167
186
|
- lib/pubid/bsi/renderer/flex.rb
|
187
|
+
- lib/pubid/bsi/renderer/national_annex.rb
|
168
188
|
- lib/pubid/bsi/renderer/publicly_available_specification.rb
|
169
189
|
- lib/pubid/bsi/renderer/published_document.rb
|
170
190
|
- lib/pubid/bsi/transformer.rb
|