nvd_feed_api 0.2.1.yank → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +1 -1
- data/.gitlab-ci.yml +18 -11
- data/.rubocop.yml +3 -0
- data/Gemfile.lock +64 -0
- data/lib/nvd_feed_api.rb +11 -1
- data/lib/nvd_feed_api/feed.rb +13 -0
- data/lib/nvd_feed_api/meta.rb +1 -0
- data/lib/nvd_feed_api/version.rb +1 -1
- data/nvd_feed_api.gemspec +9 -9
- data/pages/CHANGELOG.md +11 -1
- data/test/test_nvd_feed_api.rb +1 -1
- metadata +30 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: a5b514ce502cdd7ed0c110fc51e834735f0431d18724ce805a7d43ab6c48573b
|
4
|
+
data.tar.gz: 2ad857a72403943feee5a60f3a7ac8e8f642eb96e4ebb5956d2cdaeb3d635a46
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 830a36b97968d09491bd7827393e261aff2ec6fc410167cfcada0848e86809979c01a7c7c9bbfcfa6cf86b0a357279b26cb45719ceefde01f2e2456d2c03f272
|
7
|
+
data.tar.gz: dab48f73efd733dd71c94ad619289727c625526b6099b09906203ed19b776aa2d97b21868cf1b10a4bba095f6d4a26a06da7c23cacc4f6776eb2cc5486f9d5c7
|
data/.gitignore
CHANGED
data/.gitlab-ci.yml
CHANGED
@@ -1,40 +1,47 @@
|
|
1
1
|
# Official language image. Look for the different tagged releases at:
|
2
2
|
# https://hub.docker.com/r/library/ruby/tags/
|
3
3
|
|
4
|
+
# Caching: https://docs.gitlab.com/ee/ci/caching/#caching-ruby-dependencies
|
4
5
|
cache:
|
6
|
+
key: ${CI_COMMIT_REF_SLUG}
|
5
7
|
paths:
|
6
8
|
- vendor/ruby # cache gems in between builds
|
7
9
|
|
8
10
|
before_script:
|
9
11
|
- ruby -v # Print out ruby version for debugging
|
10
|
-
- gem install bundler
|
12
|
+
- gem install bundler --no-document # Bundler is not installed with the image
|
11
13
|
# install nproc (coreutils) for bundle -j
|
12
14
|
# install git for building the gemspec
|
13
15
|
# install make, gcc for building gem native extension (commonmarker)
|
14
16
|
# libc-dev for musl-dev dependency (stdlib.h) needed by gcc
|
15
17
|
- apk --no-cache add coreutils git make gcc libc-dev
|
16
18
|
- bundle install -j $(nproc) --path vendor # Install dependencies into ./vendor/ruby
|
17
|
-
- rake install # install the gem
|
19
|
+
- bundle exec rake install # install the gem
|
18
20
|
|
19
|
-
|
21
|
+
# Anchors: https://docs.gitlab.com/ee/ci/yaml/README.html#anchors
|
22
|
+
.test_template: &job_definition
|
20
23
|
stage: test
|
21
|
-
image: ruby:2.4-alpine
|
22
24
|
script:
|
23
|
-
|
24
|
-
|
25
|
+
- bundle exec rubocop
|
26
|
+
- bundle exec rake test
|
27
|
+
|
28
|
+
test:2.4:
|
29
|
+
<<: *job_definition
|
30
|
+
image: ruby:2.4-alpine
|
25
31
|
|
26
32
|
test:2.5:
|
27
|
-
|
33
|
+
<<: *job_definition
|
28
34
|
image: ruby:2.5-alpine
|
29
|
-
|
30
|
-
|
31
|
-
|
35
|
+
|
36
|
+
test:2.6:
|
37
|
+
<<: *job_definition
|
38
|
+
image: ruby:2.6-alpine
|
32
39
|
|
33
40
|
pages:
|
34
41
|
stage: deploy
|
35
42
|
image: ruby:2.4-alpine
|
36
43
|
script:
|
37
|
-
- yard doc
|
44
|
+
- bundle exec yard doc
|
38
45
|
- mkdir public
|
39
46
|
- mv doc/* public/
|
40
47
|
artifacts:
|
data/.rubocop.yml
CHANGED
data/Gemfile.lock
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
nvd_feed_api (0.3.0)
|
5
|
+
archive-zip (~> 0.11)
|
6
|
+
nokogiri (~> 1.10)
|
7
|
+
oj (>= 3.7.8, < 4)
|
8
|
+
|
9
|
+
GEM
|
10
|
+
remote: https://rubygems.org/
|
11
|
+
specs:
|
12
|
+
archive-zip (0.11.0)
|
13
|
+
io-like (~> 0.3.0)
|
14
|
+
ast (2.4.0)
|
15
|
+
commonmarker (0.18.2)
|
16
|
+
ruby-enum (~> 0.5)
|
17
|
+
concurrent-ruby (1.1.4)
|
18
|
+
github-markup (3.0.2)
|
19
|
+
i18n (1.5.3)
|
20
|
+
concurrent-ruby (~> 1.0)
|
21
|
+
io-like (0.3.0)
|
22
|
+
jaro_winkler (1.5.2)
|
23
|
+
mini_portile2 (2.4.0)
|
24
|
+
minitest (5.11.3)
|
25
|
+
nokogiri (1.10.1)
|
26
|
+
mini_portile2 (~> 2.4.0)
|
27
|
+
oj (3.7.8)
|
28
|
+
parallel (1.13.0)
|
29
|
+
parser (2.6.0.0)
|
30
|
+
ast (~> 2.4.0)
|
31
|
+
powerpack (0.1.2)
|
32
|
+
rainbow (3.0.0)
|
33
|
+
rake (12.3.2)
|
34
|
+
redcarpet (3.4.0)
|
35
|
+
rubocop (0.63.0)
|
36
|
+
jaro_winkler (~> 1.5.1)
|
37
|
+
parallel (~> 1.10)
|
38
|
+
parser (>= 2.5, != 2.5.1.1)
|
39
|
+
powerpack (~> 0.1)
|
40
|
+
rainbow (>= 2.2.2, < 4.0)
|
41
|
+
ruby-progressbar (~> 1.7)
|
42
|
+
unicode-display_width (~> 1.4.0)
|
43
|
+
ruby-enum (0.7.2)
|
44
|
+
i18n
|
45
|
+
ruby-progressbar (1.10.0)
|
46
|
+
unicode-display_width (1.4.1)
|
47
|
+
yard (0.9.16)
|
48
|
+
|
49
|
+
PLATFORMS
|
50
|
+
ruby
|
51
|
+
|
52
|
+
DEPENDENCIES
|
53
|
+
bundler (~> 2.0)
|
54
|
+
commonmarker (~> 0.18)
|
55
|
+
github-markup (~> 3.0)
|
56
|
+
minitest (~> 5.11)
|
57
|
+
nvd_feed_api!
|
58
|
+
rake (~> 12.3)
|
59
|
+
redcarpet (~> 3.4)
|
60
|
+
rubocop (~> 0.63)
|
61
|
+
yard (~> 0.9)
|
62
|
+
|
63
|
+
BUNDLED WITH
|
64
|
+
2.0.1
|
data/lib/nvd_feed_api.rb
CHANGED
@@ -31,7 +31,7 @@ class NVDFeedScraper
|
|
31
31
|
|
32
32
|
# Scrap / parse the website to get the feeds and fill the {#feeds} attribute.
|
33
33
|
# @note {#scrap} need to be called only once but can be called again to update if the NVD feed page changed.
|
34
|
-
# @return [Integer]
|
34
|
+
# @return [Integer] Number of scrapped feeds.
|
35
35
|
def scrap
|
36
36
|
uri = URI(@url)
|
37
37
|
html = Net::HTTP.get(uri)
|
@@ -46,6 +46,7 @@ class NVDFeedScraper
|
|
46
46
|
zip = tr.css('+ tr + tr > td > a').attr('href').value
|
47
47
|
@feeds.push(Feed.new(name, updated, meta, gz, zip))
|
48
48
|
end
|
49
|
+
return @feeds.size
|
49
50
|
end
|
50
51
|
|
51
52
|
# Return feeds. Can only be called after {#scrap}.
|
@@ -72,6 +73,7 @@ class NVDFeedScraper
|
|
72
73
|
# @see https://nvd.nist.gov/vuln/data-feeds
|
73
74
|
def feeds(*arg_feeds)
|
74
75
|
raise 'call scrap method before using feeds method' if @feeds.nil?
|
76
|
+
|
75
77
|
return_value = nil
|
76
78
|
if arg_feeds.empty?
|
77
79
|
return_value = @feeds
|
@@ -83,6 +85,7 @@ class NVDFeedScraper
|
|
83
85
|
# if nothing found return nil
|
84
86
|
elsif arg_feeds[0].is_a?(Array)
|
85
87
|
raise 'one of the provided arguments is not a String' unless arg_feeds[0].all? { |x| x.is_a?(String) }
|
88
|
+
|
86
89
|
# Sorting CVE can allow us to parse quicker
|
87
90
|
# Upcase to be sure include? works
|
88
91
|
# Does not use map(&:upcase) to preserve CVE-Recent and CVE-Modified
|
@@ -114,6 +117,7 @@ class NVDFeedScraper
|
|
114
117
|
# scraper.available_feeds => ["CVE-Modified", "CVE-Recent", "CVE-2017", "CVE-2016", "CVE-2015", "CVE-2014", "CVE-2013", "CVE-2012", "CVE-2011", "CVE-2010", "CVE-2009", "CVE-2008", "CVE-2007", "CVE-2006", "CVE-2005", "CVE-2004", "CVE-2003", "CVE-2002"]
|
115
118
|
def available_feeds
|
116
119
|
raise 'call scrap method before using available_feeds method' if @feeds.nil?
|
120
|
+
|
117
121
|
feed_names = []
|
118
122
|
@feeds.each do |feed| # feed is an objet
|
119
123
|
feed_names.push(feed.name)
|
@@ -146,9 +150,11 @@ class NVDFeedScraper
|
|
146
150
|
def cve(*arg_cve)
|
147
151
|
return_value = nil
|
148
152
|
raise 'no argument provided, 1 or more expected' if arg_cve.empty?
|
153
|
+
|
149
154
|
if arg_cve.length == 1
|
150
155
|
if arg_cve[0].is_a?(String)
|
151
156
|
raise 'bad CVE name' unless /^CVE-[0-9]{4}-[0-9]{4,}$/i.match?(arg_cve[0])
|
157
|
+
|
152
158
|
year = /^CVE-([0-9]{4})-[0-9]{4,}$/i.match(arg_cve[0]).captures[0]
|
153
159
|
matched_feed = nil
|
154
160
|
feed_names = available_feeds
|
@@ -163,12 +169,14 @@ class NVDFeedScraper
|
|
163
169
|
# CVE-2002 feed (the 1st one) contains CVE from 1999 to 2002
|
164
170
|
matched_feed = 'CVE-2002' if matched_feed.nil? && ('1999'..'2001').to_a.include?(year)
|
165
171
|
raise "bad CVE year in #{arg_cve}" if matched_feed.nil?
|
172
|
+
|
166
173
|
f = feeds(matched_feed)
|
167
174
|
f.json_pull
|
168
175
|
return_value = f.cve(arg_cve[0])
|
169
176
|
elsif arg_cve[0].is_a?(Array)
|
170
177
|
raise 'one of the provided arguments is not a String' unless arg_cve[0].all? { |x| x.is_a?(String) }
|
171
178
|
raise 'bad CVE name' unless arg_cve[0].all? { |x| /^CVE-[0-9]{4}-[0-9]{4,}$/i.match?(x) }
|
179
|
+
|
172
180
|
return_value = []
|
173
181
|
# Sorting CVE can allow us to parse quicker
|
174
182
|
# Upcase to be sure include? works
|
@@ -185,6 +193,7 @@ class NVDFeedScraper
|
|
185
193
|
# So virtually add those feed...
|
186
194
|
feed_names.merge(virtual_feeds)
|
187
195
|
raise 'unexisting CVE year was provided in some CVE' unless feeds_to_match.subset?(feed_names)
|
196
|
+
|
188
197
|
matched_feeds = feeds_to_match.intersection(feed_names)
|
189
198
|
# and now that the intersection is done remove those virtual feeds and add CVE-2002 instead if needed
|
190
199
|
unless matched_feeds.intersection(virtual_feeds.to_set).empty?
|
@@ -235,6 +244,7 @@ class NVDFeedScraper
|
|
235
244
|
def update_feeds(*arg_feed)
|
236
245
|
return_value = false
|
237
246
|
raise 'no argument provided, 1 or more expected' if arg_feed.empty?
|
247
|
+
|
238
248
|
scrap
|
239
249
|
if arg_feed.length == 1
|
240
250
|
if arg_feed[0].is_a?(Feed)
|
data/lib/nvd_feed_api/feed.rb
CHANGED
@@ -184,6 +184,7 @@ class NVDFeedScraper
|
|
184
184
|
# Verify hash integrity
|
185
185
|
computed_h = Digest::SHA256.file(@json_file)
|
186
186
|
raise "File corruption: #{@json_file}" unless meta.sha256.casecmp(computed_h.hexdigest).zero?
|
187
|
+
|
187
188
|
# update data
|
188
189
|
doc = Oj::Doc.open(File.read(@json_file))
|
189
190
|
@data_type = doc.fetch('/CVE_data_type')
|
@@ -223,11 +224,14 @@ class NVDFeedScraper
|
|
223
224
|
def cve(*arg_cve)
|
224
225
|
raise 'json_file is nil, it needs to be populated with json_pull' if @json_file.nil?
|
225
226
|
raise "json_file (#{@json_file}) doesn't exist" unless File.file?(@json_file)
|
227
|
+
|
226
228
|
return_value = nil
|
227
229
|
raise 'no argument provided, 1 or more expected' if arg_cve.empty?
|
230
|
+
|
228
231
|
if arg_cve.length == 1
|
229
232
|
if arg_cve[0].is_a?(String)
|
230
233
|
raise "bad CVE name (#{arg_cve[0]})" unless /^CVE-[0-9]{4}-[0-9]{4,}$/i.match?(arg_cve[0])
|
234
|
+
|
231
235
|
doc = Oj::Doc.open(File.read(@json_file))
|
232
236
|
# Quicker than doc.fetch('/CVE_Items').size
|
233
237
|
(1..@data_number_of_cves).each do |i|
|
@@ -244,6 +248,7 @@ class NVDFeedScraper
|
|
244
248
|
cves_to_find = arg_cve[0].map(&:upcase).sort
|
245
249
|
raise 'one of the provided arguments is not a String' unless cves_to_find.all? { |x| x.is_a?(String) }
|
246
250
|
raise 'bad CVE name' unless cves_to_find.all? { |x| /^CVE-[0-9]{4}-[0-9]{4,}$/i.match?(x) }
|
251
|
+
|
247
252
|
doc = Oj::Doc.open(File.read(@json_file))
|
248
253
|
# Quicker than doc.fetch('/CVE_Items').size
|
249
254
|
(1..@data_number_of_cves).each do |i|
|
@@ -273,6 +278,7 @@ class NVDFeedScraper
|
|
273
278
|
def available_cves
|
274
279
|
raise 'json_file is nil, it needs to be populated with json_pull' if @json_file.nil?
|
275
280
|
raise "json_file (#{@json_file}) doesn't exist" unless File.file?(@json_file)
|
281
|
+
|
276
282
|
doc = Oj::Doc.open(File.read(@json_file))
|
277
283
|
# Quicker than doc.fetch('/CVE_Items').size
|
278
284
|
cve_names = []
|
@@ -290,6 +296,7 @@ class NVDFeedScraper
|
|
290
296
|
# 'CVE-2007'
|
291
297
|
def name=(arg_name)
|
292
298
|
raise "name (#{arg_name}) is not a string" unless arg_name.is_a?(String)
|
299
|
+
|
293
300
|
@name = arg_name
|
294
301
|
end
|
295
302
|
|
@@ -299,6 +306,7 @@ class NVDFeedScraper
|
|
299
306
|
# '10/19/2017 3:27:02 AM -04:00'
|
300
307
|
def updated=(arg_updated)
|
301
308
|
raise "updated date (#{arg_updated}) is not a string" unless arg_updated.is_a?(String)
|
309
|
+
|
302
310
|
@updated = arg_updated
|
303
311
|
end
|
304
312
|
|
@@ -308,6 +316,7 @@ class NVDFeedScraper
|
|
308
316
|
# 'https://static.nvd.nist.gov/feeds/json/cve/1.0/nvdcve-1.0-2007.meta'
|
309
317
|
def meta_url=(arg_meta_url)
|
310
318
|
raise "meta_url (#{arg_meta_url}) is not a string" unless arg_meta_url.is_a?(String)
|
319
|
+
|
311
320
|
@meta_url = arg_meta_url
|
312
321
|
end
|
313
322
|
|
@@ -317,6 +326,7 @@ class NVDFeedScraper
|
|
317
326
|
# 'https://static.nvd.nist.gov/feeds/json/cve/1.0/nvdcve-1.0-2007.json.gz'
|
318
327
|
def gz_url=(arg_gz_url)
|
319
328
|
raise "gz_url (#{arg_gz_url}) is not a string" unless arg_gz_url.is_a?(String)
|
329
|
+
|
320
330
|
@gz_url = arg_gz_url
|
321
331
|
end
|
322
332
|
|
@@ -326,6 +336,7 @@ class NVDFeedScraper
|
|
326
336
|
# 'https://static.nvd.nist.gov/feeds/json/cve/1.0/nvdcve-1.0-2007.json.zip'
|
327
337
|
def zip_url=(arg_zip_url)
|
328
338
|
raise "zip_url (#{arg_zip_url}) is not a string" unless arg_zip_url.is_a?(String)
|
339
|
+
|
329
340
|
@zip_url = arg_zip_url
|
330
341
|
end
|
331
342
|
|
@@ -362,6 +373,7 @@ class NVDFeedScraper
|
|
362
373
|
unless skip_download
|
363
374
|
res = Net::HTTP.get_response(uri)
|
364
375
|
raise "#{file_url} ended with #{res.code} #{res.message}" unless res.is_a?(Net::HTTPSuccess)
|
376
|
+
|
365
377
|
File.open(destination_file, 'wb') do |file|
|
366
378
|
file.write(res.body)
|
367
379
|
end
|
@@ -376,6 +388,7 @@ class NVDFeedScraper
|
|
376
388
|
def update!(fresh_feed)
|
377
389
|
return_value = false
|
378
390
|
raise "#{fresh_feed} is not a Feed" unless fresh_feed.is_a?(Feed)
|
391
|
+
|
379
392
|
# update attributes
|
380
393
|
if updated != fresh_feed.updated
|
381
394
|
self.name = fresh_feed.name
|
data/lib/nvd_feed_api/meta.rb
CHANGED
data/lib/nvd_feed_api/version.rb
CHANGED
data/nvd_feed_api.gemspec
CHANGED
@@ -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-
|
9
|
+
s.date = '2018-01-06'
|
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', '~>
|
39
|
-
s.add_development_dependency('commonmarker', '~> 0.
|
40
|
-
s.add_development_dependency('github-markup', '~>
|
41
|
-
s.add_development_dependency('minitest', '~> 5.
|
38
|
+
s.add_development_dependency('bundler', '~> 2.0')
|
39
|
+
s.add_development_dependency('commonmarker', '~> 0.18') # 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.11')
|
42
42
|
s.add_development_dependency('rake', '~> 12.3')
|
43
43
|
s.add_development_dependency('redcarpet', '~> 3.4') # for GMF support in YARD
|
44
|
-
s.add_development_dependency('rubocop', '~> 0.
|
44
|
+
s.add_development_dependency('rubocop', '~> 0.63')
|
45
45
|
s.add_development_dependency('yard', '~> 0.9')
|
46
46
|
end
|
data/pages/CHANGELOG.md
CHANGED
@@ -1,8 +1,18 @@
|
|
1
|
+
# [0.3.0] - 22 January 2019
|
2
|
+
|
3
|
+
[0.3.0]: https://gitlab.com/noraj/nvd_api/tags/v0.3.0
|
4
|
+
|
5
|
+
- update dependencies: updated gemspec, ruby 2.6 support, fix gem doc flag, fix oj crash (seg fault)
|
6
|
+
- Gemfile.lock: now Gemfile.lock is not ignored anymore
|
7
|
+
- gitlab-ci: add ruby 2.6 test, add caching key, and anchors for better reuse, always use bundle
|
8
|
+
- NVDFeedScraper `scrap` method: change return value
|
9
|
+
- rubocop: fix lint
|
10
|
+
|
1
11
|
# [0.2.1] - 2 May 2018
|
2
12
|
|
3
13
|
[0.2.1]: https://gitlab.com/noraj/nvd_api/tags/v0.2.1
|
4
14
|
|
5
|
-
- Gitlab-CI: test
|
15
|
+
- Gitlab-CI: test with ruby 2.4.x and 2.5.x
|
6
16
|
- style: fix Style/ExpandPathArguments cop
|
7
17
|
- security: fix Security/Open cop, protect from pipe command injection
|
8
18
|
- test: fix NVD URL after NVD changed it
|
data/test/test_nvd_feed_api.rb
CHANGED
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.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexandre ZANNI
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-01-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: archive-zip
|
@@ -16,98 +16,104 @@ 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: '
|
67
|
+
version: '2.0'
|
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: '
|
74
|
+
version: '2.0'
|
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.18'
|
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.18'
|
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.11'
|
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.11'
|
111
117
|
- !ruby/object:Gem::Dependency
|
112
118
|
name: rake
|
113
119
|
requirement: !ruby/object:Gem::Requirement
|
@@ -142,14 +148,14 @@ dependencies:
|
|
142
148
|
requirements:
|
143
149
|
- - "~>"
|
144
150
|
- !ruby/object:Gem::Version
|
145
|
-
version: '0.
|
151
|
+
version: '0.63'
|
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.63'
|
153
159
|
- !ruby/object:Gem::Dependency
|
154
160
|
name: yard
|
155
161
|
requirement: !ruby/object:Gem::Requirement
|
@@ -182,6 +188,7 @@ files:
|
|
182
188
|
- ".rubocop.yml"
|
183
189
|
- ".yardopts"
|
184
190
|
- Gemfile
|
191
|
+
- Gemfile.lock
|
185
192
|
- LICENSE.txt
|
186
193
|
- README.md
|
187
194
|
- Rakefile
|
@@ -220,12 +227,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
220
227
|
version: '2.4'
|
221
228
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
222
229
|
requirements:
|
223
|
-
- - "
|
230
|
+
- - ">="
|
224
231
|
- !ruby/object:Gem::Version
|
225
|
-
version:
|
232
|
+
version: '0'
|
226
233
|
requirements: []
|
227
|
-
|
228
|
-
rubygems_version: 2.6.14
|
234
|
+
rubygems_version: 3.0.1
|
229
235
|
signing_key:
|
230
236
|
specification_version: 4
|
231
237
|
summary: API for NVD CVE feeds
|