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.
@@ -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: