nvd_feed_api 0.0.3 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,3 @@
1
1
  module NvdFeedApi
2
- VERSION = '0.0.3'.freeze
2
+ VERSION = '0.3.1'.freeze
3
3
  end
@@ -1,4 +1,4 @@
1
- lib = File.expand_path('../lib', __FILE__)
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 = '2018-01-06'
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.10')
35
- s.add_dependency('nokogiri', '~> 1.8')
36
- s.add_dependency('oj', '~> 3.3')
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.15')
39
- s.add_development_dependency('commonmarker', '~> 0.17') # for GMF support in YARD
40
- s.add_development_dependency('github-markup', '~> 1.6') # for GMF support in YARD
41
- s.add_development_dependency('minitest', '~> 5.10')
42
- s.add_development_dependency('rake', '~> 12.3')
43
- s.add_development_dependency('redcarpet', '~> 3.4') # for GMF support in YARD
44
- s.add_development_dependency('rubocop', '~> 0.51')
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
@@ -1,4 +1,50 @@
1
- # [0.0.3] - 6 January 2017
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 2017
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 2017
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 2017
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
 
@@ -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/shark/Dev/cve_feeds"
15
+ NVDFeedScraper::Feed.default_storage_location = "/home/user/Dev/cve_feeds"
16
16
  # Create a {Feed} object for all available feeds
17
- s.feeds(s.available_feeds).each do |f|
18
- # and for each one download the JSON file and fill the attributes.
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
  ```
@@ -10,14 +10,7 @@ $ gem install nvd_feed_api
10
10
 
11
11
  ## Development
12
12
 
13
- It's better to use [RVM](https://rvm.io/) to have latests version of ruby and to avoid trashing your system ruby.
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
- Usefull when you want to try your changes without building the gem and re-installing it each time.
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
@@ -0,0 +1,15 @@
1
+ {
2
+ "extends": [
3
+ "config:base"
4
+ ],
5
+ "bundler": {
6
+ "enabled": true
7
+ },
8
+ "assignees": [
9
+ "noraj"
10
+ ],
11
+ "enabledManagers": [
12
+ "bundler",
13
+ "gitlabci"
14
+ ]
15
+ }
@@ -9,7 +9,7 @@ class NVDAPITest < Minitest::Test
9
9
  end
10
10
 
11
11
  def test_scraper_scrap
12
- assert_equal(@s.scrap, 0, 'scrap method return nothing')
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
- err = @s.cve('e')
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
- err = @s.cve('CVE-2001-31337')
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
- err = @s.cve(['CVE-2004-31337', 'CVE-2005-31337'])
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
- err = @s.cve(1)
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(%w[TrueClass FalseClass].include?(@s.update_feeds(f2017).class.to_s), "update_feeds doesn't return a boolean")
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
- err = @s.update_feeds(1)
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, new_val, 'the new value was not set properly')
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://static.nvd.nist.gov/feeds/json/cve/1.0/nvdcve-1.0-2010.meta'
113
- gz_url = 'https://static.nvd.nist.gov/feeds/json/cve/1.0/nvdcve-1.0-2010.json.gz'
114
- zip_url = 'https://static.nvd.nist.gov/feeds/json/cve/1.0/nvdcve-1.0-2010.json.zip'
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(f.name, name, 'The name of the feed was modified')
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(f.gz_url, gz_url, 'The gz_url of the feed was modified')
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(f.zip_url, zip_url, 'The zip_url url of the feed was modified')
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(f.meta_url, meta_url, 'The meta_url url of the feed was modified')
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, @s.cve('CVE-2012-4969'), "cve doesn't return a 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, @s.cve('CVE-2012-4969', 'cve-2012-1889'), "cve doesn't return an array")
155
- refute_empty(@s.cve('CVE-2012-4969', 'cve-2012-1889'), 'cve returns an empty array')
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, @s.cve(['CVE-2012-4969', 'cve-2012-1889']), "cve doesn't return an array")
158
- refute_empty(@s.cve(['CVE-2012-4969', 'cve-2012-1889']), 'cve returns an empty array')
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
- err = @s.cve('e')
163
- assert_equal(err.message, 'bad CVE name')
181
+ err = assert_raises(RuntimeError) do
182
+ f.cve('e')
164
183
  end
165
- ## correct CVE ID but bad year
166
- assert_nil(@s.cve('CVE-2004-31337'))
167
- ## correct CVE ID and but year not in the feed with array arg
168
- assert_raises(RuntimeError) do
169
- err = @s.cve(['CVE-2004-31337', 'CVE-2005-31337'])
170
- assert_equal(err.message, 'CVE-2004-31337, CVE-2005-31337 are unexisting CVEs in this feed')
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
- err = @s.cve(1)
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
- return_value = f.meta_pull
206
- assert_instance_of(NVDFeedScraper::Meta, return_value, "meta_pull doesn't return a Meta object")
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://static.nvd.nist.gov/feeds/json/cve/1.0/nvdcve-1.0-2015.meta')
211
- assert_equal(m.parse, 0, 'parse method return nothing')
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://static.nvd.nist.gov/feeds/json/cve/1.0/nvdcve-1.0-2015.meta'
217
- assert_equal(m.parse(meta_url), 0, 'parse method return nothing')
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://static.nvd.nist.gov/feeds/json/cve/1.0/nvdcve-1.0-2015.meta'
223
- assert_equal(m.url = meta_url, meta_url, 'the meta URL is not set correctly')
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://static.nvd.nist.gov/feeds/json/cve/1.0/nvdcve-1.0-2015.meta'
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, meta_url, 'The Meta url was modified')
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.0.3
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: 2018-01-06 00:00:00.000000000 Z
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.10'
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.10'
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.8'
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.8'
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: '3.3'
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: '3.3'
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.15'
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.15'
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.17'
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.17'
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: '1.6'
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: '1.6'
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.10'
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.10'
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: '12.3'
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: '12.3'
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.4'
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.4'
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.51'
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.51'
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
- rubyforge_project:
226
- rubygems_version: 2.6.13
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: