nvd_feed_api 0.0.3 → 0.3.1
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 +5 -5
- data/.gitignore +1 -1
- data/.gitlab-ci.yml +25 -10
- data/.rubocop.yml +12 -5
- data/.tool-versions +1 -0
- data/Gemfile.lock +67 -0
- data/README.md +2 -1
- data/lib/nvd_feed_api.rb +44 -456
- data/lib/nvd_feed_api/feed.rb +410 -0
- data/lib/nvd_feed_api/meta.rb +116 -0
- data/lib/nvd_feed_api/version.rb +1 -1
- data/nvd_feed_api.gemspec +12 -12
- data/pages/CHANGELOG.md +50 -4
- data/pages/EXAMPLES.md +3 -5
- data/pages/INSTALL.md +2 -9
- data/renovate.json +15 -0
- data/test/test_nvd_feed_api.rb +89 -56
- metadata +39 -29
data/lib/nvd_feed_api/version.rb
CHANGED
data/nvd_feed_api.gemspec
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
lib = File.expand_path('
|
1
|
+
lib = File.expand_path('lib', __dir__)
|
2
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
3
|
require 'nvd_feed_api/version'
|
4
4
|
|
@@ -6,7 +6,7 @@ Gem::Specification.new do |s|
|
|
6
6
|
s.name = 'nvd_feed_api'
|
7
7
|
s.version = NvdFeedApi::VERSION
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
|
-
s.date = '
|
9
|
+
s.date = '2020-10-03'
|
10
10
|
s.summary = 'API for NVD CVE feeds'
|
11
11
|
s.description = 'A simple API for NVD CVE feeds'
|
12
12
|
s.authors = ['Alexandre ZANNI']
|
@@ -31,16 +31,16 @@ Gem::Specification.new do |s|
|
|
31
31
|
|
32
32
|
s.required_ruby_version = '~> 2.4'
|
33
33
|
|
34
|
-
s.add_dependency('archive-zip', '~> 0.
|
35
|
-
s.add_dependency('nokogiri', '~> 1.
|
36
|
-
s.add_dependency('oj', '
|
34
|
+
s.add_dependency('archive-zip', '~> 0.11')
|
35
|
+
s.add_dependency('nokogiri', '~> 1.10')
|
36
|
+
s.add_dependency('oj', '>= 3.7.8', '<4')
|
37
37
|
|
38
|
-
s.add_development_dependency('bundler', '~> 1
|
39
|
-
s.add_development_dependency('commonmarker', '~> 0.
|
40
|
-
s.add_development_dependency('github-markup', '~>
|
41
|
-
s.add_development_dependency('minitest', '~> 5.
|
42
|
-
s.add_development_dependency('rake', '~>
|
43
|
-
s.add_development_dependency('redcarpet', '~> 3.
|
44
|
-
s.add_development_dependency('rubocop', '~> 0.
|
38
|
+
s.add_development_dependency('bundler', '~> 2.1')
|
39
|
+
s.add_development_dependency('commonmarker', '~> 0.21') # for GMF support in YARD
|
40
|
+
s.add_development_dependency('github-markup', '~> 3.0') # for GMF support in YARD
|
41
|
+
s.add_development_dependency('minitest', '~> 5.14')
|
42
|
+
s.add_development_dependency('rake', '~> 13.0')
|
43
|
+
s.add_development_dependency('redcarpet', '~> 3.5') # for GMF support in YARD
|
44
|
+
s.add_development_dependency('rubocop', '~> 0.92')
|
45
45
|
s.add_development_dependency('yard', '~> 0.9')
|
46
46
|
end
|
data/pages/CHANGELOG.md
CHANGED
@@ -1,4 +1,50 @@
|
|
1
|
-
# [0.0
|
1
|
+
# [0.3.0] - 22 January 2019
|
2
|
+
|
3
|
+
[0.3.1]: https://gitlab.com/noraj/nvd_api/tags/v0.3.1
|
4
|
+
|
5
|
+
- fix scrap method to reflect NVD feeds page changes
|
6
|
+
- update dependencies
|
7
|
+
- update rubocop rules
|
8
|
+
|
9
|
+
[0.3.0]: https://gitlab.com/noraj/nvd_api/tags/v0.3.0
|
10
|
+
|
11
|
+
- update dependencies: updated gemspec, ruby 2.6 support, fix gem doc flag, fix oj crash (seg fault)
|
12
|
+
- Gemfile.lock: now Gemfile.lock is not ignored anymore
|
13
|
+
- gitlab-ci: add ruby 2.6 test, add caching key, and anchors for better reuse, always use bundle
|
14
|
+
- NVDFeedScraper `scrap` method: change return value
|
15
|
+
- rubocop: fix lint
|
16
|
+
|
17
|
+
# [0.2.1] - 2 May 2018
|
18
|
+
|
19
|
+
[0.2.1]: https://gitlab.com/noraj/nvd_api/tags/v0.2.1
|
20
|
+
|
21
|
+
- Gitlab-CI: test with ruby 2.4.x and 2.5.x
|
22
|
+
- style: fix Style/ExpandPathArguments cop
|
23
|
+
- security: fix Security/Open cop, protect from pipe command injection
|
24
|
+
- test: fix NVD URL after NVD changed it
|
25
|
+
|
26
|
+
# [0.2.0] - 20 January 2018
|
27
|
+
|
28
|
+
[0.2.0]: https://gitlab.com/noraj/nvd_api/tags/v0.2.0
|
29
|
+
|
30
|
+
- new attributes for the Feed class:
|
31
|
+
+ `data_type`
|
32
|
+
+ `data_format`
|
33
|
+
+ `data_version`
|
34
|
+
+ `data_number_of_cves`
|
35
|
+
+ `data_timestamp`
|
36
|
+
- fix `update_feeds` method by using the new `update!` method from the Feed class
|
37
|
+
- split source code in several files, one by class
|
38
|
+
- improve tests and documentation
|
39
|
+
|
40
|
+
# [0.1.0] - 17 January 2018
|
41
|
+
|
42
|
+
[0.1.0]: https://gitlab.com/noraj/nvd_api/tags/v0.1.0
|
43
|
+
|
44
|
+
- add support for CVE from 1999 to 2001
|
45
|
+
- fix tests
|
46
|
+
|
47
|
+
# [0.0.3] - 6 January 2018
|
2
48
|
|
3
49
|
[0.0.3]: https://gitlab.com/noraj/nvd_api/tags/v0.0.3
|
4
50
|
|
@@ -6,14 +52,14 @@
|
|
6
52
|
- new badges on README
|
7
53
|
- As rubydoc.info seems bug, use gitlab pages instead for hosting YARD doc
|
8
54
|
|
9
|
-
# [0.0.2.pre] - 5 January
|
55
|
+
# [0.0.2.pre] - 5 January 2018
|
10
56
|
|
11
57
|
[0.0.2.pre]: https://gitlab.com/noraj/nvd_api/tags/v0.0.2.pre
|
12
58
|
|
13
59
|
- Test a new version number to fix a bug with rubygems.org
|
14
60
|
- Correct month name in the dates in the CHANGELOG
|
15
61
|
|
16
|
-
# [0.0.1.rc2] - 4 January
|
62
|
+
# [0.0.1.rc2] - 4 January 2018
|
17
63
|
|
18
64
|
[0.0.1.rc2]: https://gitlab.com/noraj/nvd_api/tags/v0.0.1.rc2
|
19
65
|
|
@@ -21,7 +67,7 @@
|
|
21
67
|
- Improve the README to be a good entrypoint.
|
22
68
|
- Improve the FEATURES.
|
23
69
|
|
24
|
-
# [0.0.1.rc1] - 4 January
|
70
|
+
# [0.0.1.rc1] - 4 January 2018
|
25
71
|
|
26
72
|
[0.0.1.rc1]: https://gitlab.com/noraj/nvd_api/tags/v0.0.1.rc1
|
27
73
|
|
data/pages/EXAMPLES.md
CHANGED
@@ -12,10 +12,8 @@ s.scrap
|
|
12
12
|
# Change the default feed storage location beacause default value is '/tmp/'.
|
13
13
|
# '/tmp/' is mounted as tmpFS and is cleaned at every start.
|
14
14
|
# This will considerably speed up your performance is you have to reboot.
|
15
|
-
NVDFeedScraper::Feed.default_storage_location = "/home/
|
15
|
+
NVDFeedScraper::Feed.default_storage_location = "/home/user/Dev/cve_feeds"
|
16
16
|
# Create a {Feed} object for all available feeds
|
17
|
-
|
18
|
-
|
19
|
-
f.json_pull
|
20
|
-
end
|
17
|
+
# and for each one download the JSON file and fill the attributes.
|
18
|
+
s.feeds(s.available_feeds).each(&:json_pull)
|
21
19
|
```
|
data/pages/INSTALL.md
CHANGED
@@ -10,14 +10,7 @@ $ gem install nvd_feed_api
|
|
10
10
|
|
11
11
|
## Development
|
12
12
|
|
13
|
-
It's better to use [
|
14
|
-
|
15
|
-
To keep clean gem dependencies create a gemset with rvm:
|
16
|
-
|
17
|
-
```
|
18
|
-
$ rvm gemset create nvd_feed_api
|
19
|
-
$ rvm gemset use nvd_feed_api
|
20
|
-
```
|
13
|
+
It's better to use [rbenv](https://github.com/rbenv/rbenv) to have latests version of ruby and to avoid trashing your system ruby.
|
21
14
|
|
22
15
|
### Install from rubygems.org
|
23
16
|
|
@@ -53,7 +46,7 @@ Note: if an automatic install is needed you can get the version with `$ gem buil
|
|
53
46
|
|
54
47
|
### Run the API in irb without installing the gem
|
55
48
|
|
56
|
-
|
49
|
+
Useful when you want to try your changes without building the gem and re-installing it each time.
|
57
50
|
|
58
51
|
```
|
59
52
|
$ git clone https://gitlab.com/noraj/nvd_api.git nvd_feed_api
|
data/renovate.json
ADDED
data/test/test_nvd_feed_api.rb
CHANGED
@@ -9,7 +9,7 @@ class NVDAPITest < Minitest::Test
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def test_scraper_scrap
|
12
|
-
|
12
|
+
assert_operator(0, :<, @s.scrap, 'scrap method returns nothing')
|
13
13
|
end
|
14
14
|
|
15
15
|
def test_scraper_feeds_noarg
|
@@ -51,34 +51,34 @@ class NVDAPITest < Minitest::Test
|
|
51
51
|
refute_empty(@s.cve(['CVE-2014-0160', 'cve-2009-3555']), 'cve returns an empty array')
|
52
52
|
# bad arg
|
53
53
|
## string but not a CVE ID
|
54
|
-
assert_raises(RuntimeError) do
|
55
|
-
|
56
|
-
assert_equal(err.message, 'bad CVE name')
|
54
|
+
err = assert_raises(RuntimeError) do
|
55
|
+
@s.cve('e')
|
57
56
|
end
|
57
|
+
assert_equal('bad CVE name', err.message)
|
58
58
|
## correct CVE ID but bad year
|
59
|
-
assert_raises(RuntimeError) do
|
60
|
-
|
61
|
-
assert_equal(err.message, 'bad CVE year in ["CVE-2001-31337"]')
|
59
|
+
err = assert_raises(RuntimeError) do
|
60
|
+
@s.cve('CVE-1800-31337')
|
62
61
|
end
|
62
|
+
assert_equal('bad CVE year in ["CVE-1800-31337"]', err.message)
|
63
63
|
## correct CVE ID and year but unexisting CVE
|
64
64
|
assert_nil(@s.cve('CVE-2004-31337'))
|
65
65
|
## correct CVE ID and year but unexisting CVE with array arg
|
66
|
-
assert_raises(RuntimeError) do
|
67
|
-
|
68
|
-
assert_equal(err.message, 'CVE-2005-31337 are unexisting CVEs in this feed')
|
66
|
+
err = assert_raises(RuntimeError) do
|
67
|
+
@s.cve(['CVE-2004-31337', 'CVE-2005-31337'])
|
69
68
|
end
|
69
|
+
assert_equal('CVE-2005-31337 are unexisting CVEs in this feed', err.message)
|
70
70
|
## wrong arg type
|
71
|
-
assert_raises(RuntimeError) do
|
72
|
-
|
73
|
-
assert_equal(err.message, 'the provided argument (1) is nor a String or an Array')
|
71
|
+
err = assert_raises(RuntimeError) do
|
72
|
+
@s.cve(1)
|
74
73
|
end
|
74
|
+
assert_equal('the provided argument (1) is nor a String or an Array', err.message)
|
75
75
|
end
|
76
76
|
|
77
77
|
def test_scraper_update_feeds
|
78
78
|
f2017, f2016, f_modified = @s.feeds('CVE-2017', 'CVE-2016', 'CVE-Modified')
|
79
79
|
# one arg
|
80
80
|
# can't use assert_instance_of because there is no boolean class
|
81
|
-
assert(
|
81
|
+
assert(['TrueClass', 'FalseClass'].include?(@s.update_feeds(f2017).class.to_s), "update_feeds doesn't return a boolean")
|
82
82
|
# two args
|
83
83
|
assert_instance_of(Array, @s.update_feeds(f2017, f2016), "update_feeds doesn't return an array")
|
84
84
|
refute_empty(@s.update_feeds(f2017, f2016), 'update_feeds returns an empty array')
|
@@ -87,10 +87,10 @@ class NVDAPITest < Minitest::Test
|
|
87
87
|
refute_empty(@s.update_feeds([f2017, f_modified]), 'update_feeds returns an empty array')
|
88
88
|
# bad arg
|
89
89
|
## wrong arg type
|
90
|
-
assert_raises(RuntimeError) do
|
91
|
-
|
92
|
-
assert_equal(err.message, 'the provided argument 1 is not a Feed or an Array')
|
90
|
+
err = assert_raises(RuntimeError) do
|
91
|
+
@s.update_feeds(1)
|
93
92
|
end
|
93
|
+
assert_equal(err.message, 'the provided argument 1 is not a Feed or an Array')
|
94
94
|
## empty array
|
95
95
|
assert_empty(@s.update_feeds([]))
|
96
96
|
end
|
@@ -102,40 +102,60 @@ class NVDAPITest < Minitest::Test
|
|
102
102
|
assert_instance_of(String, default_val, "default_storage_location doesn't return a string")
|
103
103
|
# check new value
|
104
104
|
new_val = '/srv/downloads/'
|
105
|
-
assert_equal(NVDFeedScraper::Feed.default_storage_location = new_val,
|
105
|
+
assert_equal(new_val, NVDFeedScraper::Feed.default_storage_location = new_val, 'the new value was not set properly')
|
106
106
|
# put the default value back / restore context
|
107
107
|
NVDFeedScraper::Feed.default_storage_location = default_val
|
108
108
|
end
|
109
109
|
|
110
110
|
def test_feed_attributes
|
111
111
|
name = 'CVE-2010'
|
112
|
-
meta_url = 'https://
|
113
|
-
gz_url = 'https://
|
114
|
-
zip_url = 'https://
|
112
|
+
meta_url = 'https://nvd.nist.gov/feeds/json/cve/1.1/nvdcve-1.1-2010.meta'
|
113
|
+
gz_url = 'https://nvd.nist.gov/feeds/json/cve/1.1/nvdcve-1.1-2010.json.gz'
|
114
|
+
zip_url = 'https://nvd.nist.gov/feeds/json/cve/1.1/nvdcve-1.1-2010.json.zip'
|
115
115
|
f = @s.feeds('CVE-2010')
|
116
116
|
# Test name
|
117
117
|
assert_instance_of(String, f.name, "name doesn't return a string")
|
118
118
|
refute_empty(f.name, 'name is empty')
|
119
|
-
assert_equal(
|
119
|
+
assert_equal(name, f.name, 'The name of the feed was modified')
|
120
120
|
# Test updated
|
121
121
|
assert_instance_of(String, f.updated, "updated doesn't return a string")
|
122
122
|
refute_empty(f.updated, 'updated is empty')
|
123
|
-
# Test meta
|
124
|
-
assert_nil(f.meta)
|
125
|
-
# Test json_file
|
126
|
-
assert_nil(f.json_file)
|
127
123
|
# Test gz_url
|
128
124
|
assert_instance_of(String, f.gz_url, "gz_url doesn't return a string")
|
129
125
|
refute_empty(f.gz_url, 'gz_url is empty')
|
130
|
-
assert_equal(
|
126
|
+
assert_equal(gz_url, f.gz_url, 'The gz_url of the feed was modified')
|
131
127
|
# Test zip_url
|
132
128
|
assert_instance_of(String, f.zip_url, "zip_url doesn't return a string")
|
133
129
|
refute_empty(f.zip_url, 'zip_url is empty')
|
134
|
-
assert_equal(
|
130
|
+
assert_equal(zip_url, f.zip_url, 'The zip_url url of the feed was modified')
|
135
131
|
# Test meta_url
|
136
132
|
assert_instance_of(String, f.meta_url, "meta_url doesn't return a string")
|
137
133
|
refute_empty(f.meta_url, 'meta_url is empty')
|
138
|
-
assert_equal(
|
134
|
+
assert_equal(meta_url, f.meta_url, 'The meta_url url of the feed was modified')
|
135
|
+
# Test meta (before json_pull)
|
136
|
+
assert_nil(f.meta)
|
137
|
+
# Test json_file
|
138
|
+
assert_nil(f.json_file)
|
139
|
+
f.json_pull
|
140
|
+
assert_instance_of(String, f.json_file, "json_file doesn't return a string")
|
141
|
+
refute_empty(f.json_file, 'json_file is empty')
|
142
|
+
# Test meta (after json_pull)
|
143
|
+
f.meta_pull
|
144
|
+
assert_instance_of(NVDFeedScraper::Meta, f.meta, "meta doesn't return a Meta object")
|
145
|
+
|
146
|
+
# Test data (require json_pull)
|
147
|
+
# Test data_type
|
148
|
+
assert_instance_of(String, f.data_type, "data_type doesn't return a String")
|
149
|
+
refute_empty(f.data_type, 'data_type is empty')
|
150
|
+
# Test data_format
|
151
|
+
assert_instance_of(String, f.data_format, "data_format doesn't return a String")
|
152
|
+
refute_empty(f.data_format, 'data_format is empty')
|
153
|
+
# Test data_version
|
154
|
+
assert_instance_of(Float, f.data_version, "data_version doesn't return a Float")
|
155
|
+
# Test data_number_of_cves
|
156
|
+
assert_instance_of(Integer, f.data_number_of_cves, "data_number_of_cves doesn't return an Integer")
|
157
|
+
# Test data_timestamp
|
158
|
+
assert_instance_of(Date, f.data_timestamp, "data_timestamp doesn't return a Date")
|
139
159
|
end
|
140
160
|
|
141
161
|
def test_feed_available_cves
|
@@ -149,31 +169,31 @@ class NVDAPITest < Minitest::Test
|
|
149
169
|
f = @s.feeds('CVE-2012')
|
150
170
|
f.json_pull
|
151
171
|
# one arg
|
152
|
-
assert_instance_of(Hash,
|
172
|
+
assert_instance_of(Hash, f.cve('CVE-2012-4969'), "cve doesn't return a hash")
|
153
173
|
# two args
|
154
|
-
assert_instance_of(Array,
|
155
|
-
refute_empty(
|
174
|
+
assert_instance_of(Array, f.cve('CVE-2012-4969', 'cve-2012-1889'), "cve doesn't return an array")
|
175
|
+
refute_empty(f.cve('CVE-2012-4969', 'cve-2012-1889'), 'cve returns an empty array')
|
156
176
|
# array arg
|
157
|
-
assert_instance_of(Array,
|
158
|
-
refute_empty(
|
177
|
+
assert_instance_of(Array, f.cve(['CVE-2012-4969', 'cve-2012-1889']), "cve doesn't return an array")
|
178
|
+
refute_empty(f.cve(['CVE-2012-4969', 'cve-2012-1889']), 'cve returns an empty array')
|
159
179
|
# bad arg
|
160
180
|
## string but not a CVE ID
|
161
|
-
assert_raises(RuntimeError) do
|
162
|
-
|
163
|
-
assert_equal(err.message, 'bad CVE name')
|
181
|
+
err = assert_raises(RuntimeError) do
|
182
|
+
f.cve('e')
|
164
183
|
end
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
184
|
+
assert_equal('bad CVE name (e)', err.message)
|
185
|
+
## bad year
|
186
|
+
assert_nil(f.cve('CVE-2004-31337'))
|
187
|
+
## bad year not in the feed with array arg
|
188
|
+
err = assert_raises(RuntimeError) do
|
189
|
+
f.cve(['CVE-2004-31337', 'CVE-2005-31337'])
|
171
190
|
end
|
191
|
+
assert_equal('CVE-2004-31337, CVE-2005-31337 are unexisting CVEs in this feed', err.message)
|
172
192
|
## wrong arg type
|
173
|
-
assert_raises(RuntimeError) do
|
174
|
-
|
175
|
-
assert_equal(err.message, 'the provided argument (1) is nor a String or an Array')
|
193
|
+
err = assert_raises(RuntimeError) do
|
194
|
+
f.cve(1)
|
176
195
|
end
|
196
|
+
assert_equal('the provided argument (1) is nor a String or an Array', err.message)
|
177
197
|
end
|
178
198
|
|
179
199
|
def test_feed_download_gz
|
@@ -202,30 +222,43 @@ class NVDAPITest < Minitest::Test
|
|
202
222
|
|
203
223
|
def test_feed_meta_pull
|
204
224
|
f = @s.feeds('CVE-2005')
|
205
|
-
|
206
|
-
|
225
|
+
assert_instance_of(NVDFeedScraper::Meta, f.meta_pull, "meta_pull doesn't return a Meta object")
|
226
|
+
end
|
227
|
+
|
228
|
+
def test_feed_update!
|
229
|
+
f = @s.feeds('CVE-2006')
|
230
|
+
@s.scrap
|
231
|
+
f_new = @s.feeds('CVE-2006')
|
232
|
+
# Right arg
|
233
|
+
# can't use assert_instance_of because there is no boolean class
|
234
|
+
assert(['TrueClass', 'FalseClass'].include?(f.update!(f_new).class.to_s), "update! doesn't return a boolean")
|
235
|
+
# Bad arg
|
236
|
+
err = assert_raises(RuntimeError) do
|
237
|
+
f.update!('bad_arg')
|
238
|
+
end
|
239
|
+
assert_equal('bad_arg is not a Feed', err.message)
|
207
240
|
end
|
208
241
|
|
209
242
|
def test_meta_parse_noarg
|
210
|
-
m = NVDFeedScraper::Meta.new('https://
|
211
|
-
assert_equal(m.parse,
|
243
|
+
m = NVDFeedScraper::Meta.new('https://nvd.nist.gov/feeds/json/cve/1.1/nvdcve-1.1-2015.meta')
|
244
|
+
assert_equal(0, m.parse, 'parse method return nothing')
|
212
245
|
end
|
213
246
|
|
214
247
|
def test_meta_parse_witharg
|
215
248
|
m = NVDFeedScraper::Meta.new
|
216
|
-
meta_url = 'https://
|
217
|
-
assert_equal(m.parse(meta_url),
|
249
|
+
meta_url = 'https://nvd.nist.gov/feeds/json/cve/1.1/nvdcve-1.1-2015.meta'
|
250
|
+
assert_equal(0, m.parse(meta_url), 'parse method return nothing')
|
218
251
|
end
|
219
252
|
|
220
253
|
def test_meta_url_setter
|
221
254
|
m = NVDFeedScraper::Meta.new
|
222
|
-
meta_url = 'https://
|
223
|
-
assert_equal(m.url = meta_url,
|
255
|
+
meta_url = 'https://nvd.nist.gov/feeds/json/cve/1.1/nvdcve-1.1-2015.meta'
|
256
|
+
assert_equal(meta_url, m.url = meta_url, 'the meta URL is not set correctly')
|
224
257
|
end
|
225
258
|
|
226
259
|
def test_meta_attributes
|
227
260
|
m = NVDFeedScraper::Meta.new
|
228
|
-
meta_url = 'https://
|
261
|
+
meta_url = 'https://nvd.nist.gov/feeds/json/cve/1.1/nvdcve-1.1-2015.meta'
|
229
262
|
m.url = meta_url
|
230
263
|
m.parse
|
231
264
|
# Test gz_size
|
@@ -243,7 +276,7 @@ class NVDAPITest < Minitest::Test
|
|
243
276
|
assert(m.size.match?(/[0-9]+/), 'Meta size is not an integer')
|
244
277
|
# Test url
|
245
278
|
assert_instance_of(String, m.url, "Meta url method doesn't return a string")
|
246
|
-
assert_equal(m.url,
|
279
|
+
assert_equal(meta_url, m.url, 'The Meta url was modified')
|
247
280
|
# Test zip_size
|
248
281
|
assert_instance_of(String, m.zip_size, "Meta zip_size method doesn't return a string")
|
249
282
|
assert(m.zip_size.match?(/[0-9]+/), 'Meta zip_size is not an integer')
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nvd_feed_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexandre ZANNI
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-10-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: archive-zip
|
@@ -16,140 +16,146 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0.
|
19
|
+
version: '0.11'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0.
|
26
|
+
version: '0.11'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: nokogiri
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '1.
|
33
|
+
version: '1.10'
|
34
34
|
type: :runtime
|
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: '1.
|
40
|
+
version: '1.10'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: oj
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 3.7.8
|
48
|
+
- - "<"
|
46
49
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
50
|
+
version: '4'
|
48
51
|
type: :runtime
|
49
52
|
prerelease: false
|
50
53
|
version_requirements: !ruby/object:Gem::Requirement
|
51
54
|
requirements:
|
52
|
-
- - "
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: 3.7.8
|
58
|
+
- - "<"
|
53
59
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
60
|
+
version: '4'
|
55
61
|
- !ruby/object:Gem::Dependency
|
56
62
|
name: bundler
|
57
63
|
requirement: !ruby/object:Gem::Requirement
|
58
64
|
requirements:
|
59
65
|
- - "~>"
|
60
66
|
- !ruby/object:Gem::Version
|
61
|
-
version: '1
|
67
|
+
version: '2.1'
|
62
68
|
type: :development
|
63
69
|
prerelease: false
|
64
70
|
version_requirements: !ruby/object:Gem::Requirement
|
65
71
|
requirements:
|
66
72
|
- - "~>"
|
67
73
|
- !ruby/object:Gem::Version
|
68
|
-
version: '1
|
74
|
+
version: '2.1'
|
69
75
|
- !ruby/object:Gem::Dependency
|
70
76
|
name: commonmarker
|
71
77
|
requirement: !ruby/object:Gem::Requirement
|
72
78
|
requirements:
|
73
79
|
- - "~>"
|
74
80
|
- !ruby/object:Gem::Version
|
75
|
-
version: '0.
|
81
|
+
version: '0.21'
|
76
82
|
type: :development
|
77
83
|
prerelease: false
|
78
84
|
version_requirements: !ruby/object:Gem::Requirement
|
79
85
|
requirements:
|
80
86
|
- - "~>"
|
81
87
|
- !ruby/object:Gem::Version
|
82
|
-
version: '0.
|
88
|
+
version: '0.21'
|
83
89
|
- !ruby/object:Gem::Dependency
|
84
90
|
name: github-markup
|
85
91
|
requirement: !ruby/object:Gem::Requirement
|
86
92
|
requirements:
|
87
93
|
- - "~>"
|
88
94
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
95
|
+
version: '3.0'
|
90
96
|
type: :development
|
91
97
|
prerelease: false
|
92
98
|
version_requirements: !ruby/object:Gem::Requirement
|
93
99
|
requirements:
|
94
100
|
- - "~>"
|
95
101
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
102
|
+
version: '3.0'
|
97
103
|
- !ruby/object:Gem::Dependency
|
98
104
|
name: minitest
|
99
105
|
requirement: !ruby/object:Gem::Requirement
|
100
106
|
requirements:
|
101
107
|
- - "~>"
|
102
108
|
- !ruby/object:Gem::Version
|
103
|
-
version: '5.
|
109
|
+
version: '5.14'
|
104
110
|
type: :development
|
105
111
|
prerelease: false
|
106
112
|
version_requirements: !ruby/object:Gem::Requirement
|
107
113
|
requirements:
|
108
114
|
- - "~>"
|
109
115
|
- !ruby/object:Gem::Version
|
110
|
-
version: '5.
|
116
|
+
version: '5.14'
|
111
117
|
- !ruby/object:Gem::Dependency
|
112
118
|
name: rake
|
113
119
|
requirement: !ruby/object:Gem::Requirement
|
114
120
|
requirements:
|
115
121
|
- - "~>"
|
116
122
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
123
|
+
version: '13.0'
|
118
124
|
type: :development
|
119
125
|
prerelease: false
|
120
126
|
version_requirements: !ruby/object:Gem::Requirement
|
121
127
|
requirements:
|
122
128
|
- - "~>"
|
123
129
|
- !ruby/object:Gem::Version
|
124
|
-
version: '
|
130
|
+
version: '13.0'
|
125
131
|
- !ruby/object:Gem::Dependency
|
126
132
|
name: redcarpet
|
127
133
|
requirement: !ruby/object:Gem::Requirement
|
128
134
|
requirements:
|
129
135
|
- - "~>"
|
130
136
|
- !ruby/object:Gem::Version
|
131
|
-
version: '3.
|
137
|
+
version: '3.5'
|
132
138
|
type: :development
|
133
139
|
prerelease: false
|
134
140
|
version_requirements: !ruby/object:Gem::Requirement
|
135
141
|
requirements:
|
136
142
|
- - "~>"
|
137
143
|
- !ruby/object:Gem::Version
|
138
|
-
version: '3.
|
144
|
+
version: '3.5'
|
139
145
|
- !ruby/object:Gem::Dependency
|
140
146
|
name: rubocop
|
141
147
|
requirement: !ruby/object:Gem::Requirement
|
142
148
|
requirements:
|
143
149
|
- - "~>"
|
144
150
|
- !ruby/object:Gem::Version
|
145
|
-
version: '0.
|
151
|
+
version: '0.92'
|
146
152
|
type: :development
|
147
153
|
prerelease: false
|
148
154
|
version_requirements: !ruby/object:Gem::Requirement
|
149
155
|
requirements:
|
150
156
|
- - "~>"
|
151
157
|
- !ruby/object:Gem::Version
|
152
|
-
version: '0.
|
158
|
+
version: '0.92'
|
153
159
|
- !ruby/object:Gem::Dependency
|
154
160
|
name: yard
|
155
161
|
requirement: !ruby/object:Gem::Requirement
|
@@ -180,8 +186,10 @@ files:
|
|
180
186
|
- ".gitlab/issue_templates/Feature_proposal.md"
|
181
187
|
- ".gitlab/merge_request_templates/MR.md"
|
182
188
|
- ".rubocop.yml"
|
189
|
+
- ".tool-versions"
|
183
190
|
- ".yardopts"
|
184
191
|
- Gemfile
|
192
|
+
- Gemfile.lock
|
185
193
|
- LICENSE.txt
|
186
194
|
- README.md
|
187
195
|
- Rakefile
|
@@ -189,12 +197,15 @@ files:
|
|
189
197
|
- bin/nvd_feed_api_console
|
190
198
|
- bin/nvd_feed_api_setup
|
191
199
|
- lib/nvd_feed_api.rb
|
200
|
+
- lib/nvd_feed_api/feed.rb
|
201
|
+
- lib/nvd_feed_api/meta.rb
|
192
202
|
- lib/nvd_feed_api/version.rb
|
193
203
|
- nvd_feed_api.gemspec
|
194
204
|
- pages/CHANGELOG.md
|
195
205
|
- pages/EXAMPLES.md
|
196
206
|
- pages/FEATURES.md
|
197
207
|
- pages/INSTALL.md
|
208
|
+
- renovate.json
|
198
209
|
- test/test_nvd_feed_api.rb
|
199
210
|
homepage: https://noraj.gitlab.io/nvd_api/
|
200
211
|
licenses:
|
@@ -207,7 +218,7 @@ metadata:
|
|
207
218
|
homepage_uri: https://noraj.gitlab.io/nvd_api/
|
208
219
|
source_code_uri: https://gitlab.com/noraj/nvd_api/tree/master
|
209
220
|
wiki_uri: https://gitlab.com/noraj/nvd_api/wikis/home
|
210
|
-
post_install_message:
|
221
|
+
post_install_message:
|
211
222
|
rdoc_options: []
|
212
223
|
require_paths:
|
213
224
|
- lib
|
@@ -222,9 +233,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
222
233
|
- !ruby/object:Gem::Version
|
223
234
|
version: '0'
|
224
235
|
requirements: []
|
225
|
-
|
226
|
-
|
227
|
-
signing_key:
|
236
|
+
rubygems_version: 3.1.2
|
237
|
+
signing_key:
|
228
238
|
specification_version: 4
|
229
239
|
summary: API for NVD CVE feeds
|
230
240
|
test_files:
|