pubid-nist 0.1.8 → 0.2.1

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: 76af4a82e63775b038ebfbd73f2c43b9756f1f3da689cbe13329d05efb4a06f4
4
- data.tar.gz: 37a6787cc14b4629c04dee83e42bb054e9a150b33d0ea00bfcbdfca936de09ed
3
+ metadata.gz: 385c609c6c253b90710e676e371d6466951a0a4146d0791ad6a16a299a9190d0
4
+ data.tar.gz: 3bdf39dc5fecc613eca35cbf74f6026e4e8771c1f89c584406a88c680fbc1f22
5
5
  SHA512:
6
- metadata.gz: ea789ee1abc40a9716e45388f4667c39c9da31ac244e331c1d36f401183cd087d13484d2f58f0c985fecfb2cd2b641d1aaffd90752f19c609bb548501115d693
7
- data.tar.gz: a6d32b2267aa0e853437a524ad7cfc4c8f32f741adb1e945736597453d825c74699b9d299232975ceb6c67a3a8cd1796032600a736c203cce2210696ca1954a9
6
+ metadata.gz: 7c6282be01f402f63283faed9d7a227bc8ed06e77569c7371c50b71566f3ce38e1f04f13a228df4997140858fa7c1c65c147730465fad7231d5930e31cd594f6
7
+ data.tar.gz: 07f422c88625fac8bfc24599db548ab0d4e33230f25376a435c6c2731469704c1d75930362f9a03ee0c82d4d3d3a0a64ad21b2a7d41ed1df409b9c30da5efc97
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::Document.parse(code).to_s(options[:style].to_sym)
87
+ puts Pubid::Nist::Identifier.parse(code).to_s(options[:style].to_sym)
88
88
  else
89
- puts Pubid::Nist::Document.parse(code).to_json
89
+ puts Pubid::Nist::Identifier.parse(code).to_json
90
90
  end
91
91
  end
92
92
  rescue Pubid::Nist::Errors::ParseError
@@ -1,5 +1,7 @@
1
1
  module Pubid::Nist
2
2
  module Errors
3
3
  class ParseError < StandardError; end
4
+ class SerieInvalidError < StandardError; end
5
+ class PublisherInvalidError < StandardError; end
4
6
  end
5
7
  end
@@ -82,20 +82,21 @@ INSERT_DESC = {
82
82
  }.freeze
83
83
 
84
84
  module Pubid::Nist
85
- class Document
85
+ class Identifier < Pubid::Core::Identifier::Base
86
86
  attr_accessor :serie, :code, :revision, :publisher, :version, :volume,
87
- :part, :addendum, :stage, :translation, :update_number,
88
- :edition, :supplement, :update_year, :update_month,
87
+ :part, :addendum, :stage, :translation,
88
+ :edition, :supplement, :update,
89
89
  :section, :appendix, :errata, :index, :insert
90
90
 
91
- def initialize(publisher:, serie:, docnumber:, stage: nil, supplement: nil,
92
- edition_month: nil, edition_year: nil, edition_day: nil, **opts)
93
- @publisher = publisher
94
- @serie = serie
95
- @code = docnumber
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
96
  @stage = Stage.new(stage.to_s) 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 self.parse(code)
151
- code = update_old_code(code)
152
- DocumentTransform.new.apply(DocumentParser.new.parse(code))
153
- rescue Parslet::ParseFailed => failure
154
- raise Pubid::Nist::Errors::ParseError, "#{failure.message}\ncause: #{failure.parse_failure_cause.ascii_tree}"
155
- end
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
- result = render_serie(format)
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::Document.parse(doc[:id])
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::Document.parse(doc[:doi])
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::Document.parse(doc[:doi])
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
- .text.sub(%r{^/}, "")
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 DocumentParser < Parslet::Parser
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).merge({ series: series })
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,16 +1,12 @@
1
1
  module Pubid::Nist
2
2
  module Parsers
3
- class Default < Parslet::Parser
3
+ class Default < Pubid::Core::Parser
4
4
  rule(:identifier) do
5
- stage.maybe >> (str(" ") | str(".")) >> report_number >> parts.repeat.as(:parts)
5
+ stage.maybe >> (str(" ") | str(".")) >> report_number >> parts.repeat
6
6
  end
7
7
 
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
8
  rule(:month_letters) { match('[A-Za-z]').repeat(3, 3) }
12
9
  rule(:number_suffix) { match("[aA-Z]") }
13
- # rule(:small)
14
10
 
15
11
  rule(:parts) do
16
12
  (edition | revision | version | volume | part | update | addendum | translation |
@@ -79,7 +75,7 @@ module Pubid::Nist
79
75
  end
80
76
 
81
77
  rule(:update) do
82
- (str("/Upd") | str("/upd")) >> digits.as(:update_number) >> str("-") >> digits.as(:update_year)
78
+ (str("/Upd") | str("/upd")) >> (digits.as(:number) >> str("-") >> digits.as(:year)).as(:update)
83
79
  end
84
80
 
85
81
  rule(:translation) do
@@ -2,7 +2,7 @@ module Pubid::Nist
2
2
  module Parsers
3
3
  class NbsCirc < Default
4
4
  rule(:revision) do
5
- ((str("rev") >> (letters >> year_digits).as(:revision)) |
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
- (letters.as(:edition_month) >> year_digits.as(:edition_year))) |
17
- ((str("e") | str("-")) >> (digits.as(:edition) | letters.as(:edition_month) >> year_digits.as(:edition_year)))
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
- (letters.as(:edition_month) >> year_digits.as(:edition_year)) |
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(:update_month) >> str("/") >> digits.as(:update_year)) |
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(:update_month) >> str("/") >> digits.as(:update_year)) |
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
- (year_digits.as(:first_report_number) >>
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(:update_month) >> str("/") >> digits.as(:update_year)) |
22
- (month_letters.as(:update_month) >> year_digits.as(:update_year)) |
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).maybe).as(:version)) |
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
@@ -6,6 +6,8 @@ module Pubid::Nist
6
6
  attr_accessor :publisher
7
7
 
8
8
  def initialize(publisher:)
9
+ raise Errors::PublisherInvalidError, "#{publisher} is not valid publisher" unless PUBLISHERS["long"].key?(publisher)
10
+
9
11
  @publisher = publisher
10
12
  end
11
13
 
@@ -0,0 +1,204 @@
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 = "%{serie}%{stage}%{code}%{volume}%{part}%{edition}%{revision}%{version}"\
11
+ "%{supplement}%{section}%{appendix}%{errata}%{index}%{insert}%{update}"\
12
+ "%{translation}" % params
13
+
14
+ if params[:addendum] && !params[:addendum].empty?
15
+ case opts[:format]
16
+ when :long
17
+ "Addendum to #{result}"
18
+ when :abbrev
19
+ "Add. to #{result}"
20
+ when :short
21
+ "#{result} Add."
22
+ when :mr
23
+ "#{result}.add-1"
24
+ end
25
+ else
26
+ result
27
+ end
28
+ end
29
+
30
+ def render_serie(serie, opts, params)
31
+ if serie.to_s(opts[:format]).include?(params[:publisher].to_s(opts[:format]))
32
+ return serie.to_s(opts[:format])
33
+ end
34
+
35
+ "#{params[:publisher].to_s(opts[:format])} #{serie.to_s(opts[:format])}"
36
+ end
37
+
38
+ def render_code(code, opts, _params)
39
+ (opts[:format] == :mr ? "." : " ") + code.to_s
40
+ end
41
+
42
+ def render_edition(edition, opts, _params)
43
+ case opts[:format]
44
+ when :long
45
+ " Edition "
46
+ when :abbrev
47
+ " Ed. "
48
+ when :short, :mr
49
+ "e"
50
+ end + edition.to_s
51
+ end
52
+
53
+ def render_revision(revision, opts, _params)
54
+ case opts[:format]
55
+ when :long
56
+ ", Revision "
57
+ when :abbrev
58
+ ", Rev. "
59
+ when :short, :mr
60
+ "r"
61
+ end + (revision == '' ? '1' : revision).to_s
62
+ end
63
+
64
+ def render_version(version, opts, _params)
65
+ case opts[:format]
66
+ when :long
67
+ ", Version "
68
+ when :abbrev
69
+ ", Ver. "
70
+ when :short, :mr
71
+ "ver"
72
+ end + version
73
+ end
74
+
75
+ def render_volume(volume, opts, params)
76
+ case opts[:format]
77
+ when :long
78
+ ", Volume "
79
+ when :abbrev
80
+ ", Vol. "
81
+ when :short
82
+ params[:code] ? "v" : " v"
83
+ when :mr
84
+ params[:code] ? "v" : ".v"
85
+ end + volume
86
+ end
87
+
88
+ def render_update(update, opts, _params)
89
+ update_text = update.number.to_s
90
+ update_text += "-#{update.year}" if update.year
91
+ update_text += sprintf("%02d", update.month) if update.month
92
+
93
+ case opts[:format]
94
+ when :long
95
+ " Update #{update_text}"
96
+ when :abbrev
97
+ " Upd. #{update_text}"
98
+ when :short
99
+ "/Upd#{update_text}"
100
+ when :mr
101
+ ".u#{update_text}"
102
+ end
103
+ end
104
+
105
+ def render_translation(translation, opts, _params)
106
+ case opts[:format]
107
+ when :long, :abbrev
108
+ " (#{translation.upcase})"
109
+ when :mr
110
+ ".#{translation}"
111
+ when :short
112
+ "(#{translation})"
113
+ end
114
+ end
115
+
116
+ def render_part(part, opts, _params)
117
+ case opts[:format]
118
+ when :long
119
+ " Part "
120
+ when :abbrev
121
+ " Pt. "
122
+ when :short, :mr
123
+ "pt"
124
+ end + part
125
+ end
126
+
127
+ def render_supplement(supplement, opts, _params)
128
+ case opts[:format]
129
+ when :long
130
+ " Supplement "
131
+ when :abbrev
132
+ " Suppl. "
133
+ when :short, :mr
134
+ "sup"
135
+ end + supplement
136
+ end
137
+
138
+ def render_appendix(appendix, opts, _params)
139
+ case opts[:format]
140
+ when :long
141
+ " Appendix "
142
+ when :abbrev
143
+ " App. "
144
+ when :short, :mr
145
+ "app"
146
+ end
147
+ end
148
+
149
+ def render_section(section, opts, _params)
150
+ case opts[:format]
151
+ when :long
152
+ " Section "
153
+ when :abbrev
154
+ " Sec. "
155
+ when :short, :mr
156
+ "sec"
157
+ end + section
158
+ end
159
+
160
+ def render_errata(errata, opts, _params)
161
+ case opts[:format]
162
+ when :long
163
+ " Errata "
164
+ when :abbrev
165
+ " Err. "
166
+ when :short, :mr
167
+ "err"
168
+ end
169
+ end
170
+
171
+ def render_index(index, opts, _params)
172
+ case opts[:format]
173
+ when :long
174
+ " Index "
175
+ when :abbrev
176
+ " Index. "
177
+ when :short, :mr
178
+ "indx"
179
+ end
180
+ end
181
+
182
+ def render_insert(insert, opts, _params)
183
+ case opts[:format]
184
+ when :long
185
+ " Insert "
186
+ when :abbrev
187
+ " Ins. "
188
+ when :short, :mr
189
+ "ins"
190
+ end
191
+ end
192
+
193
+ def render_stage(stage, opts, _params)
194
+ case opts[:format]
195
+ when :mr
196
+ "."
197
+ when :short
198
+ ""
199
+ else
200
+ " "
201
+ end + stage.to_s(opts[:format])
202
+ end
203
+ end
204
+ end
@@ -5,6 +5,8 @@ module Pubid::Nist
5
5
  attr_accessor :serie, :parsed
6
6
 
7
7
  def initialize(serie:, parsed: nil)
8
+ raise Errors::SerieInvalidError, "#{serie} is not valid serie" unless SERIES["long"].key?(serie)
9
+
8
10
  @serie = serie
9
11
  @parsed = parsed
10
12
  end
@@ -0,0 +1,30 @@
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
+ end
30
+ 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
@@ -1,5 +1,5 @@
1
1
  module Pubid
2
2
  module Nist
3
- VERSION = "0.1.8".freeze
3
+ VERSION = "0.2.1".freeze
4
4
  end
5
5
  end
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/document_transform"
15
- require_relative "nist/document_parser"
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/document"
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
@@ -90,7 +90,7 @@ mr:
90
90
  NBS BH: NBS.BH
91
91
  NBS CRPL: NBS.CRPL
92
92
  NBS CRPL-F-A: NBS.CRPL-F-A
93
- NBS CRPL-F-B: NBS CRPL-F-B
93
+ NBS CRPL-F-B: NBS.CRPL-F-B
94
94
  NBS IP: NBS.IP
95
95
  NBS CIRC: NBS.CIRC
96
96
  NBS CIS: NBS.CIS
data/update_codes.yaml CHANGED
@@ -48,11 +48,13 @@ NIST IR 8259Apt: NIST IR 8259A(por)
48
48
  NIST IR 8211-upd: NIST IR 8211/Upd1-2021
49
49
  NIST IR 8115r1/upd: NIST IR 8115r1/Upd1-2021
50
50
  NBS CS v: NBS CSM v
51
- !ruby/regexp /NBS CRPL-F-B(?=\d+)/: "NBS CRPL-F-B "
52
- !ruby/regexp /NBS[.\s]CS[.\s]e/: "NBS CS-E "
53
- !ruby/regexp /(?<=\d)es/: (spa)
54
- !ruby/regexp /(?<=\d)chi/: (zho)
55
- !ruby/regexp /(?<=\d)viet/: (vie)
56
- !ruby/regexp /(?<=\d)port/: (por)
57
- !ruby/regexp /(?<=\d)(pt)(?!\d)/: (por)
58
- !ruby/regexp /(?<=\d)id/: (ind)
51
+ NIST SP 800-57p1r2006: NIST SP 800-57pt1r1
52
+ NIST SP 800-57p1r2007: NIST SP 800-57pt1r2
53
+ /NBS CRPL-F-B(?=\d+)/: "NBS CRPL-F-B "
54
+ /NBS[.\s]CS[.\s]e/: "NBS CS-E "
55
+ /(?<=\d)es/: (spa)
56
+ /(?<=\d)chi/: (zho)
57
+ /(?<=\d)viet/: (vie)
58
+ /(?<=\d)port/: (por)
59
+ /(?<=\d)(pt)(?!\d)/: (por)
60
+ /(?<=\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.1.8
4
+ version: 0.2.1
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: 2022-03-06 00:00:00.000000000 Z
11
+ date: 2023-04-17 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: relaton-nist
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: nokogiri
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: thor
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: lightly
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: parslet
126
+ name: pubid-core
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - ">="
129
+ - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: '0'
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: '0'
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.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