Class: RelatonNist::HitCollection

Inherits:
RelatonBib::HitCollection
  • Object
show all
Defined in:
lib/relaton_nist/hit_collection.rb

Overview

Page of hit collection.

Constant Summary collapse

DOMAIN =
"https://csrc.nist.gov"
PUBS_EXPORT =
URI.join(DOMAIN, "/CSRC/media/feeds/metanorma/pubs-export")
DATAFILEDIR =
File.expand_path ".relaton/nist", Dir.home
DATAFILE =
File.expand_path "pubs-export.zip", DATAFILEDIR
GHNISTDATA =
"https://raw.githubusercontent.com/relaton/relaton-data-nist/main/data/"

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.search(text, year = nil, opts = {}) ⇒ Object



18
19
20
# File 'lib/relaton_nist/hit_collection.rb', line 18

def self.search(text, year = nil, opts = {})
  new(text, year).search(opts)
end

Instance Method Details

#search(opts) ⇒ Object



22
23
24
25
26
# File 'lib/relaton_nist/hit_collection.rb', line 22

def search(opts)
  @array = from_json(**opts)
  @array = from_ga unless @array.any?
  sort_hits!
end

#search_filterArray<RelatonNist::Hit>

Returns:



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/relaton_nist/hit_collection.rb', line 29

def search_filter # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/PerceivedComplexity
  @array.select do |item|
    %r{
      ^(?:(?:NIST|NBS)\s?)?
      (?:(?<series>(?:SP|FIPS|IR|ITL\sBulletin|White\sPaper))\s)?
      (?<code>[0-9-]{3,}[A-Z]?)
      (?<prt1>pt\d+)?
      (?<vol1>v\d+)?
      (?<ver1>ver[\d.]+)?
      (?<rev1>r\d+)?
      (?:\s(?<prt2>Part\s\d+))?
      (?:\s(?<vol2>Vol\.\s\d+))?
      (?:\s(?<ver2>(?:Ver\.|Version)\s[\d.]+))?
      (?:\s(?<rev2>Rev\.\s\d+))?
      (?:\s(?<add>Add)endum)?
    }x =~ item.hit[:code]
    (refparts[:code] && [series, item.hit[:series]].include?(refparts[:series]) && refparts[:code] == code &&
      long_to_short(refparts[:prt1], refparts[:prt2]) == long_to_short(prt1, prt2) &&
      long_to_short(refparts[:vol1], refparts[:vol2]) == long_to_short(vol1, vol2) &&
      long_to_short(refparts[:ver1], refparts[:ver2]) == long_to_short(ver1, ver2) &&
      long_to_short(refparts[:rev1], refparts[:rev2]) == long_to_short(rev1, rev2) &&
      long_to_short(refparts[:add1], refparts[:add2]) == add) || item.hit[:title]&.include?(text.sub(/^NIST\s/, ""))
  end
end