nistbib 0.1.2 → 0.1.5

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
- SHA256:
3
- metadata.gz: 434eb7054df007c7604456b7770b728f5396b6bba71fd0f9e922147d0522962d
4
- data.tar.gz: b486651f96863f6d4b5c3b3e8e731fbe16d056188a1fe072108e9c368b057d4a
2
+ SHA1:
3
+ metadata.gz: 93e42e10363b0cf5ace10ea2540e20a7d96bacfa
4
+ data.tar.gz: 958b66ae4601efb35dbd366a80b5c09ea22a50bd
5
5
  SHA512:
6
- metadata.gz: f6b366f616b619aaa927a4312af17ca9eb9c2928ec7483acc4dcb3b6f4c5ddc858656ebbe72ea49e98cff7c42e3476aa4afcc5fb934bce5a7c21b3ca3a56ab34
7
- data.tar.gz: 040e6331167a4c779c61d348fb230947c145ddb064d2359e3ded3dafd898d46d443cbbe44fac0d3f092d2e47c0151c4a468a0558ee1706076aaaec259ece416c
6
+ metadata.gz: 4fb26a328169066da7e921df16b525a67baa6fc5b8ddebb14fbcb08af41decddd6e27b40a173aa9015972e9a22f844ceea4ee7dd711444600efac36a240a49eb
7
+ data.tar.gz: e71f295627f4f640f81432508783365ccbc868cc98f277ecb153e920a9e62339d6cf79f81f64d8ee731b09ede32414d3322a9ab162dce416b543fc040da0055b
data/.gitignore CHANGED
@@ -7,6 +7,7 @@
7
7
  /spec/reports/
8
8
  /tmp/
9
9
  .vscode/
10
+ .rubocop-https---raw-githubusercontent-com-riboseinc-oss-guides-master-ci-rubocop-yml
10
11
 
11
12
  # rspec failure tracking
12
13
  .rspec_status
data/.rubocop.yml ADDED
@@ -0,0 +1,10 @@
1
+ # This project follows the Ribose OSS style guide.
2
+ # https://github.com/riboseinc/oss-guides
3
+ # All project-specific additions and overrides should be specified in this file.
4
+
5
+ inherit_from:
6
+ - https://raw.githubusercontent.com/riboseinc/oss-guides/master/ci/rubocop.yml
7
+ AllCops:
8
+ TargetRubyVersion: 2.3
9
+ Rails:
10
+ Enabled: true
data/Gemfile.lock CHANGED
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- nistbib (0.1.2)
5
- iso-bib-item (~> 0.4.2)
4
+ nistbib (0.1.5)
5
+ relaton-bib (~> 0.1.1)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
@@ -20,12 +20,7 @@ GEM
20
20
  docile (1.3.1)
21
21
  equivalent-xml (0.6.0)
22
22
  nokogiri (>= 1.4.3)
23
- hashdiff (0.3.8)
24
- iso-bib-item (0.4.5)
25
- isoics (~> 0.1.6)
26
- nokogiri (~> 1.8.4)
27
- ruby_deep_clone (~> 0.8.0)
28
- isoics (0.1.7)
23
+ hashdiff (0.3.9)
29
24
  json (2.2.0)
30
25
  method_source (0.9.2)
31
26
  mini_portile2 (2.3.0)
@@ -39,13 +34,16 @@ GEM
39
34
  pry (~> 0.10)
40
35
  public_suffix (3.0.3)
41
36
  rake (10.5.0)
37
+ relaton-bib (0.1.3)
38
+ addressable
39
+ nokogiri (~> 1.8.4)
42
40
  rspec (3.8.0)
43
41
  rspec-core (~> 3.8.0)
44
42
  rspec-expectations (~> 3.8.0)
45
43
  rspec-mocks (~> 3.8.0)
46
44
  rspec-core (3.8.0)
47
45
  rspec-support (~> 3.8.0)
48
- rspec-expectations (3.8.2)
46
+ rspec-expectations (3.8.3)
49
47
  diff-lcs (>= 1.2.0, < 2.0)
50
48
  rspec-support (~> 3.8.0)
51
49
  rspec-mocks (3.8.0)
@@ -54,7 +52,6 @@ GEM
54
52
  rspec-support (3.8.0)
55
53
  ruby-debug-ide (0.6.1)
56
54
  rake (>= 0.8.1)
57
- ruby_deep_clone (0.8.0)
58
55
  safe_yaml (1.0.5)
59
56
  simplecov (0.16.1)
60
57
  docile (~> 1.1)
data/README.adoc CHANGED
@@ -40,7 +40,7 @@ hit_collection = NistBib::NistBibliography.search("8200")
40
40
  <NistBib::Hit:0x007f82b9b2a1e0 @text="8200" @fetched="false" @fullIdentifier="" @title="8200">]
41
41
 
42
42
  item = hit_collection[1].fetch
43
- => #<IsoBibItem::IsoBibliographicItem:0x007f82b986e668
43
+ => #<NistBib::NistBibliographicItem:0x007f82b986e668
44
44
  ...
45
45
  ----
46
46
 
@@ -48,13 +48,13 @@ hit_collection = NistBib::NistBibliography.search("8200")
48
48
  [source,ruby]
49
49
  ----
50
50
  item.to_xml
51
- => "<bibitem type="" id="NISTIR8200(DRAFT)">
52
- <fetched>2019-02-11</fetched>
51
+ => "<nist-standard>
52
+ <fetched>2019-05-03</fetched>
53
53
  <title format="text/plain" language="en" script="Latn">
54
54
  Interagency Report on Status of International Cybersecurity Standardization for the Internet of Things (IoT)
55
55
  </title>
56
56
  ...
57
- </bibitem>"
57
+ </nist-standard>"
58
58
  ----
59
59
 
60
60
  === Get code, and year
@@ -62,7 +62,32 @@ item.to_xml
62
62
  ----
63
63
  NistBib::NistBibliography.get("8200", "2018", {})
64
64
  fetching 8200...
65
- => #<IsoBibItem::IsoBibliographicItem:0x007f82bb3370a8
65
+ => #<NistBib::NistBibliographicItem:0x007f82bb3370a8
66
+ ...
67
+ ----
68
+
69
+ === Get short citation
70
+ Short citation is a convetion about a citation's format. The format for NIST publications is:
71
+ ----
72
+ NIST {abbrev(series)} {docnumber} {(edition), optional} {(stage), optioal}
73
+ # or
74
+ {abbrev(series)} {docnumber} {(edition), optional} {(stage), optioal}
75
+ ----
76
+ - `(stage)` is empty if the state is "final" (published)
77
+ - `(edition)` is the date of publication or update
78
+ - `docnumber` is the full NIST number, including revision, e.g., 800-52
79
+
80
+ The format for FIPS publications is:
81
+ ----
82
+ FIPS {docnumber}
83
+ # or
84
+ NIST FIPS {docnumber}
85
+ ----
86
+ [source,ruby]
87
+ ----
88
+ NistBib::NistBibliography.get("8200", "2018", {})
89
+ fetching 8200...
90
+ => #<NistBib::NistBibliographicItem:0x007f82bb3370a8
66
91
  ...
67
92
  ----
68
93
 
data/lib/nistbib.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  require "nistbib/version"
2
- require 'nistbib/nist_bibliography'
2
+ require "nistbib/nist_bibliography"
3
3
 
4
4
  if defined? Relaton
5
- require_relative 'relaton/processor'
5
+ require_relative "relaton/processor"
6
6
  Relaton::Registry.instance.register(Relaton::NistBib::Processor)
7
7
  end
8
8
 
@@ -0,0 +1,30 @@
1
+ module NistBib
2
+ class CommentPeriod
3
+ # @return [Date]
4
+ attr_reader :from
5
+
6
+ # @rerurn [Date, NilClass]
7
+ attr_reader :to
8
+
9
+ # @return [Date, NilClass]
10
+ attr_reader :extended
11
+
12
+ # @param from [Date]
13
+ # @param to [Date, NilClass]
14
+ # @param extended [Date, NilClass]
15
+ def initialize(from, to = nil, extended = nil)
16
+ @from = from
17
+ @to = to
18
+ @extended = extended
19
+ end
20
+
21
+ # @param [Nokogiri::XML::Builder]
22
+ def to_xml(builder)
23
+ builder.commentperiod do
24
+ builder.from from.to_s
25
+ builder.to to.to_s if to
26
+ builder.extended extended.to_s if extended
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,44 @@
1
+ module NistBib
2
+ class DocumentStatus
3
+ STAGES = %w[
4
+ draft-internal draft-wip draft-prelim draft-public final final-review
5
+ ].freeze
6
+
7
+ SUBSTAGES = %w[active retired withdrawn].freeze
8
+
9
+ # @return [String]
10
+ attr_reader :stage
11
+
12
+ # @return [String, NilClass]
13
+ attr_reader :substage
14
+
15
+ # @return [String, NilClass]
16
+ attr_reader :iteration
17
+
18
+ # @param stage [String]
19
+ # @param substage [String, NilClass]
20
+ # @param iteration [String, NilClass]
21
+ def initialize(stage:, substage: nil, iteration: nil)
22
+ unless STAGES.include? stage
23
+ raise ArgumentError, "invalid argument: stage (#{stage})"
24
+ end
25
+
26
+ if substage && !SUBSTAGES.include?(substage)
27
+ raise ArgumentError, "invalid argument: substage (#{substage})"
28
+ end
29
+
30
+ @stage = stage
31
+ @substage = substage
32
+ @iteration = iteration
33
+ end
34
+
35
+ # @param builder [Nokogiri::XML::Builder]
36
+ def to_xml(builder)
37
+ builder.status do
38
+ builder.stage stage
39
+ builder.substage substage if substage
40
+ builder.iteration iteration if iteration
41
+ end
42
+ end
43
+ end
44
+ end
data/lib/nistbib/hit.rb CHANGED
@@ -3,21 +3,21 @@
3
3
  module NistBib
4
4
  # Hit.
5
5
  class Hit
6
- # @return [Isobib::HitCollection]
6
+ # @return [NistBib::HitCollection]
7
7
  attr_reader :hit_collection
8
8
 
9
9
  # @return [Array<Hash>]
10
10
  attr_reader :hit
11
11
 
12
12
  # @param hit [Hash]
13
- # @param hit_collection [Isobib:HitCollection]
13
+ # @param hit_collection [NistBib:HitCollection]
14
14
  def initialize(hit, hit_collection = nil)
15
15
  @hit = hit
16
16
  @hit_collection = hit_collection
17
17
  end
18
18
 
19
19
  # Parse page.
20
- # @return [Isobib::IsoBibliographicItem]
20
+ # @return [NistBib::NistBliographicItem]
21
21
  def fetch
22
22
  @fetch ||= Scrapper.parse_page @hit
23
23
  end
@@ -37,15 +37,8 @@ module NistBib
37
37
  end
38
38
 
39
39
  # @return [String]
40
- def to_xml(opts = {})
41
- #if builder
42
- #fetch.to_xml builder, opts
43
- #else
44
- builder = Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
45
- fetch.to_xml xml, opts
46
- end
47
- builder.doc.root.to_xml
48
- #end
40
+ def to_xml
41
+ fetch.to_xml
49
42
  end
50
43
  end
51
44
  end
@@ -22,23 +22,35 @@ module NistBib
22
22
 
23
23
  # @param ref_nbr [String]
24
24
  # @param year [String]
25
- def initialize(ref_nbr, year = nil) #(text, hit_pages = nil)
25
+ # @param opts [Hash]
26
+ def initialize(ref_nbr, year = nil, opts)
26
27
  @text = ref_nbr
27
28
  @year = year
28
29
  from, to = nil
29
30
  if year
30
- d = Date.strptime year, '%Y'
31
- from = d.strftime '%m/%d/%Y'
32
- to = d.next_year.prev_day.strftime '%m/%d/%Y'
31
+ d = Date.strptime year, "%Y"
32
+ from = d.strftime "%m/%d/%Y"
33
+ to = d.next_year.prev_day.strftime "%m/%d/%Y"
33
34
  end
34
- url = "#{DOMAIN}/publications/search?keywords-lg=#{ref_nbr}&dateFrom-lg=#{from}&dateTo-lg=#{to}"
35
+ url = "#{DOMAIN}/publications/search?keywords-lg=#{ref_nbr}"
36
+ url += "&dateFrom-lg=#{from}" if from
37
+ url += "&dateTo-lg=#{to}" if to
38
+ url += "&status-lg=Draft" if /PD/ =~ opts[:stage]
35
39
  doc = Nokogiri::HTML OpenURI.open_uri(::Addressable::URI.parse(url).normalize)
36
- hits = doc.css('table.publications-table > tbody > tr').map do |h|
37
- link = h.at('td/div/strong/a')
38
- code = h.at('td[2]').text.strip
40
+ hits = doc.css("table.publications-table > tbody > tr").map do |h|
41
+ link = h.at("td/div/strong/a")
42
+ serie = h.at("td[1]").text.strip
43
+ code = h.at("td[2]").text.strip
39
44
  title = link.text
40
45
  url = DOMAIN + link[:href]
41
- Hit.new({ code: code, title: title, url: url }, self)
46
+ status = h.at("td[4]").text.strip.downcase
47
+ release_date = Date.strptime h.at("td[5]").text.strip, "%m/%d/%Y"
48
+ Hit.new(
49
+ {
50
+ code: code, serie: serie, title: title, url: url, status: status,
51
+ release_date: release_date
52
+ }, self
53
+ )
42
54
  end
43
55
  concat hits
44
56
  # concat(hits.map { |h| Hit.new(h, self) })
@@ -0,0 +1,16 @@
1
+ module NistBib
2
+ class Keyword
3
+ # @return [Nokogiri::XML::DocumentFragment]
4
+ attr_reader :element
5
+
6
+ # @param element [String]
7
+ def initialize(element)
8
+ @element = Nokogiri::XML.fragment element
9
+ end
10
+
11
+ # @param builder [Nokogiri::XML::Builder]
12
+ def to_xml(builder)
13
+ builder.keyword element.to_xml
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,75 @@
1
+ module NistBib
2
+ class NistBibliographicItem < RelatonBib::BibliographicItem
3
+ # @return [NistBib::NistSeries, NilClass]
4
+ attr_reader :nistseries
5
+
6
+ # @return [Array<NistBib::Keyword>]
7
+ attr_reader :keyword
8
+
9
+ # @return [NistBib::CommentPeriod]
10
+ attr_reader :commentperiod
11
+
12
+ # @param id [String, NilClass]
13
+ # @param title [Array<RelatonBib::TypedTitleString>]
14
+ # @param formattedref [RelatonBib::FormattedRef, NilClass]
15
+ # @param type [String, NilClass]
16
+ # @param docid [Array<RelatonBib::DocumentIdentifier>]
17
+ # @param docnumber [String, NilClass]
18
+ # @param language [Arra<String>]
19
+ # @param script [Array<String>]
20
+ # @param docstatus [NistBib::DocumentStatus, NilClass]
21
+ # @param edition [String, NilClass]
22
+ # @param version [RelatonBib::BibliographicItem::Version, NilClass]
23
+ # @param biblionote [Array<RelatonBib::FormattedStrong>]
24
+ # @param series [Array<RelatonBib::Series>]
25
+ # @param medium [RelatonBib::Medium, NilClas]
26
+ # @param place [Array<String>]
27
+ # @param extent [Array<Relaton::BibItemLocality>]
28
+ # @param accesslocation [Array<String>]
29
+ # @param classification [RelatonBib::Classification, NilClass]
30
+ # @param validity [RelatonBib:Validity, NilClass]
31
+ # @param fetched [Date, NilClass] default nil
32
+ # @param keyword [Array<NistBib::Keyword>]
33
+ # @param commentperiod [NistBib::CommentPeriod]
34
+ #
35
+ # @param dates [Array<Hash>]
36
+ # @option dates [String] :type
37
+ # @option dates [String] :from
38
+ # @option dates [String] :to
39
+ #
40
+ # @param contributors [Array<Hash>]
41
+ # @option contributors [String] :type
42
+ # @option contributors [String] :from
43
+ # @option contributirs [String] :to
44
+ # @option contributors [String] :abbreviation
45
+ # @option contributors [Array<String>] :roles
46
+ #
47
+ # @param abstract [Array<Hash>]
48
+ # @option abstract [String] :content
49
+ # @option abstract [String] :language
50
+ # @option abstract [String] :script
51
+ # @option abstract [String] :type
52
+ #
53
+ # @param relations [Array<Hash>]
54
+ # @option relations [String] :type
55
+ # @option relations [RelatonBib::BibliographicItem] :bibitem
56
+ # @option relations [Array<RelatonBib::BibItemLocality>] :bib_locality
57
+ #
58
+ # @param nistseries [Nist::NistSeries, NilClass]
59
+ def initialize(**args)
60
+ @nistseries = args.delete :nistseries
61
+ @keyword = args.delete(:keyword) || []
62
+ @commentperiod = args.delete :commentperiod
63
+ super
64
+ end
65
+
66
+ # @param builder [Nokogiri::XML::Builder]
67
+ def to_xml(builder = nil)
68
+ super builder, root: :bibitem, date_format: :short do |b|
69
+ nistseries&.to_xml b
70
+ keyword.each { |kw| kw.to_xml b }
71
+ commentperiod&.to_xml b
72
+ end
73
+ end
74
+ end
75
+ end
@@ -1,16 +1,23 @@
1
- require 'nistbib/scrapper'
2
- require 'nistbib/hit_collection'
1
+ require "relaton_bib"
2
+ require "nistbib/nist_bibliographic_item"
3
+ require "nistbib/scrapper"
4
+ require "nistbib/hit_collection"
5
+ require "nistbib/nist_series"
6
+ require "nistbib/xml_parser"
7
+ require "nistbib/keyword"
8
+ require "nistbib/comment_period"
9
+ require "nistbib/document_status"
3
10
 
4
11
  module NistBib
5
12
  class NistBibliography
6
13
  class << self
7
14
  # @param text [String]
8
15
  # @return [NistBib::HitCollection]
9
- def search(text, year = nil)
10
- HitCollection.new text, year
16
+ def search(text, year = nil, opts = {})
17
+ HitCollection.new text, year, opts
11
18
  rescue
12
19
  warn "Could not access https://www.nist.gov"
13
- []
20
+ []
14
21
  end
15
22
 
16
23
  # @param code [String] the NIST standard Code to look up (e..g "8200")
@@ -18,6 +25,19 @@ module NistBib
18
25
  # @param opts [Hash] options; restricted to :all_parts if all-parts reference is required
19
26
  # @return [String] Relaton XML serialisation of reference
20
27
  def get(code, year = nil, opts = {})
28
+ /^(?<code2>[^\(]+)\((?<date2>\w+\s(\d{2},\s)?\d{4})\)(\s\()?(?<stage>[^\)]+)?/ =~ code
29
+ if code2
30
+ code = code2.strip
31
+ if date2
32
+ if /\w+\s\d{4}/ =~ date2
33
+ opts[:issued_date] = Time.strptime date2, "%B %Y"
34
+ elsif /\w+\s\d{2},\s\d{4}/ =~ date2
35
+ opts[:updated_date] = Time.strptime date2, "%B %d, %Y"
36
+ end
37
+ end
38
+ opts[:stage] = stage if stage
39
+ end
40
+
21
41
  if year.nil?
22
42
  /^(?<code1>[^:]+):(?<year1>[^:]+)$/ =~ code
23
43
  unless code1.nil?
@@ -26,36 +46,48 @@ module NistBib
26
46
  end
27
47
  end
28
48
 
29
- code += '-1' if opts[:all_parts]
49
+ code += "-1" if opts[:all_parts]
30
50
  ret = nistbib_get1(code, year, opts)
31
- return nil if ret.nil?
32
- ret.to_most_recent_reference unless year || opts[:keep_year]
33
- ret.to_all_parts if opts[:all_parts]
51
+ # return nil if ret.nil?
52
+ # ret.to_most_recent_reference unless year || opts[:keep_year]
53
+ # ret.to_all_parts if opts[:all_parts]
34
54
  ret
35
55
  end
36
56
 
37
57
  private
38
58
 
39
59
  def nistbib_get1(code, year, opts)
40
- result = nistbib_search_filter(code, year) or return nil
41
- ret = nistbib_results_filter(result, year)
60
+ result = nistbib_search_filter(code, year, opts) or return nil
61
+ ret = nistbib_results_filter(result, year, opts)
42
62
  return ret[:ret] if ret[:ret]
63
+
43
64
  fetch_ref_err(code, year, ret[:years])
44
65
  end
45
66
 
46
- # Sort through the results from Isobib, fetching them three at a time,
67
+ # Sort through the results from NistBib, fetching them three at a time,
47
68
  # and return the first result that matches the code,
48
69
  # matches the year (if provided), and which # has a title (amendments do not).
49
70
  # Only expects the first page of results to be populated.
50
71
  # Does not match corrigenda etc (e.g. ISO 3166-1:2006/Cor 1:2007)
51
72
  # If no match, returns any years which caused mismatch, for error reporting
52
- def nistbib_results_filter(result, year)
73
+ def nistbib_results_filter(result, year, opts)
53
74
  missed_years = []
54
75
  result.each_slice(3) do |s| # ISO website only allows 3 connections
55
- fetch_pages(s, 3).each_with_index do |r, i|
76
+ fetch_pages(s, 3).each_with_index do |r, _i|
77
+ if opts[:issued_date]
78
+ r.dates.select { |d| d.type == "issued" }.each do |d|
79
+ return { ret: r } if opts[:issued_date] == d.on
80
+ end
81
+ elsif opts[:updated_date]
82
+ r.dates.select { |d| d.type == "published" }.each do |d|
83
+ return { ret: r } if opts[:updated_date] == d.on
84
+ end
85
+ end
56
86
  return { ret: r } if !year
87
+
57
88
  r.dates.select { |d| d.type == "published" }.each do |d|
58
89
  return { ret: r } if year.to_i == d.on.year
90
+
59
91
  missed_years << d.on.year
60
92
  end
61
93
  end
@@ -71,16 +103,13 @@ module NistBib
71
103
  workers.result.sort { |x, y| x[:i] <=> y[:i] }.map { |x| x[:hit] }
72
104
  end
73
105
 
74
- def nistbib_search_filter(code, year)
75
- # docidrx = %r{^(ISO|IEC)[^0-9]*\s[0-9-]+}
76
- # corrigrx = %r{^(ISO|IEC)[^0-9]*\s[0-9-]+:[0-9]+/}
106
+ def nistbib_search_filter(code, year, opts)
107
+ docid = code.match(%r{[0-9-]{3,}}).to_s
108
+ serie = code.match(%r{(FISP|SP|NISTIR)(?=\s)})
77
109
  warn "fetching #{code}..."
78
- result = search(code, year)
110
+ result = search(code, year, opts)
79
111
  result.select do |i|
80
- !i.hit[:code].empty?
81
- # i.hit[:code] &&
82
- # i.hit[:code].match(docidrx).to_s == code &&
83
- # corrigrx !~ i.hit[:code]
112
+ i.hit[:code]&.include?(docid) && (!serie || i.hit[:serie] == serie.to_s)
84
113
  end
85
114
  end
86
115
 
@@ -0,0 +1,35 @@
1
+ module NistBib
2
+ class NistSeries
3
+ ABBREVIATIONS = {
4
+ "NISTIR" => "NIST Interagency/Internal Report",
5
+ "NIST SP" => "NIST Special Publication",
6
+ "NIST FIPS" => "NIST Federal Information Processing Standards",
7
+ }.freeze
8
+
9
+ # @return [String]
10
+ attr_reader :type
11
+
12
+ # @return [String]
13
+ attr_reader :title
14
+
15
+ # @return [RalatonBib::LocalizedString, NilClass]
16
+ attr_reader :abbreviation
17
+
18
+ # @param abbreviation [RelatonBib::LocalizedString, NilClass]
19
+ def initialize(abbreviation)
20
+ @type = "main"
21
+ @abbreviation = RelatonBib::LocalizedString.new(
22
+ abbreviation.downcase.gsub(" ", "-"), "en", "Latn"
23
+ )
24
+ @title = ABBREVIATIONS[abbreviation]
25
+ end
26
+
27
+ # @param builder [Nokogiri::XML::Builder]
28
+ def to_xml(builder)
29
+ builder.series type: type do
30
+ builder.title title
31
+ builder.abbreviation { abbreviation.to_xml builder } if abbreviation
32
+ end
33
+ end
34
+ end
35
+ end
@@ -1,9 +1,9 @@
1
- require 'iso_bib_item'
1
+ require "relaton_bib"
2
2
 
3
3
  module NistBib
4
- module Scrapper
4
+ class Scrapper
5
5
  class << self
6
- DOMAIN = 'https://csrc.nist.gov'
6
+ DOMAIN = "https://csrc.nist.gov".freeze
7
7
 
8
8
  # Parse page.
9
9
  # @param hit_data [Hash]
@@ -12,22 +12,25 @@ module NistBib
12
12
  def parse_page(hit_data)
13
13
  doc = get_page hit_data[:url]
14
14
 
15
- IsoBibItem::IsoBibliographicItem.new(
16
- docid: fetch_docid(doc),
17
- edition: nil,
18
- language: ['en'],
19
- script: ['Latn'],
20
- titles: fetch_titles(hit_data),
21
- type: nil,
22
- docstatus: fetch_status(doc),
23
- ics: [],
24
- dates: fetch_dates(doc),
25
- contributors: fetch_contributors,
26
- workgroup: nil,
27
- abstract: fetch_abstract(doc),
28
- copyright: fetch_copyright(doc),
29
- link: fetch_link(doc, hit_data[:url]),
30
- relations: fetch_relations(doc)
15
+ NistBibliographicItem.new(
16
+ fetched: Date.today.to_s,
17
+ type: "standard",
18
+ id: fetch_id(doc),
19
+ titles: fetch_titles(hit_data),
20
+ link: fetch_link(doc),
21
+ docid: fetch_docid(doc),
22
+ dates: fetch_dates(doc, hit_data[:release_date]),
23
+ contributors: fetch_contributors(doc),
24
+ edition: nil,
25
+ language: ["en"],
26
+ script: ["Latn"],
27
+ abstract: fetch_abstract(doc),
28
+ docstatus: fetch_status(doc, hit_data[:status]),
29
+ copyright: fetch_copyright(doc),
30
+ relations: fetch_relations(doc),
31
+ nistseries: fetch_nistseries(doc),
32
+ keyword: fetch_keywords(doc),
33
+ commentperiod: fetch_commentperiod(doc),
31
34
  )
32
35
  end
33
36
 
@@ -38,7 +41,7 @@ module NistBib
38
41
  # @return [Array<Nokogiri::HTML::Document, String>]
39
42
  def get_page(url)
40
43
  uri = URI url
41
- resp = Net::HTTP.get_response(uri)#.encode("UTF-8")
44
+ resp = Net::HTTP.get_response(uri) # .encode("UTF-8")
42
45
  Nokogiri::HTML(resp.body)
43
46
  end
44
47
 
@@ -46,88 +49,127 @@ module NistBib
46
49
  # @param doc [Nokogiri::HTML::Document]
47
50
  # @return [Hash]
48
51
  def fetch_docid(doc)
49
- item_ref = doc.at("//div[contains(@class, 'publications-detail')]/h3").text.strip
50
- unless item_ref
51
- return { project_number: '?', part_number: '', prefix: nil, type: 'NIST', id: '?' }
52
- end
53
- m = item_ref.match(/(?<=\s)(?<project>[\d-]+)(?<vol>\sVol\.\s)?(?<part>(?(<vol>)\d+|))/)
54
- {
55
- project_number: m[:project],
56
- part_number: m[:part],
57
- subpart_number: nil,
58
- prefix: nil,
59
- type: 'NIST',
60
- id: item_ref
61
- }
52
+ item_ref = doc.at("//div[contains(@class, 'publications-detail')]/h3").
53
+ text.strip
54
+ return [RelatonBib::DocumentIdentifier.new(type: "nist", id: "?")] unless item_ref
55
+
56
+ [RelatonBib::DocumentIdentifier.new(id: item_ref, type: "nist")]
57
+ end
58
+
59
+ # Fetch id.
60
+ # @param doc [Nokogiri::HTML::Document]
61
+ # @return [String]
62
+ def fetch_id(doc)
63
+ doc.at("//div[contains(@class, 'publications-detail')]/h3").text.
64
+ strip.gsub(/\s/, "")
62
65
  end
63
66
 
64
67
  # Fetch status.
65
68
  # @param doc [Nokogiri::HTML::Document]
66
69
  # @param status [String]
67
70
  # @return [Hash]
68
- def fetch_status(doc)
69
- withdrawn = doc.at "//p/strong[text()='Withdrawn:']"
70
- return { status: 'withdrawn', stage: '95', substage: '99' } if withdrawn
71
-
72
- item_ref = doc.at("//div[contains(@class, 'publications-detail')]/h3").text.strip
73
- wip = item_ref.match(/(?<=\()\w+/).to_s
74
- case wip
75
- when 'DRAFT'
76
- { status: 'working-draft', stage: '20', substage: '20' }
77
- # when 'RETIRED DRAFT'
78
- # { status: 'committee-draft', stage: '30', substage: '00' }
71
+ def fetch_status(doc, status)
72
+ case status
73
+ when "draft (withdrawn)"
74
+ stage = "draft-public"
75
+ substage = "withdrawn"
76
+ when "retired draft"
77
+ stage = "draft-public"
78
+ substage = "retired"
79
+ when "withdrawn"
80
+ stage = "final"
81
+ substage = "withdrawn"
82
+ when "draft"
83
+ stage = "draft-public"
84
+ substage = "active"
79
85
  else
80
- { status: 'published', stage: '60', substage: '60' }
86
+ stage = status
87
+ substage = "active"
81
88
  end
89
+
90
+ # if doc.at "//p/strong[text()='Withdrawn:']"
91
+ # substage = "withdrawn"
92
+ # else
93
+ # substage = "active"
94
+ # item_ref = doc.at(
95
+ # "//div[contains(@class, 'publications-detail')]/h3",
96
+ # ).text.strip
97
+ # wip = item_ref.match(/(?<=\()\w+/).to_s
98
+ # stage = "draft-public" if wip == "DRAFT"
99
+ # end
100
+ NistBib::DocumentStatus.new(stage: stage, substage: substage)
82
101
  end
83
102
 
84
103
  # Fetch titles.
85
104
  # @param hit_data [Hash]
86
105
  # @return [Array<Hash>]
87
106
  def fetch_titles(hit_data)
88
- titles = hit_data[:title].split ' - '
89
- # case titles.size
90
- # when 0
91
- # intro, main, part = nil, "", nil
92
- # when 1
93
- intro, main, part = nil, titles[0], nil
94
- # when 2
95
- # if /^(Part|Partie) \d+:/ =~ titles[1]
96
- # intro, main, part = nil, titles[0], titles[1]
97
- # else
98
- # intro, main, part = titles[0], titles[1], nil
99
- # end
100
- # when 3
101
- # intro, main, part = titles[0], titles[1], titles[2]
102
- # else
103
- # intro, main, part = titles[0], titles[1], titles[2..-1]&.join(" -- ")
104
- # end
105
- [{
106
- title_intro: intro,
107
- title_main: main,
108
- title_part: part,
109
- language: 'en',
110
- script: 'Latn'
111
- }]
107
+ [{ content: hit_data[:title], language: "en", script: "Latn", format: "text/plain" }]
112
108
  end
113
109
 
114
110
  # Fetch dates
115
111
  # @param doc [Nokogiri::HTML::Document]
116
112
  # @return [Array<Hash>]
117
- def fetch_dates(doc)
118
- dates = []
119
- d = doc.at("//strong[text()='Date Published:']/../text()[2]").text.strip
120
- publish_date = Date.strptime(d, '%B %Y').to_s
121
- unless publish_date.empty?
122
- dates << { type: 'published', on: publish_date }
123
- end
113
+ def fetch_dates(doc, release_date)
114
+ dates = [{ type: "published", on: release_date.to_s }]
115
+
116
+ d = doc.at("//span[@id='pub-release-date']").text.strip
117
+ date = if /(?<date>\w+\s\d{4})/ =~ d
118
+ Date.strptime(date, "%B %Y")
119
+ elsif /(?<date>\w+\s\d{2},\s\d{4})/ =~ d
120
+ Date.strptime(date, "%B %d, %Y")
121
+ end
122
+ dates << { type: "issued", on: date.to_s }
123
+
124
124
  dates
125
125
  end
126
126
 
127
- def fetch_contributors
128
- name = 'National Institute of Standards and Technology'
129
- url = 'www.nist.gov'
130
- [{ entity: { name: name, url: url, abbreviation: 'NIST' }, roles: ['publisher'] }]
127
+ def fetch_contributors(doc)
128
+ name = "National Institute of Standards and Technology"
129
+ org = RelatonBib::Organization.new(
130
+ name: name, url: "www.nist.gov", abbreviation: "NIST",
131
+ )
132
+ contribs = [
133
+ RelatonBib::ContributionInfo.new(entity: org, role: ["publisher"]),
134
+ ]
135
+
136
+ authors = doc.at('//h4[.="Author(s)"]/following-sibling::p')
137
+ contribs += contributors(authors, "author")
138
+
139
+ editors = doc.at('//h4[.="Editor(s)"]/following-sibling::p')
140
+ contribs + contributors(editors, "editor")
141
+ end
142
+
143
+ def contributors(doc, role)
144
+ return [] if doc.nil?
145
+
146
+ doc.text.split(", ").map do |contr|
147
+ /(?<an>.+?)(\s+\((?<abbrev>.+?)\))?$/ =~ contr
148
+ if abbrev && an.downcase !~ /(task|force|group)/ && an.split.size.between?(2, 3)
149
+ fullname = RelatonBib::FullName.new(
150
+ completename: RelatonBib::LocalizedString.new(an, "en", "Latn"),
151
+ )
152
+ case abbrev
153
+ when "NIST"
154
+ org_name = "National Institute of Standards and Technology"
155
+ url = "www.nist.gov"
156
+ when "MITRE"
157
+ org_name = abbrev
158
+ url = "www.mitre.org"
159
+ else
160
+ org_name = abbrev
161
+ url = nil
162
+ end
163
+ org = RelatonBib::Organization.new name: org_name, url: url, abbreviation: abbrev
164
+ affiliation = RelatonBib::Affilation.new org
165
+ entity = RelatonBib::Person.new(
166
+ name: fullname, affiliation: [affiliation], contacts: [],
167
+ )
168
+ else
169
+ entity = RelatonBib::Organization.new name: an, abbreviation: abbrev
170
+ end
171
+ RelatonBib::ContributionInfo.new entity: entity, role: [role]
172
+ end
131
173
  end
132
174
 
133
175
  # Fetch abstracts.
@@ -136,9 +178,10 @@ module NistBib
136
178
  def fetch_abstract(doc)
137
179
  abstract_content = doc.xpath('//div[contains(@class, "pub-abstract-callout")]/div[1]/p').text
138
180
  [{
139
- content: abstract_content,
140
- language: 'en',
141
- script: 'Latn'
181
+ content: abstract_content,
182
+ language: "en",
183
+ script: "Latn",
184
+ format: "text/plain",
142
185
  }]
143
186
  end
144
187
 
@@ -146,39 +189,83 @@ module NistBib
146
189
  # @param title [String]
147
190
  # @return [Hash]
148
191
  def fetch_copyright(doc)
149
- name = 'National Institute of Standards and Technology'
150
- url = 'www.nist.gov'
151
- d = doc.at("//strong[text()='Date Published:']/../text()[2]").text.strip
152
- from = d.match(/\d{4}$/).to_s
153
- { owner: { name: name, abbreviation: 'NIST', url: url }, from: from }
192
+ name = "National Institute of Standards and Technology"
193
+ url = "www.nist.gov"
194
+ d = doc.at("//span[@id='pub-release-date']").text.strip
195
+ from = d.match(/\d{4}/).to_s
196
+ { owner: { name: name, abbreviation: "NIST", url: url }, from: from }
154
197
  end
155
198
 
156
199
  # Fetch links.
157
200
  # @param doc [Nokogiri::HTML::Document]
158
- # @param url [String]
159
201
  # @return [Array<Hash>]
160
- def fetch_link(doc, url)
161
- links = [{ type: 'src', content: url }]
162
- obp_elms = doc.at_css('a[data-identity="first-link-display"]')
163
- links << { type: 'obp', content: obp_elms[:href] } if obp_elms
202
+ def fetch_link(doc)
203
+ pub = doc.at "//p/strong[.='Publication:']"
204
+ links = []
205
+ pdf = pub.at "./following-sibling::a[.=' Local Download']"
206
+ links << { type: "pdf", content: pdf[:href] } if pdf
207
+ doi = pub.at("./following-sibling::a[contains(.,'(DOI)')]")
208
+ links << { type: "doi", content: doi[:href] } if doi
164
209
  links
165
210
  end
166
211
 
167
212
  # Fetch relations.
168
213
  # @param doc [Nokogiri::HTML::Document]
169
214
  # @return [Array<Hash>]
170
- # rubocop:disable Metrics/MethodLength
171
215
  def fetch_relations(doc)
172
- relations = doc.xpath('//strong[text()="Other Parts of this Publication:"]/following-sibling::a').map do |r|
173
- { type: 'partOf', identifier: r.text, url: DOMAIN + r[:href] }
216
+ relations = doc.xpath('//span[@id="pub-supersedes-container"]/a').map do |r|
217
+ doc_relation "supersedes", r
174
218
  end
175
219
 
176
- doc.xpath('//strong[text()="Related NIST Publications:"]/following-sibling::a').map do |r|
177
- relations << { type: 'updates', identifier: r.text, url: DOMAIN + r[:href] }
220
+ relations += doc.xpath('//span[@id="pub-part-container"]/a').map do |r|
221
+ doc_relation "partOf", r
222
+ end
223
+
224
+ relations + doc.xpath('//span[@id="pub-related-container"]/a').map do |r|
225
+ doc_relation "updates", r
226
+ end
227
+ end
228
+
229
+ def doc_relation(type, ref)
230
+ RelatonBib::DocumentRelation.new(
231
+ type: type,
232
+ bibitem: RelatonBib::BibliographicItem.new(
233
+ formattedref: RelatonBib::FormattedRef.new(
234
+ content: ref.text, language: "en", script: "Latn", format: "text/plain",
235
+ ),
236
+ link: [RelatonBib::TypedUri.new(type: "src", content: DOMAIN + ref[:href])],
237
+ ),
238
+ )
239
+ end
240
+
241
+ def fetch_nistseries(doc)
242
+ doc.xpath("//p/strong[.='Document History:']/following-sibling::*[not(self::br)]").each do |s|
243
+ NistSeries::ABBREVIATIONS.each do |k, _v|
244
+ return NistSeries.new k if s.text.include? k
245
+ end
178
246
  end
247
+ nil
248
+ end
249
+
250
+ def fetch_keywords(doc)
251
+ kws = doc.xpath "//span[@id='pub-keywords-container']/span"
252
+ kws.map { |kw| Keyword.new kw.text }
253
+ end
254
+
255
+ def fetch_commentperiod(doc)
256
+ cp = doc.at "//span[@id='pub-comments-due']"
257
+ return unless cp
258
+
259
+ to = Date.strptime cp.text.strip, "%B %d, %Y"
260
+
261
+ d = doc.at("//span[@id='pub-release-date']").text.strip
262
+ from = Date.strptime(d, "%B %Y").to_s
179
263
 
180
- relations
264
+ ex = doc.at "//strong[contains(.,'The comment closing date has been extended to')]"
265
+ ext = ex&.text&.match(/\w+\s\d{2},\s\d{4}/).to_s
266
+ extended = ext.empty? ? nil : Date.strptime(ext, "%B %d, %Y")
267
+ CommentPeriod.new from, to, extended
181
268
  end
182
269
  end
183
270
  end
184
- end
271
+ end
@@ -1,3 +1,3 @@
1
1
  module NistBib
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.5".freeze
3
3
  end
@@ -0,0 +1,53 @@
1
+ module NistBib
2
+ class XMLParser < RelatonBib::XMLParser
3
+ class << self
4
+ def from_xml(xml)
5
+ doc = Nokogiri::XML xml
6
+ nistitem = doc.at("/bibitem") || doc.at("/bibdata")
7
+ NistBibliographicItem.new(item_data(nistitem))
8
+ end
9
+
10
+ private
11
+
12
+ def item_data(nistitem)
13
+ data = super
14
+ data.delete :series
15
+ data[:nistseries] = fetch_nistseries(nistitem)
16
+ data[:keyword] = fetch_keyword(nistitem)
17
+ data[:commentperiod] = fetch_commentperiod(nistitem)
18
+ data
19
+ end
20
+
21
+ def fetch_status(item)
22
+ status = item.at "./status"
23
+ return unless status
24
+
25
+ DocumentStatus.new(
26
+ stage: status.at("stage")&.text,
27
+ substage: status.at("substage")&.text,
28
+ iteration: status.at("iteraton")&.text,
29
+ )
30
+ end
31
+
32
+ def fetch_commentperiod(item)
33
+ cp = item.at "./commentperiod"
34
+ return unless cp
35
+
36
+ CommentPeriod.new cp.at("from").text, cp.at("to")&.text, cp.at("extended")&.text
37
+ end
38
+
39
+ def fetch_keyword(item)
40
+ item.xpath("./keyword").map do |kw|
41
+ Keyword.new kw.children.first.to_xml
42
+ end
43
+ end
44
+
45
+ def fetch_nistseries(item)
46
+ series = item.at "./series"
47
+ return unless series
48
+
49
+ NistSeries.new series.at("./abbreviation").text.upcase.gsub("-", " ")
50
+ end
51
+ end
52
+ end
53
+ end
@@ -16,7 +16,7 @@ module Relaton
16
16
  end
17
17
 
18
18
  def from_xml(xml)
19
- IsoBibItem::XMLParser.from_xml xml
19
+ ::NistBib::XMLParser.from_xml xml
20
20
  end
21
21
  end
22
22
  end
data/nistbib.gemspec CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  lib = File.expand_path("../lib", __FILE__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require "nistbib/version"
@@ -9,14 +8,14 @@ Gem::Specification.new do |spec|
9
8
  spec.authors = ["Ribose Inc."]
10
9
  spec.email = ["open.source@ribose.com"]
11
10
 
12
- spec.summary = %q{NistBib: retrive NIST standards.}
13
- spec.description = %q{NistBib: retrive NIST standards.}
11
+ spec.summary = "NistBib: retrive NIST standards."
12
+ spec.description = "NistBib: retrive NIST standards."
14
13
  spec.homepage = "https://github.com/metanorma/nistbib"
15
14
  spec.license = "MIT"
16
15
 
17
16
  # Specify which files should be added to the gem when it is released.
18
17
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
19
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
18
+ spec.files = Dir.chdir(File.expand_path( __dir__)) do
20
19
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
21
20
  end
22
21
  spec.bindir = "exe"
@@ -24,16 +23,16 @@ Gem::Specification.new do |spec|
24
23
  spec.require_paths = ["lib"]
25
24
 
26
25
  spec.add_development_dependency "bundler", "~> 2.0"
27
- spec.add_development_dependency 'equivalent-xml', '~> 0.6'
28
- spec.add_development_dependency "pry-byebug"
29
26
  spec.add_development_dependency "byebug"
27
+ spec.add_development_dependency "debase"
28
+ spec.add_development_dependency "equivalent-xml", "~> 0.6"
29
+ spec.add_development_dependency "pry-byebug"
30
30
  spec.add_development_dependency "rake", "~> 10.0"
31
31
  spec.add_development_dependency "rspec", "~> 3.0"
32
- spec.add_development_dependency 'simplecov'
33
- spec.add_development_dependency 'vcr'
34
- spec.add_development_dependency 'webmock'
35
- spec.add_development_dependency 'ruby-debug-ide'
36
- spec.add_development_dependency 'debase'
32
+ spec.add_development_dependency "ruby-debug-ide"
33
+ spec.add_development_dependency "simplecov"
34
+ spec.add_development_dependency "vcr"
35
+ spec.add_development_dependency "webmock"
37
36
 
38
- spec.add_dependency 'iso-bib-item', '~> 0.4.2'
37
+ spec.add_dependency "relaton-bib", "~> 0.1.1"
39
38
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nistbib
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-04-17 00:00:00.000000000 Z
11
+ date: 2019-05-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -25,21 +25,21 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2.0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: equivalent-xml
28
+ name: byebug
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '0.6'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '0.6'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: pry-byebug
42
+ name: debase
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
@@ -53,7 +53,21 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: byebug
56
+ name: equivalent-xml
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.6'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.6'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry-byebug
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - ">="
@@ -95,21 +109,7 @@ dependencies:
95
109
  - !ruby/object:Gem::Version
96
110
  version: '3.0'
97
111
  - !ruby/object:Gem::Dependency
98
- name: simplecov
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
- - !ruby/object:Gem::Dependency
112
- name: vcr
112
+ name: ruby-debug-ide
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - ">="
@@ -123,7 +123,7 @@ dependencies:
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  - !ruby/object:Gem::Dependency
126
- name: webmock
126
+ name: simplecov
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - ">="
@@ -137,7 +137,7 @@ dependencies:
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
139
  - !ruby/object:Gem::Dependency
140
- name: ruby-debug-ide
140
+ name: vcr
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
143
  - - ">="
@@ -151,7 +151,7 @@ dependencies:
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
153
  - !ruby/object:Gem::Dependency
154
- name: debase
154
+ name: webmock
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
157
  - - ">="
@@ -165,19 +165,19 @@ dependencies:
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
167
  - !ruby/object:Gem::Dependency
168
- name: iso-bib-item
168
+ name: relaton-bib
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
171
  - - "~>"
172
172
  - !ruby/object:Gem::Version
173
- version: 0.4.2
173
+ version: 0.1.1
174
174
  type: :runtime
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
178
  - - "~>"
179
179
  - !ruby/object:Gem::Version
180
- version: 0.4.2
180
+ version: 0.1.1
181
181
  description: 'NistBib: retrive NIST standards.'
182
182
  email:
183
183
  - open.source@ribose.com
@@ -187,6 +187,7 @@ extra_rdoc_files: []
187
187
  files:
188
188
  - ".gitignore"
189
189
  - ".rspec"
190
+ - ".rubocop.yml"
190
191
  - ".travis.yml"
191
192
  - Gemfile
192
193
  - Gemfile.lock
@@ -197,12 +198,18 @@ files:
197
198
  - bin/console
198
199
  - bin/setup
199
200
  - lib/nistbib.rb
201
+ - lib/nistbib/comment_period.rb
202
+ - lib/nistbib/document_status.rb
200
203
  - lib/nistbib/hit.rb
201
204
  - lib/nistbib/hit_collection.rb
205
+ - lib/nistbib/keyword.rb
206
+ - lib/nistbib/nist_bibliographic_item.rb
202
207
  - lib/nistbib/nist_bibliography.rb
208
+ - lib/nistbib/nist_series.rb
203
209
  - lib/nistbib/scrapper.rb
204
210
  - lib/nistbib/version.rb
205
211
  - lib/nistbib/workers_pool.rb
212
+ - lib/nistbib/xml_parser.rb
206
213
  - lib/relaton/processor.rb
207
214
  - nistbib.gemspec
208
215
  homepage: https://github.com/metanorma/nistbib
@@ -225,7 +232,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
225
232
  version: '0'
226
233
  requirements: []
227
234
  rubyforge_project:
228
- rubygems_version: 2.7.6
235
+ rubygems_version: 2.6.12
229
236
  signing_key:
230
237
  specification_version: 4
231
238
  summary: 'NistBib: retrive NIST standards.'