cvelist 0.1.0

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.
Files changed (74) hide show
  1. checksums.yaml +7 -0
  2. data/.document +3 -0
  3. data/.github/workflows/ruby.yml +29 -0
  4. data/.gitignore +6 -0
  5. data/.rspec +1 -0
  6. data/.yardopts +1 -0
  7. data/ChangeLog.md +10 -0
  8. data/Gemfile +13 -0
  9. data/LICENSE.txt +20 -0
  10. data/README.md +82 -0
  11. data/Rakefile +13 -0
  12. data/benchmark.rb +38 -0
  13. data/cvelist.gemspec +61 -0
  14. data/gemspec.yml +21 -0
  15. data/lib/cvelist.rb +2 -0
  16. data/lib/cvelist/cve.rb +83 -0
  17. data/lib/cvelist/directory.rb +80 -0
  18. data/lib/cvelist/exceptions.rb +31 -0
  19. data/lib/cvelist/malformed_cve.rb +42 -0
  20. data/lib/cvelist/range_dir.rb +121 -0
  21. data/lib/cvelist/repository.rb +240 -0
  22. data/lib/cvelist/version.rb +4 -0
  23. data/lib/cvelist/year_dir.rb +178 -0
  24. data/spec/cve_methods_examples.rb +130 -0
  25. data/spec/cve_spec.rb +51 -0
  26. data/spec/cvelist_spec.rb +8 -0
  27. data/spec/directory_spec.rb +83 -0
  28. data/spec/fixtures/CVE-2020-1994.json +140 -0
  29. data/spec/fixtures/cvelist/.gitkeep +0 -0
  30. data/spec/fixtures/cvelist/1999/.gitkeep +0 -0
  31. data/spec/fixtures/cvelist/2000/.gitkeep +0 -0
  32. data/spec/fixtures/cvelist/2001/.gitkeep +0 -0
  33. data/spec/fixtures/cvelist/2002/.gitkeep +0 -0
  34. data/spec/fixtures/cvelist/2003/.gitkeep +0 -0
  35. data/spec/fixtures/cvelist/2004/.gitkeep +0 -0
  36. data/spec/fixtures/cvelist/2005/.gitkeep +0 -0
  37. data/spec/fixtures/cvelist/2006/.gitkeep +0 -0
  38. data/spec/fixtures/cvelist/2007/.gitkeep +0 -0
  39. data/spec/fixtures/cvelist/2008/.gitkeep +0 -0
  40. data/spec/fixtures/cvelist/2009/.gitkeep +0 -0
  41. data/spec/fixtures/cvelist/2010/.gitkeep +0 -0
  42. data/spec/fixtures/cvelist/2011/.gitkeep +0 -0
  43. data/spec/fixtures/cvelist/2012/.gitkeep +0 -0
  44. data/spec/fixtures/cvelist/2013/.gitkeep +0 -0
  45. data/spec/fixtures/cvelist/2014/.gitkeep +0 -0
  46. data/spec/fixtures/cvelist/2015/.gitkeep +0 -0
  47. data/spec/fixtures/cvelist/2016/.gitkeep +0 -0
  48. data/spec/fixtures/cvelist/2017/.gitkeep +0 -0
  49. data/spec/fixtures/cvelist/2018/.gitkeep +0 -0
  50. data/spec/fixtures/cvelist/2019/.gitkeep +0 -0
  51. data/spec/fixtures/cvelist/2020/.gitkeep +0 -0
  52. data/spec/fixtures/cvelist/2021/.gitkeep +0 -0
  53. data/spec/fixtures/cvelist/2021/0xxx/.gitkeep +0 -0
  54. data/spec/fixtures/cvelist/2021/1xxx/.gitkeep +0 -0
  55. data/spec/fixtures/cvelist/2021/20xxx/.gitkeep +0 -0
  56. data/spec/fixtures/cvelist/2021/21xxx/.gitkeep +0 -0
  57. data/spec/fixtures/cvelist/2021/2xxx/.gitkeep +0 -0
  58. data/spec/fixtures/cvelist/2021/2xxx/CVE-2021-2000.json +18 -0
  59. data/spec/fixtures/cvelist/2021/2xxx/CVE-2021-2001.json +18 -0
  60. data/spec/fixtures/cvelist/2021/2xxx/CVE-2021-2002.json +18 -0
  61. data/spec/fixtures/cvelist/2021/2xxx/CVE-2021-2003.json +18 -0
  62. data/spec/fixtures/cvelist/2021/2xxx/CVE-2021-2004.json +18 -0
  63. data/spec/fixtures/cvelist/2021/2xxx/CVE-2021-2005.json +18 -0
  64. data/spec/fixtures/cvelist/2021/2xxx/CVE-2021-2006.json +18 -0
  65. data/spec/fixtures/cvelist/2021/2xxx/CVE-2021-2007.json +18 -0
  66. data/spec/fixtures/cvelist/2021/2xxx/CVE-2021-2008.json +18 -0
  67. data/spec/fixtures/cvelist/2021/2xxx/CVE-2021-2009.json +18 -0
  68. data/spec/fixtures/cvelist/2021/2xxx/CVE-2021-2998.json +3 -0
  69. data/spec/fixtures/cvelist/2021/2xxx/CVE-2021-2999.json +2 -0
  70. data/spec/range_dir_spec.rb +55 -0
  71. data/spec/repository_spec.rb +248 -0
  72. data/spec/spec_helper.rb +4 -0
  73. data/spec/year_dir_spec.rb +96 -0
  74. metadata +165 -0
@@ -0,0 +1,4 @@
1
+ require 'rspec'
2
+ require 'cvelist/version'
3
+
4
+ include CVEList
@@ -0,0 +1,96 @@
1
+ require 'spec_helper'
2
+ require 'cvelist/year_dir'
3
+
4
+ describe YearDir do
5
+ let(:year_number) { 2021 }
6
+
7
+ let(:fixture_dir) { File.expand_path('../fixtures',__FILE__) }
8
+ let(:cvelist_dir) { File.join(fixture_dir,'cvelist') }
9
+ let(:path) { File.join(cvelist_dir,year_number.to_s) }
10
+
11
+ subject { described_class.new(path) }
12
+
13
+ describe "#initialize" do
14
+ it "must set #year" do
15
+ expect(subject.year).to eq(year_number)
16
+ end
17
+ end
18
+
19
+ describe "#has_range?" do
20
+ let(:xxx_range) { '1xxx' }
21
+
22
+ it "must test whether the year directory contains the '*xxx' range dir" do
23
+ expect(subject.has_range?(xxx_range)).to eq(true)
24
+ end
25
+
26
+ context "when the year directory does not have the given '*xxx' range dir" do
27
+ let(:xxx_range) { '9xxx' }
28
+
29
+ it "must return false" do
30
+ expect(subject.has_range?(xxx_range)).to eq(false)
31
+ end
32
+ end
33
+ end
34
+
35
+ describe "#range" do
36
+ context "when the year directory has the given '*xxx' range dir" do
37
+ let(:xxx_range) { '1xxx' }
38
+
39
+ subject { super().range(xxx_range) }
40
+
41
+ it "must return a RangeDir object for the given '*xxx' range" do
42
+ expect(subject).to be_kind_of(RangeDir)
43
+ expect(subject.path).to eq(File.join(path,xxx_range))
44
+ end
45
+ end
46
+
47
+ context "when the year directory does not have the given '*xxx' range dir" do
48
+ let(:xxx_range) { '9xxx' }
49
+
50
+ it do
51
+ expect {
52
+ subject.range(xxx_range)
53
+ }.to raise_error(RangeDirNotFound)
54
+ end
55
+ end
56
+ end
57
+
58
+ let(:xxx_ranges) { %w[0xxx 1xxx 20xxx 21xxx 2xxx] }
59
+ let(:xxx_range_paths) do
60
+ xxx_ranges.map { |dir| File.join(path,dir) }
61
+ end
62
+
63
+ let(:sorted_xxx_ranges) { xxx_ranges.sort }
64
+ let(:sorted_xxx_range_paths) do
65
+ sorted_xxx_ranges.map { |dir| File.join(path,dir) }
66
+ end
67
+
68
+ describe "#directories" do
69
+ subject { super().directories }
70
+
71
+ it "must find all '*xxx' range directories" do
72
+ expect(subject).to all(be =~ /\/\d+xxx$/)
73
+ end
74
+
75
+ it "must return the paths to '*xxx' range directories within the year directory" do
76
+ expect(subject).to match_array(xxx_range_paths)
77
+ end
78
+
79
+ it "must sort the '*xxx' range directories" do
80
+ expect(subject).to eq(sorted_xxx_range_paths)
81
+ end
82
+ end
83
+
84
+ describe "#ranges" do
85
+ it do
86
+ expect(subject.ranges).to_not be_empty
87
+ expect(subject.ranges).to all(be_kind_of(RangeDir))
88
+ end
89
+
90
+ it "must map #directories to RangeDir objects" do
91
+ expect(subject.ranges.map(&:path)).to eq(sorted_xxx_range_paths)
92
+ end
93
+ end
94
+
95
+ include_examples "CVE methods"
96
+ end
metadata ADDED
@@ -0,0 +1,165 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cvelist
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Postmodern
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-01-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: multi_json
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: cve_schema
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.1'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.0'
55
+ description: 'A Ruby library for parsing the CVE JSON in the cvelist git repository.
56
+
57
+ '
58
+ email: postmodern.mod3@gmail.com
59
+ executables: []
60
+ extensions: []
61
+ extra_rdoc_files:
62
+ - ChangeLog.md
63
+ - LICENSE.txt
64
+ - README.md
65
+ files:
66
+ - ".document"
67
+ - ".github/workflows/ruby.yml"
68
+ - ".gitignore"
69
+ - ".rspec"
70
+ - ".yardopts"
71
+ - ChangeLog.md
72
+ - Gemfile
73
+ - LICENSE.txt
74
+ - README.md
75
+ - Rakefile
76
+ - benchmark.rb
77
+ - cvelist.gemspec
78
+ - gemspec.yml
79
+ - lib/cvelist.rb
80
+ - lib/cvelist/cve.rb
81
+ - lib/cvelist/directory.rb
82
+ - lib/cvelist/exceptions.rb
83
+ - lib/cvelist/malformed_cve.rb
84
+ - lib/cvelist/range_dir.rb
85
+ - lib/cvelist/repository.rb
86
+ - lib/cvelist/version.rb
87
+ - lib/cvelist/year_dir.rb
88
+ - spec/cve_methods_examples.rb
89
+ - spec/cve_spec.rb
90
+ - spec/cvelist_spec.rb
91
+ - spec/directory_spec.rb
92
+ - spec/fixtures/CVE-2020-1994.json
93
+ - spec/fixtures/cvelist/.gitkeep
94
+ - spec/fixtures/cvelist/1999/.gitkeep
95
+ - spec/fixtures/cvelist/2000/.gitkeep
96
+ - spec/fixtures/cvelist/2001/.gitkeep
97
+ - spec/fixtures/cvelist/2002/.gitkeep
98
+ - spec/fixtures/cvelist/2003/.gitkeep
99
+ - spec/fixtures/cvelist/2004/.gitkeep
100
+ - spec/fixtures/cvelist/2005/.gitkeep
101
+ - spec/fixtures/cvelist/2006/.gitkeep
102
+ - spec/fixtures/cvelist/2007/.gitkeep
103
+ - spec/fixtures/cvelist/2008/.gitkeep
104
+ - spec/fixtures/cvelist/2009/.gitkeep
105
+ - spec/fixtures/cvelist/2010/.gitkeep
106
+ - spec/fixtures/cvelist/2011/.gitkeep
107
+ - spec/fixtures/cvelist/2012/.gitkeep
108
+ - spec/fixtures/cvelist/2013/.gitkeep
109
+ - spec/fixtures/cvelist/2014/.gitkeep
110
+ - spec/fixtures/cvelist/2015/.gitkeep
111
+ - spec/fixtures/cvelist/2016/.gitkeep
112
+ - spec/fixtures/cvelist/2017/.gitkeep
113
+ - spec/fixtures/cvelist/2018/.gitkeep
114
+ - spec/fixtures/cvelist/2019/.gitkeep
115
+ - spec/fixtures/cvelist/2020/.gitkeep
116
+ - spec/fixtures/cvelist/2021/.gitkeep
117
+ - spec/fixtures/cvelist/2021/0xxx/.gitkeep
118
+ - spec/fixtures/cvelist/2021/1xxx/.gitkeep
119
+ - spec/fixtures/cvelist/2021/20xxx/.gitkeep
120
+ - spec/fixtures/cvelist/2021/21xxx/.gitkeep
121
+ - spec/fixtures/cvelist/2021/2xxx/.gitkeep
122
+ - spec/fixtures/cvelist/2021/2xxx/CVE-2021-2000.json
123
+ - spec/fixtures/cvelist/2021/2xxx/CVE-2021-2001.json
124
+ - spec/fixtures/cvelist/2021/2xxx/CVE-2021-2002.json
125
+ - spec/fixtures/cvelist/2021/2xxx/CVE-2021-2003.json
126
+ - spec/fixtures/cvelist/2021/2xxx/CVE-2021-2004.json
127
+ - spec/fixtures/cvelist/2021/2xxx/CVE-2021-2005.json
128
+ - spec/fixtures/cvelist/2021/2xxx/CVE-2021-2006.json
129
+ - spec/fixtures/cvelist/2021/2xxx/CVE-2021-2007.json
130
+ - spec/fixtures/cvelist/2021/2xxx/CVE-2021-2008.json
131
+ - spec/fixtures/cvelist/2021/2xxx/CVE-2021-2009.json
132
+ - spec/fixtures/cvelist/2021/2xxx/CVE-2021-2998.json
133
+ - spec/fixtures/cvelist/2021/2xxx/CVE-2021-2999.json
134
+ - spec/range_dir_spec.rb
135
+ - spec/repository_spec.rb
136
+ - spec/spec_helper.rb
137
+ - spec/year_dir_spec.rb
138
+ homepage: https://github.com/postmodern/cvelist.rb#readme
139
+ licenses:
140
+ - MIT
141
+ metadata:
142
+ documentation_uri: https://rubydoc.info/gems/cvelist
143
+ source_code_uri: https://github.com/postmodern/cvelist.rb
144
+ bug_tracker_uri: https://github.com/postmodern/cvelist.rb/issues
145
+ changelog_uri: https://github.com/postmodern/cvelist.rb/blob/main/ChangeLog.md
146
+ post_install_message:
147
+ rdoc_options: []
148
+ require_paths:
149
+ - lib
150
+ required_ruby_version: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ version: '0'
155
+ required_rubygems_version: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ requirements: []
161
+ rubygems_version: 3.1.4
162
+ signing_key:
163
+ specification_version: 4
164
+ summary: Parses cvelist JSON
165
+ test_files: []