pubid-nist 0.1.8 → 0.2.2
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/exe/pubid-nist +2 -2
- data/lib/pubid/nist/errors.rb +2 -0
- data/lib/pubid/nist/{document.rb → identifier.rb} +68 -27
- data/lib/pubid/nist/nist_tech_pubs.rb +11 -12
- data/lib/pubid/nist/{document_parser.rb → parser.rb} +3 -2
- data/lib/pubid/nist/parsers/default.rb +16 -12
- data/lib/pubid/nist/parsers/nbs_circ.rb +3 -3
- data/lib/pubid/nist/parsers/nbs_hb.rb +1 -1
- data/lib/pubid/nist/parsers/nbs_lc.rb +2 -2
- data/lib/pubid/nist/parsers/nist_hb.rb +1 -0
- data/lib/pubid/nist/parsers/nist_ir.rb +3 -3
- data/lib/pubid/nist/parsers/nist_sp.rb +1 -1
- data/lib/pubid/nist/publisher.rb +2 -0
- data/lib/pubid/nist/renderer.rb +211 -0
- data/lib/pubid/nist/serie.rb +2 -0
- data/lib/pubid/nist/stage.rb +7 -7
- data/lib/pubid/nist/transformer.rb +43 -0
- data/lib/pubid/nist/update.rb +15 -0
- data/lib/pubid/nist/version.rb +1 -1
- data/lib/pubid/nist.rb +6 -3
- data/series.yaml +1 -1
- data/stages.yaml +16 -5
- data/update_codes.yaml +46 -12
- metadata +20 -18
- data/lib/pubid/nist/document_transform.rb +0 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ae5b75b8cb77b433b69d107ca44d6f828602da328419436c24c25968412d1719
|
4
|
+
data.tar.gz: 1377f4285c99bd9f1582f5ca1daff8ed79cf90543405bf43d4a8a9659d2ae21b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f0252ea5cf1e0f418d15b29a051dbaa203ff0765dcf1d45124b3fb123a5d0baaaa6aac5e2cca8de138e0fbf21f20d4b7aba0ecaf79de7fbc79164a119763d971
|
7
|
+
data.tar.gz: a8e8a4c490568753bd6233432825c7cf717dbd379c1eb56155082bdbe9ce74040365e9579f802c241ca6c98631da38ca7caa6ac6ff2687e6ada9003cc21e28de
|
data/exe/pubid-nist
CHANGED
@@ -84,9 +84,9 @@ class Pubid::Nist::CLI < Thor
|
|
84
84
|
|
85
85
|
unless code.empty?
|
86
86
|
if options[:format] == "string"
|
87
|
-
puts Pubid::Nist::
|
87
|
+
puts Pubid::Nist::Identifier.parse(code).to_s(options[:style].to_sym)
|
88
88
|
else
|
89
|
-
puts Pubid::Nist::
|
89
|
+
puts Pubid::Nist::Identifier.parse(code).to_json
|
90
90
|
end
|
91
91
|
end
|
92
92
|
rescue Pubid::Nist::Errors::ParseError
|
data/lib/pubid/nist/errors.rb
CHANGED
@@ -82,20 +82,21 @@ INSERT_DESC = {
|
|
82
82
|
}.freeze
|
83
83
|
|
84
84
|
module Pubid::Nist
|
85
|
-
class
|
85
|
+
class Identifier < Pubid::Core::Identifier::Base
|
86
86
|
attr_accessor :serie, :code, :revision, :publisher, :version, :volume,
|
87
|
-
:part, :addendum, :stage, :translation,
|
88
|
-
:edition, :supplement, :
|
87
|
+
:part, :addendum, :stage, :translation,
|
88
|
+
:edition, :supplement, :update,
|
89
89
|
:section, :appendix, :errata, :index, :insert
|
90
90
|
|
91
|
-
def initialize(publisher
|
92
|
-
edition_month: nil, edition_year: nil, edition_day: nil, **opts)
|
93
|
-
@publisher = publisher
|
94
|
-
@serie = serie
|
95
|
-
@code =
|
96
|
-
@stage = Stage.new(stage
|
91
|
+
def initialize(publisher: "NIST", serie:, number: nil, stage: nil, supplement: nil,
|
92
|
+
edition_month: nil, edition_year: nil, edition_day: nil, update: nil, **opts)
|
93
|
+
@publisher = publisher.is_a?(Publisher) ? publisher : Publisher.new(publisher: publisher)
|
94
|
+
@serie = serie.is_a?(Serie) ? serie : Serie.new(serie: serie)
|
95
|
+
@code = number
|
96
|
+
@stage = Stage.new(**stage) if stage
|
97
97
|
@supplement = (supplement.is_a?(Array) && "") || supplement
|
98
98
|
@edition = parse_edition(edition_month, edition_year, edition_day) if edition_month || edition_year
|
99
|
+
@update = update
|
99
100
|
opts.each { |key, value| send("#{key}=", value.to_s) }
|
100
101
|
end
|
101
102
|
|
@@ -142,32 +143,30 @@ module Pubid::Nist
|
|
142
143
|
|
143
144
|
def self.update_old_code(code)
|
144
145
|
UPDATE_CODES.each do |from, to|
|
145
|
-
code = code.gsub(from, to)
|
146
|
+
code = code.gsub(from.match?(/^\/.*\/$/) ? Regexp.new(from[1..-2]) : from, to)
|
146
147
|
end
|
147
148
|
code
|
148
149
|
end
|
149
150
|
|
150
|
-
def
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
151
|
+
# def to_s(format = :short)
|
152
|
+
# result = render_serie(format)
|
153
|
+
# result += " " unless format == :short || stage.nil?
|
154
|
+
# result += "#{stage&.to_s(format)}"\
|
155
|
+
# " #{code}#{render_part(format)}#{render_edition(format)}"\
|
156
|
+
# "#{render_localities(format)}"\
|
157
|
+
# "#{render_update(format)}#{render_translation(format)}"
|
158
|
+
# result = render_addendum(result, format)
|
159
|
+
#
|
160
|
+
# return result.gsub(" ", ".") if format == :mr
|
161
|
+
#
|
162
|
+
# result
|
163
|
+
# end
|
156
164
|
|
157
165
|
def to_s(format = :short)
|
158
|
-
|
159
|
-
result += " " unless format == :short || stage.nil?
|
160
|
-
result += "#{stage&.to_s(format)}"\
|
161
|
-
" #{code}#{render_part(format)}#{render_edition(format)}"\
|
162
|
-
"#{render_localities(format)}"\
|
163
|
-
"#{render_update(format)}#{render_translation(format)}"
|
164
|
-
result = render_addendum(result, format)
|
165
|
-
|
166
|
-
return result.gsub(" ", ".") if format == :mr
|
167
|
-
|
168
|
-
result
|
166
|
+
self.class.get_renderer_class.new(get_params).render(format: format)
|
169
167
|
end
|
170
168
|
|
169
|
+
|
171
170
|
def to_json(*args)
|
172
171
|
result = {
|
173
172
|
styles: {
|
@@ -282,5 +281,47 @@ module Pubid::Nist
|
|
282
281
|
"#{input}.add-1"
|
283
282
|
end
|
284
283
|
end
|
284
|
+
|
285
|
+
class << self
|
286
|
+
def create(**opts)
|
287
|
+
new(**opts)
|
288
|
+
end
|
289
|
+
|
290
|
+
# def transform(params)
|
291
|
+
# identifier_params = get_transformer_class.new.apply(params)
|
292
|
+
#
|
293
|
+
# Identifier.create(**identifier_params)
|
294
|
+
# end
|
295
|
+
def transform(params)
|
296
|
+
# run transform through each element,
|
297
|
+
# like running transformer.apply(number: 1) and transformer.apply(year: 1999)
|
298
|
+
# instead of running transformer on whole hash, like running transformer.apply({ number: 1, year: 1999 })
|
299
|
+
# where rule for number or year only will be not applied
|
300
|
+
# transformation only applied to rules matching the whole hash
|
301
|
+
|
302
|
+
identifier_params = params.map do |k, v|
|
303
|
+
get_transformer_class.new.apply({ k => v }, params)
|
304
|
+
end.inject({}, :merge)
|
305
|
+
|
306
|
+
|
307
|
+
# identifier_params = params.map do |k, v|
|
308
|
+
# get_transformer_class.new.apply({k => v}, params).to_a.first
|
309
|
+
# end.compact.to_h
|
310
|
+
#
|
311
|
+
new(**identifier_params)
|
312
|
+
end
|
313
|
+
|
314
|
+
def get_parser_class
|
315
|
+
Parser
|
316
|
+
end
|
317
|
+
|
318
|
+
def get_transformer_class
|
319
|
+
Transformer
|
320
|
+
end
|
321
|
+
|
322
|
+
def get_renderer_class
|
323
|
+
Renderer
|
324
|
+
end
|
325
|
+
end
|
285
326
|
end
|
286
327
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
require "relaton_nist/data_fetcher"
|
2
1
|
require "nokogiri"
|
3
2
|
require "open-uri"
|
4
3
|
require "lightly"
|
@@ -28,24 +27,24 @@ module Pubid::Nist
|
|
28
27
|
end
|
29
28
|
|
30
29
|
def convert(doc)
|
31
|
-
id = @converted_id[doc[:id]] ||= Pubid::Nist::
|
30
|
+
id = @converted_id[doc[:id]] ||= Pubid::Nist::Identifier.parse(doc[:id])
|
32
31
|
return id unless doc.key?(:doi)
|
33
32
|
|
34
33
|
begin
|
35
34
|
doi = @converted_doi[doc[:doi]] ||=
|
36
|
-
Pubid::Nist::
|
37
|
-
rescue Errors::ParseError
|
35
|
+
Pubid::Nist::Identifier.parse(doc[:doi])
|
36
|
+
rescue Pubid::Core::Errors::ParseError
|
38
37
|
return id
|
39
38
|
end
|
40
39
|
# return more complete pubid
|
41
40
|
id.merge(doi)
|
42
|
-
rescue Errors::ParseError
|
43
|
-
@converted_doi[doc[:doi]] ||= Pubid::Nist::
|
41
|
+
rescue Pubid::Core::Errors::ParseError
|
42
|
+
@converted_doi[doc[:doi]] ||= Pubid::Nist::Identifier.parse(doc[:doi])
|
44
43
|
end
|
45
44
|
|
46
45
|
def parse_docid(doc)
|
47
46
|
id = doc.at("publisher_item/item_number", "publisher_item/identifier")
|
48
|
-
|
47
|
+
&.text&.sub(%r{^/}, "")
|
49
48
|
doi = doc.at("doi_data/doi").text.gsub("10.6028/", "")
|
50
49
|
title = doc.at("titles/title").text
|
51
50
|
title += " #{doc.at('titles/subtitle').text}" if doc.at("titles/subtitle")
|
@@ -57,13 +56,13 @@ module Pubid::Nist
|
|
57
56
|
when "10.6028/NIST.HB.150-10-1995" then id.sub!(/150-10$/, "150-10-1995")
|
58
57
|
end
|
59
58
|
|
60
|
-
{ id: id, doi: doi, title: title }
|
59
|
+
{ id: id || doi, doi: doi, title: title }
|
61
60
|
end
|
62
61
|
|
63
62
|
def comply_with_pubid
|
64
63
|
fetch.select do |doc|
|
65
64
|
convert(doc).to_s == doc[:id]
|
66
|
-
rescue Errors::ParseError
|
65
|
+
rescue Pubid::Core::Errors::ParseError
|
67
66
|
false
|
68
67
|
end
|
69
68
|
end
|
@@ -71,7 +70,7 @@ module Pubid::Nist
|
|
71
70
|
def different_with_pubid
|
72
71
|
fetch.reject do |doc|
|
73
72
|
convert(doc).to_s == doc[:id]
|
74
|
-
rescue Errors::ParseError
|
73
|
+
rescue Pubid::Core::Errors::ParseError
|
75
74
|
true
|
76
75
|
end
|
77
76
|
end
|
@@ -79,7 +78,7 @@ module Pubid::Nist
|
|
79
78
|
def parse_fail_with_pubid
|
80
79
|
fetch.select do |doc|
|
81
80
|
convert(doc).to_s && false
|
82
|
-
rescue Errors::ParseError
|
81
|
+
rescue Pubid::Core::Errors::ParseError
|
83
82
|
true
|
84
83
|
end
|
85
84
|
end
|
@@ -95,7 +94,7 @@ module Pubid::Nist
|
|
95
94
|
finalPubId: final_doc.to_s,
|
96
95
|
mr: final_doc.to_s(:mr),
|
97
96
|
}
|
98
|
-
rescue Errors::ParseError
|
97
|
+
rescue Pubid::Core::Errors::ParseError
|
99
98
|
{
|
100
99
|
id: doc[:id],
|
101
100
|
doi: doc[:doi],
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Pubid::Nist
|
2
|
-
class
|
2
|
+
class Parser < Parslet::Parser
|
3
3
|
attr_accessor :parsed
|
4
4
|
|
5
5
|
rule(:series) do
|
@@ -24,7 +24,8 @@ module Pubid::Nist
|
|
24
24
|
SERIES["mr"].key(parsed[:series_mr].to_s)
|
25
25
|
end
|
26
26
|
parser = find_parser(series)
|
27
|
-
parser.new.parse(parsed[:remaining].to_s)
|
27
|
+
parsed = parser.new.parse(parsed[:remaining].to_s)
|
28
|
+
parsed.is_a?(Array) ? parsed << { series: series } : parsed.merge({ series: series })
|
28
29
|
end
|
29
30
|
|
30
31
|
def find_parser(series)
|
@@ -1,19 +1,16 @@
|
|
1
1
|
module Pubid::Nist
|
2
2
|
module Parsers
|
3
|
-
class Default <
|
3
|
+
class Default < Pubid::Core::Parser
|
4
4
|
rule(:identifier) do
|
5
|
-
|
5
|
+
old_stage.maybe >> (str(" ") | str(".")) >> report_number >>
|
6
|
+
parts.repeat >> draft.maybe >> stage.maybe >> translation.maybe
|
6
7
|
end
|
7
8
|
|
8
|
-
rule(:digits) { match('\d').repeat(1) }
|
9
|
-
rule(:letters) { match('[A-Za-z]').repeat(1) }
|
10
|
-
rule(:year_digits) { match('\d').repeat(4, 4) }
|
11
9
|
rule(:month_letters) { match('[A-Za-z]').repeat(3, 3) }
|
12
10
|
rule(:number_suffix) { match("[aA-Z]") }
|
13
|
-
# rule(:small)
|
14
11
|
|
15
12
|
rule(:parts) do
|
16
|
-
(edition | revision | version | volume | part | update | addendum |
|
13
|
+
(edition | revision | version | volume | part | update | addendum |
|
17
14
|
supplement | errata | index | insert | section | appendix)
|
18
15
|
end
|
19
16
|
|
@@ -37,10 +34,17 @@ module Pubid::Nist
|
|
37
34
|
(str("insert") | str("ins")).as(:insert)
|
38
35
|
end
|
39
36
|
|
37
|
+
rule(:old_stage) do
|
38
|
+
(str("(") >> (array_to_str(STAGES["id"].keys.map(&:upcase)).as(:id) >>
|
39
|
+
array_to_str(STAGES["type"].keys.map(&:upcase)).as(:type)).as(:stage) >> str(")"))
|
40
|
+
end
|
41
|
+
|
40
42
|
rule(:stage) do
|
41
|
-
(
|
42
|
-
|
43
|
-
|
43
|
+
(space >> (array_to_str(STAGES["id"].keys).as(:id) >> array_to_str(STAGES["type"].keys).as(:type)).as(:stage))
|
44
|
+
end
|
45
|
+
|
46
|
+
rule(:draft) do
|
47
|
+
space >> str("(Draft)").as(:draft)
|
44
48
|
end
|
45
49
|
|
46
50
|
rule(:digits_with_suffix) do
|
@@ -79,12 +83,12 @@ module Pubid::Nist
|
|
79
83
|
end
|
80
84
|
|
81
85
|
rule(:update) do
|
82
|
-
(str("/Upd") | str("/upd")) >> digits.as(:
|
86
|
+
(str("/Upd") | str("/upd")) >> (digits.as(:number) >> str("-") >> digits.as(:year)).as(:update)
|
83
87
|
end
|
84
88
|
|
85
89
|
rule(:translation) do
|
86
90
|
(str("(") >> match('\w').repeat(3, 3).as(:translation) >> str(")")) |
|
87
|
-
(str(".") >> match('\w').repeat(3, 3).as(:translation))
|
91
|
+
((str(".") | space) >> match('\w').repeat(3, 3).as(:translation))
|
88
92
|
end
|
89
93
|
|
90
94
|
rule(:edition_prefixes) { str("e") }
|
@@ -2,7 +2,7 @@ module Pubid::Nist
|
|
2
2
|
module Parsers
|
3
3
|
class NbsCirc < Default
|
4
4
|
rule(:revision) do
|
5
|
-
((str("rev") >> (
|
5
|
+
((str("rev") >> (words >> year_digits).as(:revision)) |
|
6
6
|
(str("r") >> digits.as(:revision))
|
7
7
|
)
|
8
8
|
end
|
@@ -13,8 +13,8 @@ module Pubid::Nist
|
|
13
13
|
|
14
14
|
rule(:edition) do
|
15
15
|
(str("sup") >> str("").as(:supplement) >>
|
16
|
-
(
|
17
|
-
((str("e") | str("-")) >> (digits.as(:edition) |
|
16
|
+
(words.as(:edition_month) >> year_digits.as(:edition_year))) |
|
17
|
+
((str("e") | str("-")) >> (digits.as(:edition) | words.as(:edition_month) >> year_digits.as(:edition_year)))
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
@@ -13,7 +13,7 @@ module Pubid::Nist
|
|
13
13
|
|
14
14
|
rule(:edition) do
|
15
15
|
(str("supp") >> str("").as(:supplement) >>
|
16
|
-
(
|
16
|
+
(words.as(:edition_month) >> year_digits.as(:edition_year)) |
|
17
17
|
str("e") >> year_digits.as(:edition_year)
|
18
18
|
)
|
19
19
|
end
|
@@ -3,13 +3,13 @@ module Pubid::Nist
|
|
3
3
|
class NbsLc < Default
|
4
4
|
rule(:supplement) do
|
5
5
|
(str("supp") | str("sup")) >>
|
6
|
-
((str("").as(:supplement) >> digits.as(:
|
6
|
+
((str("").as(:supplement) >> (digits.as(:month) >> str("/") >> digits.as(:year)).as(:update)) |
|
7
7
|
match('\d').repeat.as(:supplement))
|
8
8
|
end
|
9
9
|
|
10
10
|
rule(:revision) do
|
11
11
|
str("r") >>
|
12
|
-
((digits.as(:
|
12
|
+
((digits.as(:month) >> str("/") >> digits.as(:year)).as(:update) |
|
13
13
|
digits.as(:revision))
|
14
14
|
end
|
15
15
|
|
@@ -8,7 +8,7 @@ module Pubid::Nist
|
|
8
8
|
end
|
9
9
|
|
10
10
|
rule(:report_number) do
|
11
|
-
(
|
11
|
+
(digits.as(:first_report_number) >>
|
12
12
|
str("-") >> year_digits.as(:edition_year)) |
|
13
13
|
first_report_number >> (str("-") >>
|
14
14
|
((digits | match("[aAB]") | str("CAS") | str("FRA")) >>
|
@@ -18,8 +18,8 @@ module Pubid::Nist
|
|
18
18
|
|
19
19
|
rule(:revision) do
|
20
20
|
str("r") >>
|
21
|
-
((digits.as(:
|
22
|
-
(month_letters.as(:
|
21
|
+
((digits.as(:month) >> str("/") >> digits.as(:year)).as(:update) |
|
22
|
+
(month_letters.as(:month) >> year_digits.as(:year)).as(:update) |
|
23
23
|
digits.as(:revision) |
|
24
24
|
str("").as(:revision))
|
25
25
|
end
|
@@ -2,7 +2,7 @@ module Pubid::Nist
|
|
2
2
|
module Parsers
|
3
3
|
class NistSp < Default
|
4
4
|
rule(:version) do
|
5
|
-
((str("ver") >> (digits >> (str(".") >> digits).
|
5
|
+
(((str("ver") | str(" Ver. ")) >> (digits >> (str(".") >> digits).repeat).as(:version)) |
|
6
6
|
(str("v") >>
|
7
7
|
(match('\d') >> str(".") >> match('\d') >> (str(".") >> match('\d')).maybe).as(:version)))
|
8
8
|
end
|
data/lib/pubid/nist/publisher.rb
CHANGED
@@ -0,0 +1,211 @@
|
|
1
|
+
module Pubid::Nist
|
2
|
+
class Renderer < Pubid::Core::Renderer::Base
|
3
|
+
def render_base_identifier(**opts)
|
4
|
+
prerender(**opts)
|
5
|
+
|
6
|
+
render_identifier(@prerendered_params, opts)
|
7
|
+
end
|
8
|
+
|
9
|
+
def render_identifier(params, opts)
|
10
|
+
result = case opts[:format]
|
11
|
+
when :short, :mr
|
12
|
+
"%{serie}%{code}%{volume}%{part}%{edition}%{revision}%{version}"\
|
13
|
+
"%{supplement}%{section}%{appendix}%{errata}%{index}%{insert}%{update}"\
|
14
|
+
"%{stage}%{translation}" % params
|
15
|
+
else
|
16
|
+
"%{serie}%{stage}%{code}%{volume}%{part}%{edition}%{revision}%{version}"\
|
17
|
+
"%{supplement}%{section}%{appendix}%{errata}%{index}%{insert}%{update}"\
|
18
|
+
"%{translation}" % params
|
19
|
+
end
|
20
|
+
|
21
|
+
if params[:addendum] && !params[:addendum].empty?
|
22
|
+
case opts[:format]
|
23
|
+
when :long
|
24
|
+
"Addendum to #{result}"
|
25
|
+
when :abbrev
|
26
|
+
"Add. to #{result}"
|
27
|
+
when :short
|
28
|
+
"#{result} Add."
|
29
|
+
when :mr
|
30
|
+
"#{result}.add-1"
|
31
|
+
end
|
32
|
+
else
|
33
|
+
result
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def render_serie(serie, opts, params)
|
38
|
+
if serie.to_s(opts[:format]).include?(params[:publisher].to_s(opts[:format]))
|
39
|
+
return serie.to_s(opts[:format])
|
40
|
+
end
|
41
|
+
|
42
|
+
"#{params[:publisher].to_s(opts[:format])} #{serie.to_s(opts[:format])}"
|
43
|
+
end
|
44
|
+
|
45
|
+
def render_code(code, opts, _params)
|
46
|
+
(opts[:format] == :mr ? "." : " ") + code.to_s
|
47
|
+
end
|
48
|
+
|
49
|
+
def render_edition(edition, opts, _params)
|
50
|
+
case opts[:format]
|
51
|
+
when :long
|
52
|
+
" Edition "
|
53
|
+
when :abbrev
|
54
|
+
" Ed. "
|
55
|
+
when :short, :mr
|
56
|
+
"e"
|
57
|
+
end + edition.to_s
|
58
|
+
end
|
59
|
+
|
60
|
+
def render_revision(revision, opts, _params)
|
61
|
+
case opts[:format]
|
62
|
+
when :long
|
63
|
+
", Revision "
|
64
|
+
when :abbrev
|
65
|
+
", Rev. "
|
66
|
+
when :short, :mr
|
67
|
+
"r"
|
68
|
+
end + (revision == '' ? '1' : revision).to_s
|
69
|
+
end
|
70
|
+
|
71
|
+
def render_version(version, opts, _params)
|
72
|
+
case opts[:format]
|
73
|
+
when :long
|
74
|
+
", Version "
|
75
|
+
when :abbrev
|
76
|
+
", Ver. "
|
77
|
+
when :short, :mr
|
78
|
+
"ver"
|
79
|
+
end + version
|
80
|
+
end
|
81
|
+
|
82
|
+
def render_volume(volume, opts, params)
|
83
|
+
case opts[:format]
|
84
|
+
when :long
|
85
|
+
", Volume "
|
86
|
+
when :abbrev
|
87
|
+
", Vol. "
|
88
|
+
when :short
|
89
|
+
params[:code] ? "v" : " v"
|
90
|
+
when :mr
|
91
|
+
params[:code] ? "v" : ".v"
|
92
|
+
end + volume
|
93
|
+
end
|
94
|
+
|
95
|
+
def render_update(update, opts, _params)
|
96
|
+
update_text = update.number.to_s
|
97
|
+
update_text += "-#{update.year}" if update.year
|
98
|
+
update_text += sprintf("%02d", update.month) if update.month
|
99
|
+
|
100
|
+
case opts[:format]
|
101
|
+
when :long
|
102
|
+
" Update #{update_text}"
|
103
|
+
when :abbrev
|
104
|
+
" Upd. #{update_text}"
|
105
|
+
when :short
|
106
|
+
"/Upd#{update_text}"
|
107
|
+
when :mr
|
108
|
+
".u#{update_text}"
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def render_translation(translation, opts, _params)
|
113
|
+
case opts[:format]
|
114
|
+
when :long, :abbrev
|
115
|
+
" (#{translation.upcase})"
|
116
|
+
when :mr
|
117
|
+
".#{translation}"
|
118
|
+
when :short
|
119
|
+
" #{translation}"
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
def render_part(part, opts, _params)
|
124
|
+
case opts[:format]
|
125
|
+
when :long
|
126
|
+
" Part "
|
127
|
+
when :abbrev
|
128
|
+
" Pt. "
|
129
|
+
when :short, :mr
|
130
|
+
"pt"
|
131
|
+
end + part
|
132
|
+
end
|
133
|
+
|
134
|
+
def render_supplement(supplement, opts, _params)
|
135
|
+
case opts[:format]
|
136
|
+
when :long
|
137
|
+
" Supplement "
|
138
|
+
when :abbrev
|
139
|
+
" Suppl. "
|
140
|
+
when :short, :mr
|
141
|
+
"sup"
|
142
|
+
end + supplement
|
143
|
+
end
|
144
|
+
|
145
|
+
def render_appendix(appendix, opts, _params)
|
146
|
+
case opts[:format]
|
147
|
+
when :long
|
148
|
+
" Appendix "
|
149
|
+
when :abbrev
|
150
|
+
" App. "
|
151
|
+
when :short, :mr
|
152
|
+
"app"
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
def render_section(section, opts, _params)
|
157
|
+
case opts[:format]
|
158
|
+
when :long
|
159
|
+
" Section "
|
160
|
+
when :abbrev
|
161
|
+
" Sec. "
|
162
|
+
when :short, :mr
|
163
|
+
"sec"
|
164
|
+
end + section
|
165
|
+
end
|
166
|
+
|
167
|
+
def render_errata(errata, opts, _params)
|
168
|
+
case opts[:format]
|
169
|
+
when :long
|
170
|
+
" Errata "
|
171
|
+
when :abbrev
|
172
|
+
" Err. "
|
173
|
+
when :short, :mr
|
174
|
+
"err"
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
def render_index(index, opts, _params)
|
179
|
+
case opts[:format]
|
180
|
+
when :long
|
181
|
+
" Index "
|
182
|
+
when :abbrev
|
183
|
+
" Index. "
|
184
|
+
when :short, :mr
|
185
|
+
"indx"
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
def render_insert(insert, opts, _params)
|
190
|
+
case opts[:format]
|
191
|
+
when :long
|
192
|
+
" Insert "
|
193
|
+
when :abbrev
|
194
|
+
" Ins. "
|
195
|
+
when :short, :mr
|
196
|
+
"ins"
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
def render_stage(stage, opts, _params)
|
201
|
+
case opts[:format]
|
202
|
+
when :mr
|
203
|
+
"."
|
204
|
+
when :short
|
205
|
+
""
|
206
|
+
else
|
207
|
+
" "
|
208
|
+
end + stage.to_s(opts[:format])
|
209
|
+
end
|
210
|
+
end
|
211
|
+
end
|
data/lib/pubid/nist/serie.rb
CHANGED
data/lib/pubid/nist/stage.rb
CHANGED
@@ -2,10 +2,10 @@ STAGES = YAML.load_file(File.join(File.dirname(__FILE__), "../../../stages.yaml"
|
|
2
2
|
|
3
3
|
module Pubid::Nist
|
4
4
|
class Stage
|
5
|
-
attr_accessor :
|
5
|
+
attr_accessor :id, :type
|
6
6
|
|
7
|
-
def initialize(
|
8
|
-
@
|
7
|
+
def initialize(id:, type:)
|
8
|
+
@id, @type = id.to_s.downcase, type.to_s.downcase
|
9
9
|
end
|
10
10
|
|
11
11
|
def to_s(format = :short)
|
@@ -13,16 +13,16 @@ module Pubid::Nist
|
|
13
13
|
|
14
14
|
case format
|
15
15
|
when :short
|
16
|
-
"
|
16
|
+
" #{@id}#{@type}"
|
17
17
|
when :mr
|
18
|
-
@
|
18
|
+
"#{@id}#{@type}"
|
19
19
|
else
|
20
|
-
STAGES[@
|
20
|
+
"#{STAGES['id'][@id]} #{STAGES['type'][@type]}"
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
24
|
def nil?
|
25
|
-
@
|
25
|
+
@id.nil? && @type.nil?
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Pubid::Nist
|
2
|
+
class Transformer < Parslet::Transform
|
3
|
+
rule(first_report_number: subtree(:first_report_number)) do |context|
|
4
|
+
{ number:
|
5
|
+
context.values_at(:first_report_number, :second_report_number).compact.join("-").upcase }
|
6
|
+
end
|
7
|
+
|
8
|
+
rule(report_number: subtree(:report_number)) do |context|
|
9
|
+
{ number: context[:report_number] }
|
10
|
+
end
|
11
|
+
|
12
|
+
rule(series: subtree(:series)) do |context|
|
13
|
+
{ serie: Serie.new(serie: context[:series].to_s.gsub(".", " ")),
|
14
|
+
publisher: Publisher.parse(context[:series]) }
|
15
|
+
end
|
16
|
+
|
17
|
+
# remove :second_report_number from output
|
18
|
+
rule(second_report_number: simple(:second_report_number)) do
|
19
|
+
{}
|
20
|
+
end
|
21
|
+
|
22
|
+
rule(parts: subtree(:parts)) do |context|
|
23
|
+
context[:parts].inject({}, :merge)
|
24
|
+
end
|
25
|
+
|
26
|
+
rule(update: subtree(:update)) do |context|
|
27
|
+
{ update: Update.new(**context[:update]) }
|
28
|
+
end
|
29
|
+
|
30
|
+
rule(stage: subtree(:stage)) do |context|
|
31
|
+
case context[:stage][:id]
|
32
|
+
when "1"
|
33
|
+
{ stage: { id: "i", type: context[:stage][:type] } }
|
34
|
+
else
|
35
|
+
{ stage: context[:stage] }
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
rule(draft: subtree(:draft)) do |context|
|
40
|
+
{ stage: { id: "i", type: "prd"} }
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Pubid::Nist
|
2
|
+
class Update
|
3
|
+
attr_accessor :number, :year, :month
|
4
|
+
|
5
|
+
def initialize(number: nil, year: nil, month: nil)
|
6
|
+
@number = number || 1
|
7
|
+
@year = year&.to_s&.length == 2 ? "19#{year}" : year
|
8
|
+
|
9
|
+
if month
|
10
|
+
date = Date.parse("01/#{month}/#{@year}")
|
11
|
+
@month = date.month
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/pubid/nist/version.rb
CHANGED
data/lib/pubid/nist.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require "yaml"
|
4
4
|
require "parslet"
|
5
|
+
require "pubid-core"
|
5
6
|
|
6
7
|
module Pubid
|
7
8
|
module Nist
|
@@ -11,8 +12,10 @@ end
|
|
11
12
|
|
12
13
|
require_relative "nist/serie"
|
13
14
|
require_relative "nist/parsers/default"
|
14
|
-
require_relative "nist/
|
15
|
-
require_relative "nist/
|
15
|
+
require_relative "nist/update"
|
16
|
+
require_relative "nist/transformer"
|
17
|
+
require_relative "nist/parser"
|
18
|
+
require_relative "nist/renderer"
|
16
19
|
|
17
20
|
Dir[File.join(__dir__, 'nist/parsers', '*.rb')].each do |file|
|
18
21
|
require file
|
@@ -25,7 +28,7 @@ end.map do |parser_class|
|
|
25
28
|
[parser.name.split("::").last.gsub(/(.)([A-Z])/, '\1 \2').upcase, parser]
|
26
29
|
end.to_h
|
27
30
|
|
28
|
-
require_relative "nist/
|
31
|
+
require_relative "nist/identifier"
|
29
32
|
require_relative "nist/publisher"
|
30
33
|
require_relative "nist/stage"
|
31
34
|
require_relative "nist/errors"
|
data/series.yaml
CHANGED
data/stages.yaml
CHANGED
@@ -1,5 +1,16 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
id:
|
2
|
+
i: Initial
|
3
|
+
F: Final
|
4
|
+
"1": Initial
|
5
|
+
"2": Second
|
6
|
+
"3": Third
|
7
|
+
"4": Fourth
|
8
|
+
"5": Fifth
|
9
|
+
"6": Sixth
|
10
|
+
"7": Seventh
|
11
|
+
"8": Eight
|
12
|
+
"9": Ninth
|
13
|
+
type:
|
14
|
+
pd: Public Draft
|
15
|
+
wd: Work-in-Progress Draft
|
16
|
+
prd: Preliminary Draft
|
data/update_codes.yaml
CHANGED
@@ -13,15 +13,19 @@ NIST CSWP: CSRC White Paper
|
|
13
13
|
NIST SP 800-56ar: NIST SP 800-56Ar1
|
14
14
|
NIST.LCIRC: NIST.LC
|
15
15
|
NBS.LCIRC: NBS.LC
|
16
|
+
NIST LCIRC: NIST LC
|
17
|
+
NBS LCIRC: NBS LC
|
16
18
|
NIST SP 800-57Pt3r1: NIST SP 800-57pt3r1
|
17
19
|
NISTIR: NIST IR
|
18
20
|
NIST FIPS: FIPS PUB
|
19
21
|
NIST.CSWP.01162020pt: NIST.CSWP.01162020(por)
|
20
|
-
NBS FIPS 11-1-Sep30
|
21
|
-
FIPS
|
22
|
-
FIPS PUB 54-1-
|
22
|
+
/^NBS FIPS 11-1-Sep30$/: NBS FIPS 11-1-Sep30/1977
|
23
|
+
/^NBS FIPS 89-Sep1$/: NBS FIPS 89-Sep1981
|
24
|
+
/^FIPS PUB 54-1-Jan15$/: FIPS PUB 54-1
|
25
|
+
/^FIPS PUB 54-1-Jan17$/: FIPS PUB 54-1-Jan17/1991
|
23
26
|
NBS CRPL c4-4: NBS CRPL 4-4
|
24
|
-
NIST AMS 300-8r1 (February 2021 update): NIST AMS 300-8r1/Upd1-
|
27
|
+
NIST AMS 300-8r1 (February 2021 update): NIST AMS 300-8r1/Upd1-202102
|
28
|
+
NIST AMS 300-8r1/upd: NIST AMS 300-8r1/Upd1-202102
|
25
29
|
NIST IR 8115r1-upd: NIST IR 8115r1/Upd1-202103
|
26
30
|
NIST SP 500-300-upd: NIST SP 500-300/Upd1-202105
|
27
31
|
NIST TN 2150-upd: NIST TN 2150/Upd1-202102
|
@@ -32,6 +36,7 @@ NBS.HB.28p11969: NBS.HB.28-1969pt1
|
|
32
36
|
NIST HB 105-1-1990: NIST HB 105-1r1990
|
33
37
|
NBS.FIPS.100-1-1991: NIST.FIPS.100-1-1991
|
34
38
|
NBS.LC.1088sp: NBS.LC.1088.spa
|
39
|
+
NBS LC 1088sp: NBS LC 1088 spa
|
35
40
|
#NBS.LC.145r11/1925: NBS.LC.145/Upd1-192511
|
36
41
|
#NBS.LC.118sup12/1926: NBS.LC.118sup/Upd1-192612
|
37
42
|
NIST SP 955 Suppl.: NIST SP 955sup
|
@@ -41,18 +46,47 @@ NIST FIPS 54-Jan15: NIST FIPS 54
|
|
41
46
|
NBS report ;: NBS RPT
|
42
47
|
NBS TN 467p1adde1: NBS TN 467pt1-add
|
43
48
|
NIST SP 1011-II-1.0: NIST SP 1011v2ver1.0
|
49
|
+
NIST SP 1011-II-1 0: NIST SP 1011v2ver1.0
|
44
50
|
NIST SP 1011-I-2.0: NIST SP 1011v1ver2.0
|
51
|
+
NIST SP 1011-I-2 0: NIST SP 1011v1ver2.0
|
45
52
|
NIST SP 500-281-v1.0: NIST SP 500-281v1.0
|
46
53
|
NIST IR 8259Aes: NIST IR 8259A(spa)
|
47
54
|
NIST IR 8259Apt: NIST IR 8259A(por)
|
48
55
|
NIST IR 8211-upd: NIST IR 8211/Upd1-2021
|
49
56
|
NIST IR 8115r1/upd: NIST IR 8115r1/Upd1-2021
|
50
57
|
NBS CS v: NBS CSM v
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
58
|
+
NIST SP 800-57p1r2006: NIST SP 800-57pt1r1
|
59
|
+
NIST SP 800-57p1r2007: NIST SP 800-57pt1r2
|
60
|
+
NIST SP 500-268v1 1: NIST SP 500-268v1.1
|
61
|
+
NIST SP 500-270v1 1: NIST SP 500-270v1.1
|
62
|
+
NIST SP 500-280v2 1: NIST SP 500-280v2.1
|
63
|
+
NIST SP 500-281-v1 0: NIST SP 500-281v1.0
|
64
|
+
NIST SP 800-63v1 0 1: NIST SP 800-63v1.0.1
|
65
|
+
NIST SP 800-63v1 0 2: NIST SP 800-63v1.0.2
|
66
|
+
NIST SP 955 Suppl: NIST SP 955sup
|
67
|
+
NIST SP 984 4: NIST SP 984-4
|
68
|
+
NISTPUB 0413171251: NIST TN 1648-2009
|
69
|
+
NIST IR 8286C-draft: NIST IR 8286C (Draft)
|
70
|
+
NIST SP 800-140Cr1-draft2: NIST SP 800-140Cr1 2pd
|
71
|
+
NIST SP 800-140Dr1-draft2: NIST SP 800-140Dr1 2pd
|
72
|
+
NIST SP 800-219-draft: NIST SP 800-219 (Draft)
|
73
|
+
NIST IR 8270-draft2: NIST IR 8270 2pd
|
74
|
+
NIST HB 135e2022-upd1: NIST HB 135e2022/Upd1-202205
|
75
|
+
NIST SP 1900-206-upd1: NIST SP 1900-206/Upd1-202202
|
76
|
+
NIST TN 2207-upd1: NIST TN 2207/Upd1-202205
|
77
|
+
NIST IR 8290-upd1: NIST IR 8290/Upd1-202205
|
78
|
+
NIST IR 8413-upd1: NIST IR 8413/Upd1-202207
|
79
|
+
NIST IR 85-3273-37-upd1: NIST IR 85-3273-37/Upd1-202205
|
80
|
+
NIST IR 8352-draft: NIST IR 8352 (Draft)
|
81
|
+
NIST SP 1273-draft: NIST SP 1273 (Draft)
|
82
|
+
NIST IR 8323-draft: NIST IR 8323 (Draft)
|
83
|
+
/NBS CRPL-F-B(?=\d+)/: "NBS CRPL-F-B "
|
84
|
+
/NBS[.\s]CS[.\s]e/: "NBS CS-E "
|
85
|
+
NBS NSRDS: NSRDS-NBS
|
86
|
+
nist ir: NIST IR
|
87
|
+
/(?<=\d)es/: (spa)
|
88
|
+
/(?<=\d)chi/: (zho)
|
89
|
+
/(?<=\d)viet/: (vie)
|
90
|
+
/(?<=\d)port/: (por)
|
91
|
+
/(?<=\d)(pt)(?!\d)/: (por)
|
92
|
+
/(?<=\d)id/: (ind)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pubid-nist
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-09-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -67,7 +67,7 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: nokogiri
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - ">="
|
@@ -81,7 +81,7 @@ dependencies:
|
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: thor
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - ">="
|
@@ -95,7 +95,7 @@ dependencies:
|
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: lightly
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - ">="
|
@@ -109,7 +109,7 @@ dependencies:
|
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
112
|
+
name: parslet
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - ">="
|
@@ -123,19 +123,19 @@ dependencies:
|
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
126
|
+
name: pubid-core
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- - "
|
129
|
+
- - "~>"
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
131
|
+
version: 1.8.0
|
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:
|
138
|
+
version: 1.8.0
|
139
139
|
description: Library to generate, parse and manipulate NIST PubID.
|
140
140
|
email:
|
141
141
|
- open.source@ribose.com
|
@@ -151,12 +151,11 @@ files:
|
|
151
151
|
- exe/pubid-nist
|
152
152
|
- lib/pubid-nist.rb
|
153
153
|
- lib/pubid/nist.rb
|
154
|
-
- lib/pubid/nist/document.rb
|
155
|
-
- lib/pubid/nist/document_parser.rb
|
156
|
-
- lib/pubid/nist/document_transform.rb
|
157
154
|
- lib/pubid/nist/edition.rb
|
158
155
|
- lib/pubid/nist/errors.rb
|
156
|
+
- lib/pubid/nist/identifier.rb
|
159
157
|
- lib/pubid/nist/nist_tech_pubs.rb
|
158
|
+
- lib/pubid/nist/parser.rb
|
160
159
|
- lib/pubid/nist/parsers/default.rb
|
161
160
|
- lib/pubid/nist/parsers/fips_pub.rb
|
162
161
|
- lib/pubid/nist/parsers/nbs_bh.rb
|
@@ -180,8 +179,11 @@ files:
|
|
180
179
|
- lib/pubid/nist/parsers/nist_sp.rb
|
181
180
|
- lib/pubid/nist/parsers/nist_tn.rb
|
182
181
|
- lib/pubid/nist/publisher.rb
|
182
|
+
- lib/pubid/nist/renderer.rb
|
183
183
|
- lib/pubid/nist/serie.rb
|
184
184
|
- lib/pubid/nist/stage.rb
|
185
|
+
- lib/pubid/nist/transformer.rb
|
186
|
+
- lib/pubid/nist/update.rb
|
185
187
|
- lib/pubid/nist/version.rb
|
186
188
|
- publishers.yaml
|
187
189
|
- series.yaml
|
@@ -191,7 +193,7 @@ homepage: https://github.com/metanorma/pubid-nist
|
|
191
193
|
licenses:
|
192
194
|
- BSD-2-Clause
|
193
195
|
metadata: {}
|
194
|
-
post_install_message:
|
196
|
+
post_install_message:
|
195
197
|
rdoc_options: []
|
196
198
|
require_paths:
|
197
199
|
- lib
|
@@ -206,8 +208,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
206
208
|
- !ruby/object:Gem::Version
|
207
209
|
version: '0'
|
208
210
|
requirements: []
|
209
|
-
rubygems_version: 3.3.
|
210
|
-
signing_key:
|
211
|
+
rubygems_version: 3.3.26
|
212
|
+
signing_key:
|
211
213
|
specification_version: 4
|
212
214
|
summary: Library to generate, parse and manipulate NIST PubID.
|
213
215
|
test_files: []
|
@@ -1,21 +0,0 @@
|
|
1
|
-
module Pubid::Nist
|
2
|
-
class DocumentTransform
|
3
|
-
def apply(tree, context = nil)
|
4
|
-
series = tree[:series].to_s.gsub(".", " ")
|
5
|
-
document_parameters = tree.reject do |k, _|
|
6
|
-
%i[report_number first_report_number second_report_number series parts].include?(k)
|
7
|
-
end
|
8
|
-
tree[:parts]&.each { |part| document_parameters.merge!(part) }
|
9
|
-
report_number = tree.values_at(:first_report_number,
|
10
|
-
:second_report_number).compact.join("-").upcase
|
11
|
-
|
12
|
-
# using :report_number when need to keep original words case
|
13
|
-
report_number = tree[:report_number] if report_number.empty?
|
14
|
-
|
15
|
-
Document.new(publisher: Publisher.parse(series),
|
16
|
-
serie: Serie.new(serie: series),
|
17
|
-
docnumber: report_number,
|
18
|
-
**document_parameters)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|