pubid-bsi 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/pubid/bsi/identifier/base.rb +35 -5
- 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 +35 -6
- data/lib/pubid/bsi/renderer/base.rb +15 -2
- 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 +8 -1
- metadata +26 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8301f114cdb297b45e6c558830ebc198b8fe688c871610f09feb18a758213521
|
4
|
+
data.tar.gz: ad2e418836fea9ee47494c75a43006cc5d32d4ed795b39f39a5ff419db9c7383
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 68a2ab714684c24481819a353529a69bdb1f891395a9ce61915610d14860ad0b3b552e4bdf26e3ff84dbff7a17bd951631c19e8f260c15c2883479793fda2d1f
|
7
|
+
data.tar.gz: 4d8215a02e26eee04cd7240f2351ac089ab19117a6e100725045b6b79f555369ae4b8f242e27abbb661384b08e3fa0c0a6d80cb22334ff4e995b29d3602e34b1
|
@@ -3,30 +3,60 @@ 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]
|
26
45
|
|
27
46
|
Identifier.create(**identifier_params)
|
28
47
|
end
|
29
48
|
|
49
|
+
def transform_expert_commentary(base_params)
|
50
|
+
Identifier.create(type: :ec,
|
51
|
+
base: Identifier.create(**base_params))
|
52
|
+
end
|
53
|
+
|
54
|
+
def transform_national_annex(params, base_params)
|
55
|
+
Identifier.create(type: params[:type],
|
56
|
+
supplement: params[:supplement],
|
57
|
+
base: Identifier.create(**base_params))
|
58
|
+
end
|
59
|
+
|
30
60
|
def get_parser_class
|
31
61
|
Parser
|
32
62
|
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,42 @@ 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)
|
17
45
|
end
|
18
46
|
|
19
47
|
rule(:identifier) do
|
20
48
|
str("BSI ").maybe >> type >> space >>
|
21
49
|
(
|
22
50
|
(digits.as(:number) >> part.maybe >> (space >> edition).maybe >>
|
23
|
-
(space? >> str(":") >> year >> (dash >> month_digits.as(:month)).maybe).maybe
|
24
|
-
|
25
|
-
|
26
|
-
|
51
|
+
(space? >> str(":") >> year >> (dash >> month_digits.as(:month)).maybe).maybe) |
|
52
|
+
# exclude expert_commentary and translation from adopted scope
|
53
|
+
(expert_commentary.absent? >> translation.absent? >> space? >>
|
54
|
+
match("[^+ ]").repeat(1)).repeat.as(:adopted)
|
55
|
+
) >> supplement.maybe >> expert_commentary.maybe >> tracked_changes.maybe >> translation.maybe >> pdf.maybe
|
27
56
|
end
|
28
57
|
|
29
58
|
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
|
@@ -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,8 @@ 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"
|
22
25
|
require_relative "bsi/renderer/base"
|
23
26
|
require_relative "bsi/renderer/publicly_available_specification"
|
24
27
|
require_relative "bsi/renderer/published_document"
|
@@ -26,6 +29,8 @@ require_relative "bsi/renderer/draft_document"
|
|
26
29
|
require_relative "bsi/renderer/flex"
|
27
30
|
require_relative "bsi/renderer/amendment"
|
28
31
|
require_relative "bsi/renderer/corrigendum"
|
32
|
+
require_relative "bsi/renderer/national_annex"
|
33
|
+
require_relative "bsi/renderer/expert_commentary"
|
29
34
|
require_relative "bsi/parser"
|
30
35
|
require_relative "bsi/identifier"
|
31
36
|
|
@@ -37,7 +42,9 @@ config.types = [Pubid::Bsi::Identifier::BritishStandard,
|
|
37
42
|
Pubid::Bsi::Identifier::PublishedDocument,
|
38
43
|
Pubid::Bsi::Identifier::DraftDocument,
|
39
44
|
Pubid::Bsi::Identifier::Amendment,
|
40
|
-
Pubid::Bsi::Identifier::Corrigendum
|
45
|
+
Pubid::Bsi::Identifier::Corrigendum,
|
46
|
+
Pubid::Bsi::Identifier::NationalAnnex,
|
47
|
+
Pubid::Bsi::Identifier::ExpertCommentary]
|
41
48
|
config.type_names = {
|
42
49
|
bs: {
|
43
50
|
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.2.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-07 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
|
@@ -156,7 +170,9 @@ files:
|
|
156
170
|
- lib/pubid/bsi/identifier/british_standard.rb
|
157
171
|
- lib/pubid/bsi/identifier/corrigendum.rb
|
158
172
|
- lib/pubid/bsi/identifier/draft_document.rb
|
173
|
+
- lib/pubid/bsi/identifier/expert_commentary.rb
|
159
174
|
- lib/pubid/bsi/identifier/flex.rb
|
175
|
+
- lib/pubid/bsi/identifier/national_annex.rb
|
160
176
|
- lib/pubid/bsi/identifier/publicly_available_specification.rb
|
161
177
|
- lib/pubid/bsi/identifier/published_document.rb
|
162
178
|
- lib/pubid/bsi/parser.rb
|
@@ -164,7 +180,9 @@ files:
|
|
164
180
|
- lib/pubid/bsi/renderer/base.rb
|
165
181
|
- lib/pubid/bsi/renderer/corrigendum.rb
|
166
182
|
- lib/pubid/bsi/renderer/draft_document.rb
|
183
|
+
- lib/pubid/bsi/renderer/expert_commentary.rb
|
167
184
|
- lib/pubid/bsi/renderer/flex.rb
|
185
|
+
- lib/pubid/bsi/renderer/national_annex.rb
|
168
186
|
- lib/pubid/bsi/renderer/publicly_available_specification.rb
|
169
187
|
- lib/pubid/bsi/renderer/published_document.rb
|
170
188
|
- lib/pubid/bsi/transformer.rb
|