nvd_feed_api 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 158649a33021b95393055afc6861185443aeae4665cc6acd86814f29a866d8f0
4
- data.tar.gz: 75ca47cdcece6352581ed8ddfe9339ce393e48199ba4c895e6e49e05e959b08b
3
+ metadata.gz: d03fa81fd296a62aba7a9356b3c41135851febb254af4db13758c5b76475739f
4
+ data.tar.gz: c0d716121dccaeaee6944ccd3e0d85cf59854084ae68d0f7347fb678dc4760bf
5
5
  SHA512:
6
- metadata.gz: 66c08b3167c12da6168331f84caa557d945ebb16c76e565cefa6ac44c7960e5eb8bae840a2231c16d2cc9ef982bd13eb9b68289dff66dbee4af0c115a45e20f4
7
- data.tar.gz: 2729e066d04f9f29e9fd3fbd76c88cb3c208c2a82eab331e3202fca9a42a7f658d7645f7d3c17f5df770c54b1eb8e084b611f6e23eefab90c7e4cada90e114f0
6
+ metadata.gz: b5bef50a5709e8bd53a138110e80f6a5ee34d02f5849e1a3d9add0c9573e963926adbdf6eeb610b75d04d25d285b4450b8e99aa724582d382ed072ef46c89a8a
7
+ data.tar.gz: 7be0a9191d6efb0e7a80e7a868d8d019186268008473e3e731fe9e4e3e1d21b85b7cc6189c912d5315495dbb12dbaaa688ca077823ba844a01d91b11696ae954
@@ -0,0 +1,3 @@
1
+ github: noraj
2
+ issuehunt: noraj
3
+ ko_fi: noraj
data/.gitlab-ci.yml CHANGED
@@ -25,25 +25,17 @@ before_script:
25
25
  - bundle exec rubocop
26
26
  - bundle exec rake test
27
27
 
28
- test:2.4:
29
- <<: *job_definition
30
- image: ruby:2.4-alpine
31
-
32
- test:2.5:
33
- <<: *job_definition
34
- image: ruby:2.5-alpine
35
-
36
- test:2.6:
37
- <<: *job_definition
38
- image: ruby:2.6-alpine
28
+ #test:2.4:
29
+ # <<: *job_definition
30
+ # image: ruby:2.4-alpine
39
31
 
40
- test:2.7:
32
+ test:3.1:
41
33
  <<: *job_definition
42
- image: ruby:2.7-alpine
34
+ image: ruby:3.1-alpine
43
35
 
44
36
  pages:
45
37
  stage: deploy
46
- image: ruby:2.4-alpine
38
+ image: ruby:3.1-alpine
47
39
  script:
48
40
  - bundle exec yard doc
49
41
  - mkdir public
data/.rubocop.yml CHANGED
@@ -25,7 +25,7 @@ Metrics/ClassLength:
25
25
  Enabled: false
26
26
 
27
27
  Metrics/CyclomaticComplexity:
28
- Max: 20
28
+ Max: 25
29
29
 
30
30
  Metrics/MethodLength:
31
31
  Max: 100
@@ -39,6 +39,9 @@ Naming/VariableName:
39
39
  Security/JSONLoad:
40
40
  Enabled: false
41
41
 
42
+ Style/CaseLikeIf:
43
+ Enabled: true
44
+
42
45
  Style/FrozenStringLiteralComment:
43
46
  EnforcedStyle: never
44
47
 
data/.tool-versions CHANGED
@@ -1 +1 @@
1
- ruby 2.7.1
1
+ ruby 3.1.0
data/.yardopts CHANGED
@@ -1,6 +1,8 @@
1
1
  --protected
2
2
  --private
3
3
  --output-dir doc/
4
+ --markup markdown
5
+ --markup-provider commonmarker
4
6
  -
5
7
  --main README.md
6
8
  LICENSE.txt
data/Gemfile CHANGED
@@ -1,4 +1,27 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- # Specify your gem's dependencies in .gemspec
4
3
  gemspec
4
+
5
+ group :runtime, :cli do
6
+ gem 'archive-zip', '~> 0.11'
7
+ gem 'nokogiri', '~> 1.11'
8
+ gem 'oj', '>= 3.7.8', '<4'
9
+ end
10
+
11
+ group :development, :install do
12
+ gem 'bundler', '~> 2.1'
13
+ end
14
+
15
+ group :development, :test do
16
+ gem 'minitest', '~> 5.12'
17
+ gem 'rake', '~> 13.0'
18
+ end
19
+
20
+ group :development, :lint do
21
+ gem 'rubocop', '~> 1.23'
22
+ end
23
+
24
+ group :development, :docs do
25
+ gem 'commonmarker', '~> 0.21' # for markdown support in YARD
26
+ gem 'yard', ['>= 0.9.27', '< 0.10']
27
+ end
data/Gemfile.lock CHANGED
@@ -1,9 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- nvd_feed_api (0.3.1)
4
+ nvd_feed_api (0.4.0)
5
5
  archive-zip (~> 0.11)
6
- nokogiri (~> 1.10)
6
+ nokogiri (~> 1.11)
7
7
  oj (>= 3.7.8, < 4)
8
8
 
9
9
  GEM
@@ -11,57 +11,54 @@ GEM
11
11
  specs:
12
12
  archive-zip (0.12.0)
13
13
  io-like (~> 0.3.0)
14
- ast (2.4.1)
15
- commonmarker (0.21.0)
16
- ruby-enum (~> 0.5)
17
- concurrent-ruby (1.1.7)
18
- github-markup (3.0.4)
19
- i18n (1.8.5)
20
- concurrent-ruby (~> 1.0)
14
+ ast (2.4.2)
15
+ commonmarker (0.23.2)
21
16
  io-like (0.3.1)
22
- mini_portile2 (2.4.0)
23
- minitest (5.14.2)
24
- nokogiri (1.10.10)
25
- mini_portile2 (~> 2.4.0)
26
- oj (3.10.14)
27
- parallel (1.19.2)
28
- parser (2.7.1.5)
17
+ mini_portile2 (2.7.1)
18
+ minitest (5.15.0)
19
+ nokogiri (1.13.1)
20
+ mini_portile2 (~> 2.7.0)
21
+ racc (~> 1.4)
22
+ oj (3.13.10)
23
+ parallel (1.21.0)
24
+ parser (3.0.3.2)
29
25
  ast (~> 2.4.1)
26
+ racc (1.6.0)
30
27
  rainbow (3.0.0)
31
- rake (13.0.1)
32
- redcarpet (3.5.0)
33
- regexp_parser (1.8.1)
34
- rexml (3.2.4)
35
- rubocop (0.92.0)
28
+ rake (13.0.6)
29
+ regexp_parser (2.2.0)
30
+ rexml (3.2.5)
31
+ rubocop (1.24.1)
36
32
  parallel (~> 1.10)
37
- parser (>= 2.7.1.5)
33
+ parser (>= 3.0.0.0)
38
34
  rainbow (>= 2.2.2, < 4.0)
39
- regexp_parser (>= 1.7)
35
+ regexp_parser (>= 1.8, < 3.0)
40
36
  rexml
41
- rubocop-ast (>= 0.5.0)
37
+ rubocop-ast (>= 1.15.1, < 2.0)
42
38
  ruby-progressbar (~> 1.7)
43
- unicode-display_width (>= 1.4.0, < 2.0)
44
- rubocop-ast (0.7.1)
45
- parser (>= 2.7.1.5)
46
- ruby-enum (0.8.0)
47
- i18n
48
- ruby-progressbar (1.10.1)
49
- unicode-display_width (1.7.0)
50
- yard (0.9.25)
39
+ unicode-display_width (>= 1.4.0, < 3.0)
40
+ rubocop-ast (1.15.1)
41
+ parser (>= 3.0.1.1)
42
+ ruby-progressbar (1.11.0)
43
+ unicode-display_width (2.1.0)
44
+ webrick (1.7.0)
45
+ yard (0.9.27)
46
+ webrick (~> 1.7.0)
51
47
 
52
48
  PLATFORMS
53
49
  ruby
54
50
 
55
51
  DEPENDENCIES
52
+ archive-zip (~> 0.11)
56
53
  bundler (~> 2.1)
57
54
  commonmarker (~> 0.21)
58
- github-markup (~> 3.0)
59
- minitest (~> 5.14)
55
+ minitest (~> 5.12)
56
+ nokogiri (~> 1.11)
60
57
  nvd_feed_api!
58
+ oj (>= 3.7.8, < 4)
61
59
  rake (~> 13.0)
62
- redcarpet (~> 3.5)
63
- rubocop (~> 0.92)
64
- yard (~> 0.9)
60
+ rubocop (~> 1.23)
61
+ yard (>= 0.9.27, < 0.10)
65
62
 
66
63
  BUNDLED WITH
67
- 2.1.4
64
+ 2.3.6
@@ -13,7 +13,7 @@ class NVDFeedScraper
13
13
  class Feed
14
14
  class << self
15
15
  # Get / set default feed storage location, where will be stored JSON feeds and archives by default.
16
- # @return [String] default feed storage location. Default to +/tmp/+.
16
+ # @return [String] default feed storage location. Default to `/tmp/`.
17
17
  # @example
18
18
  # NVDFeedScraper::Feed.default_storage_location = '/srv/downloads/'
19
19
  attr_accessor :default_storage_location
@@ -69,11 +69,11 @@ class NVDFeedScraper
69
69
  # f.json_file # => "/tmp/nvdcve-1.0-2014.json"
70
70
  attr_reader :json_file
71
71
 
72
- # @return [String] the type of the feed, should always be +CVE+.
72
+ # @return [String] the type of the feed, should always be `CVE`.
73
73
  # @note Return nil if not previously loaded by {#json_pull}.
74
74
  attr_reader :data_type
75
75
 
76
- # @return [String] the format of the feed, should always be +MITRE+.
76
+ # @return [String] the format of the feed, should always be `MITRE`.
77
77
  # @note Return nil if not previously loaded by {#json_pull}.
78
78
  attr_reader :data_format
79
79
 
@@ -96,7 +96,7 @@ class NVDFeedScraper
96
96
  # @param gz_url [String] see {#gz_url}.
97
97
  # @param zip_url [String] see {#zip_url}.
98
98
  def initialize(name, updated, meta_url, gz_url, zip_url)
99
- # Frome meta file
99
+ # From meta file
100
100
  @name = name
101
101
  @updated = updated
102
102
  @meta_url = meta_url
@@ -146,7 +146,7 @@ class NVDFeedScraper
146
146
  # Download the JSON feed and fill the attribute.
147
147
  # @param opts [Hash] see {#download_file}.
148
148
  # @return [String] the path of the saved JSON file. Default use {Feed#default_storage_location}.
149
- # @note Will downlaod and save the zip of the JSON file, unzip and save it. This massively consume time.
149
+ # @note Will download and save the zip of the JSON file, unzip and save it. This massively consume time.
150
150
  # @see #json_file
151
151
  def json_pull(opts = {})
152
152
  opts[:destination_path] ||= Feed.default_storage_location
@@ -229,7 +229,8 @@ class NVDFeedScraper
229
229
  raise 'no argument provided, 1 or more expected' if arg_cve.empty?
230
230
 
231
231
  if arg_cve.length == 1
232
- if arg_cve[0].is_a?(String)
232
+ case arg_cve[0]
233
+ when String
233
234
  raise "bad CVE name (#{arg_cve[0]})" unless /^CVE-[0-9]{4}-[0-9]{4,}$/i.match?(arg_cve[0])
234
235
 
235
236
  doc = Oj::Doc.open(File.read(@json_file))
@@ -241,7 +242,7 @@ class NVDFeedScraper
241
242
  end
242
243
  end
243
244
  doc.close
244
- elsif arg_cve[0].is_a?(Array)
245
+ when Array
245
246
  return_value = []
246
247
  # Sorting CVE can allow us to parse quicker
247
248
  # Upcase to be sure include? works
@@ -363,27 +364,23 @@ class NVDFeedScraper
363
364
  uri = URI(file_url)
364
365
  filename = uri.path.split('/').last
365
366
  destination_file = destination_path + filename
366
- unless opts[:sha256].nil?
367
- if File.file?(destination_file)
368
- # Verify hash to see if it is the latest
369
- computed_h = Digest::SHA256.file(destination_file)
370
- skip_download = true if opts[:sha256].casecmp(computed_h.hexdigest).zero?
371
- end
367
+ if !opts[:sha256].nil? && File.file?(destination_file)
368
+ # Verify hash to see if it is the latest
369
+ computed_h = Digest::SHA256.file(destination_file)
370
+ skip_download = true if opts[:sha256].casecmp(computed_h.hexdigest).zero?
372
371
  end
373
372
  unless skip_download
374
373
  res = Net::HTTP.get_response(uri)
375
374
  raise "#{file_url} ended with #{res.code} #{res.message}" unless res.is_a?(Net::HTTPSuccess)
376
375
 
377
- File.open(destination_file, 'wb') do |file|
378
- file.write(res.body)
379
- end
376
+ File.binwrite(destination_file, res.body)
380
377
  end
381
378
  return destination_file
382
379
  end
383
380
 
384
381
  # Update the feed
385
382
  # @param fresh_feed [Feed] the fresh feed from which the feed will be updated.
386
- # @return [Boolean] +true+ if the feed was updated, +false+ if it wasn't.
383
+ # @return [Boolean] `true` if the feed was updated, `false` if it wasn't.
387
384
  # @note Is not intended to be used directly, use {NVDFeedScraper#update_feeds} instead.
388
385
  def update!(fresh_feed)
389
386
  return_value = false
@@ -76,17 +76,16 @@ class NVDFeedScraper
76
76
  # Parse the meta file from the URL and set the attributes.
77
77
  # @overload parse
78
78
  # Parse the meta file from the URL and set the attributes.
79
- # @return [Integer] Returns +0+ when there is no error.
79
+ # @return [Integer] Returns `0` when there is no error.
80
80
  # @overload parse(url)
81
81
  # Set the URL of the meta file of the feed and
82
82
  # parse the meta file from the URL and set the attributes.
83
83
  # @param url [String] see {Feed.meta_url}
84
- # @return [Integer] Returns +0+ when there is no error.
84
+ # @return [Integer] Returns `0` when there is no error.
85
85
  def parse(*arg)
86
- if arg.empty?
87
- elsif arg.length == 1 # arg = url
86
+ if arg.length == 1 # arg = url
88
87
  self.url = arg[0]
89
- else
88
+ elsif arg.length > 1
90
89
  raise 'Too much arguments'
91
90
  end
92
91
 
@@ -96,7 +95,7 @@ class NVDFeedScraper
96
95
 
97
96
  meta = Net::HTTP.get(uri)
98
97
 
99
- meta = Hash[meta.split.map { |x| x.split(':', 2) }]
98
+ meta = meta.split.to_h { |x| x.split(':', 2) }
100
99
 
101
100
  raise 'no lastModifiedDate attribute found' unless meta['lastModifiedDate']
102
101
  raise 'no valid size attribute found' unless /[0-9]+/.match?(meta['size'])
@@ -1,3 +1,3 @@
1
1
  module NvdFeedApi
2
- VERSION = '0.3.1'.freeze
2
+ VERSION = '0.4.0'.freeze
3
3
  end
data/lib/nvd_feed_api.rb CHANGED
@@ -42,14 +42,15 @@ class NVDFeedScraper
42
42
  tmp_feeds = {}
43
43
  doc.css('#vuln-feed-table table.xml-feed-table tr[data-testid]').each do |tr|
44
44
  num, type = tr.attr('data-testid')[13..].split('-')
45
- if type == 'meta'
45
+ case type
46
+ when 'meta'
46
47
  tmp_feeds[num] = {}
47
48
  tmp_feeds[num][:name] = tr.css('td')[0].text
48
49
  tmp_feeds[num][:updated] = tr.css('td')[1].text
49
50
  tmp_feeds[num][:meta] = BASE + tr.css('td')[2].css('> a').attr('href').value
50
- elsif type == 'gz'
51
+ when 'gz'
51
52
  tmp_feeds[num][:gz] = BASE + tr.css('td > a').attr('href').value
52
- elsif type == 'zip'
53
+ when 'zip'
53
54
  tmp_feeds[num][:zip] = BASE + tr.css('td > a').attr('href').value
54
55
  @feeds.push(Feed.new(tmp_feeds[num][:name],
55
56
  tmp_feeds[num][:updated],
@@ -90,12 +91,13 @@ class NVDFeedScraper
90
91
  if arg_feeds.empty?
91
92
  return_value = @feeds
92
93
  elsif arg_feeds.length == 1
93
- if arg_feeds[0].is_a?(String)
94
+ case arg_feeds[0]
95
+ when String
94
96
  @feeds.each do |feed| # feed is an object
95
97
  return_value = feed if arg_feeds.include?(feed.name)
96
98
  end
97
99
  # if nothing found return nil
98
- elsif arg_feeds[0].is_a?(Array)
100
+ when Array
99
101
  raise 'one of the provided arguments is not a String' unless arg_feeds[0].all? { |x| x.is_a?(String) }
100
102
 
101
103
  # Sorting CVE can allow us to parse quicker
@@ -164,7 +166,8 @@ class NVDFeedScraper
164
166
  raise 'no argument provided, 1 or more expected' if arg_cve.empty?
165
167
 
166
168
  if arg_cve.length == 1
167
- if arg_cve[0].is_a?(String)
169
+ case arg_cve[0]
170
+ when String
168
171
  raise 'bad CVE name' unless /^CVE-[0-9]{4}-[0-9]{4,}$/i.match?(arg_cve[0])
169
172
 
170
173
  year = /^CVE-([0-9]{4})-[0-9]{4,}$/i.match(arg_cve[0]).captures[0]
@@ -185,7 +188,7 @@ class NVDFeedScraper
185
188
  f = feeds(matched_feed)
186
189
  f.json_pull
187
190
  return_value = f.cve(arg_cve[0])
188
- elsif arg_cve[0].is_a?(Array)
191
+ when Array
189
192
  raise 'one of the provided arguments is not a String' unless arg_cve[0].all? { |x| x.is_a?(String) }
190
193
  raise 'bad CVE name' unless arg_cve[0].all? { |x| /^CVE-[0-9]{4}-[0-9]{4,}$/i.match?(x) }
191
194
 
@@ -216,9 +219,10 @@ class NVDFeedScraper
216
219
  feeds_arr.each do |feed|
217
220
  feed.json_pull
218
221
  cves_obj = feed.cve(cves_to_find.select { |cve| cve.include?(feed.name) })
219
- if cves_obj.is_a?(Hash)
222
+ case cves_obj
223
+ when Hash
220
224
  return_value.push(cves_obj)
221
- elsif cves_obj.is_a?(Array)
225
+ when Array
222
226
  return_value.push(*cves_obj)
223
227
  else
224
228
  raise 'cve() method of the feed instance returns wrong value'
@@ -238,16 +242,16 @@ class NVDFeedScraper
238
242
  # @overload update_feeds(feed)
239
243
  # One feed.
240
244
  # @param feed [Feed] feed object to update.
241
- # @return [Boolean] +true+ if the feed was updated, +false+ if it wasn't.
245
+ # @return [Boolean] `true` if the feed was updated, `false` if it wasn't.
242
246
  # @overload update_feeds(feed_arr)
243
247
  # An array of feed.
244
248
  # @param feed_arr [Array<Feed>] array of feed objects to update.
245
- # @return [Array<Boolean>] +true+ if the feed was updated, +false+ if it wasn't.
249
+ # @return [Array<Boolean>] `true` if the feed was updated, `false` if it wasn't.
246
250
  # @overload update_feeds(feed, *)
247
251
  # Multiple feeds.
248
252
  # @param feed [Feed] feed object to update.
249
253
  # @param * [Feed] As many feed objects as you want.
250
- # @return [Array<Boolean>] +true+ if the feed was updated, +false+ if it wasn't.
254
+ # @return [Array<Boolean>] `true` if the feed was updated, `false` if it wasn't.
251
255
  # @example
252
256
  # s = NVDFeedScraper.new
253
257
  # s.scrap
@@ -259,11 +263,12 @@ class NVDFeedScraper
259
263
 
260
264
  scrap
261
265
  if arg_feed.length == 1
262
- if arg_feed[0].is_a?(Feed)
266
+ case arg_feed[0]
267
+ when Feed
263
268
  new_feed = feeds(arg_feed[0].name)
264
269
  # update attributes
265
270
  return_value = arg_feed[0].update!(new_feed)
266
- elsif arg_feed[0].is_a?(Array)
271
+ when Array
267
272
  return_value = []
268
273
  arg_feed[0].each do |f|
269
274
  res = update_feeds(f)
data/nvd_feed_api.gemspec CHANGED
@@ -1,12 +1,9 @@
1
- lib = File.expand_path('lib', __dir__)
2
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
- require 'nvd_feed_api/version'
1
+ require_relative 'lib/nvd_feed_api/version'
4
2
 
5
3
  Gem::Specification.new do |s|
6
4
  s.name = 'nvd_feed_api'
7
5
  s.version = NvdFeedApi::VERSION
8
6
  s.platform = Gem::Platform::RUBY
9
- s.date = '2020-10-03'
10
7
  s.summary = 'API for NVD CVE feeds'
11
8
  s.description = 'A simple API for NVD CVE feeds'
12
9
  s.authors = ['Alexandre ZANNI']
@@ -20,27 +17,19 @@ Gem::Specification.new do |s|
20
17
  s.require_paths = ['lib']
21
18
 
22
19
  s.metadata = {
23
- 'yard.run' => 'yard',
24
- 'bug_tracker_uri' => 'https://gitlab.com/noraj/nvd_api/issues',
25
- 'changelog_uri' => 'https://noraj.gitlab.io/nvd_api/file.CHANGELOG.html',
26
- 'documentation_uri' => 'https://noraj.gitlab.io/nvd_api/',
27
- 'homepage_uri' => 'https://noraj.gitlab.io/nvd_api/',
28
- 'source_code_uri' => 'https://gitlab.com/noraj/nvd_api/tree/master',
29
- 'wiki_uri' => 'https://gitlab.com/noraj/nvd_api/wikis/home'
20
+ 'yard.run' => 'yard',
21
+ 'bug_tracker_uri' => 'https://gitlab.com/noraj/nvd_api/issues',
22
+ 'changelog_uri' => 'https://noraj.gitlab.io/nvd_api/file.CHANGELOG.html',
23
+ 'documentation_uri' => 'https://noraj.gitlab.io/nvd_api/',
24
+ 'homepage_uri' => 'https://noraj.gitlab.io/nvd_api/',
25
+ 'source_code_uri' => 'https://gitlab.com/noraj/nvd_api/tree/master',
26
+ 'wiki_uri' => 'https://gitlab.com/noraj/nvd_api/wikis/home',
27
+ 'rubygems_mfa_required' => 'true'
30
28
  }
31
29
 
32
- s.required_ruby_version = '~> 2.4'
30
+ s.required_ruby_version = ['>= 2.7.0', '< 3.2']
33
31
 
34
32
  s.add_dependency('archive-zip', '~> 0.11')
35
- s.add_dependency('nokogiri', '~> 1.10')
33
+ s.add_dependency('nokogiri', '~> 1.11')
36
34
  s.add_dependency('oj', '>= 3.7.8', '<4')
37
-
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
- s.add_development_dependency('yard', '~> 0.9')
46
35
  end
data/pages/CHANGELOG.md CHANGED
@@ -1,4 +1,17 @@
1
- # [0.3.0] - 22 January 2019
1
+ # [unreleased]
2
+
3
+ # [0.4.0] - 31 January 2021
4
+
5
+ - Dependencies:
6
+ - Update to yard [v0.9.27](https://github.com/lsegal/yard/releases/tag/v0.9.27)
7
+ - Move from Redcarpet to CommonMarker markdown provider
8
+ - Move doc syntax from Rdoc to markdown
9
+ - Move dev dependencies from gemspec to gemfile
10
+ - Chore:
11
+ - Add support for Ruby 3.1
12
+ - Update rubocop rules
13
+
14
+ # [0.3.1] - 13 October 2020
2
15
 
3
16
  [0.3.1]: https://gitlab.com/noraj/nvd_api/tags/v0.3.1
4
17
 
@@ -6,6 +19,8 @@
6
19
  - update dependencies
7
20
  - update rubocop rules
8
21
 
22
+ # [0.3.0] - 22 January 2019
23
+
9
24
  [0.3.0]: https://gitlab.com/noraj/nvd_api/tags/v0.3.0
10
25
 
11
26
  - update dependencies: updated gemspec, ruby 2.6 support, fix gem doc flag, fix oj crash (seg fault)
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.3.1
4
+ version: 0.4.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: 2020-10-03 00:00:00.000000000 Z
11
+ date: 2022-01-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: archive-zip
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.10'
33
+ version: '1.11'
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.10'
40
+ version: '1.11'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: oj
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -58,118 +58,6 @@ dependencies:
58
58
  - - "<"
59
59
  - !ruby/object:Gem::Version
60
60
  version: '4'
61
- - !ruby/object:Gem::Dependency
62
- name: bundler
63
- requirement: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - "~>"
66
- - !ruby/object:Gem::Version
67
- version: '2.1'
68
- type: :development
69
- prerelease: false
70
- version_requirements: !ruby/object:Gem::Requirement
71
- requirements:
72
- - - "~>"
73
- - !ruby/object:Gem::Version
74
- version: '2.1'
75
- - !ruby/object:Gem::Dependency
76
- name: commonmarker
77
- requirement: !ruby/object:Gem::Requirement
78
- requirements:
79
- - - "~>"
80
- - !ruby/object:Gem::Version
81
- version: '0.21'
82
- type: :development
83
- prerelease: false
84
- version_requirements: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - "~>"
87
- - !ruby/object:Gem::Version
88
- version: '0.21'
89
- - !ruby/object:Gem::Dependency
90
- name: github-markup
91
- requirement: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - "~>"
94
- - !ruby/object:Gem::Version
95
- version: '3.0'
96
- type: :development
97
- prerelease: false
98
- version_requirements: !ruby/object:Gem::Requirement
99
- requirements:
100
- - - "~>"
101
- - !ruby/object:Gem::Version
102
- version: '3.0'
103
- - !ruby/object:Gem::Dependency
104
- name: minitest
105
- requirement: !ruby/object:Gem::Requirement
106
- requirements:
107
- - - "~>"
108
- - !ruby/object:Gem::Version
109
- version: '5.14'
110
- type: :development
111
- prerelease: false
112
- version_requirements: !ruby/object:Gem::Requirement
113
- requirements:
114
- - - "~>"
115
- - !ruby/object:Gem::Version
116
- version: '5.14'
117
- - !ruby/object:Gem::Dependency
118
- name: rake
119
- requirement: !ruby/object:Gem::Requirement
120
- requirements:
121
- - - "~>"
122
- - !ruby/object:Gem::Version
123
- version: '13.0'
124
- type: :development
125
- prerelease: false
126
- version_requirements: !ruby/object:Gem::Requirement
127
- requirements:
128
- - - "~>"
129
- - !ruby/object:Gem::Version
130
- version: '13.0'
131
- - !ruby/object:Gem::Dependency
132
- name: redcarpet
133
- requirement: !ruby/object:Gem::Requirement
134
- requirements:
135
- - - "~>"
136
- - !ruby/object:Gem::Version
137
- version: '3.5'
138
- type: :development
139
- prerelease: false
140
- version_requirements: !ruby/object:Gem::Requirement
141
- requirements:
142
- - - "~>"
143
- - !ruby/object:Gem::Version
144
- version: '3.5'
145
- - !ruby/object:Gem::Dependency
146
- name: rubocop
147
- requirement: !ruby/object:Gem::Requirement
148
- requirements:
149
- - - "~>"
150
- - !ruby/object:Gem::Version
151
- version: '0.92'
152
- type: :development
153
- prerelease: false
154
- version_requirements: !ruby/object:Gem::Requirement
155
- requirements:
156
- - - "~>"
157
- - !ruby/object:Gem::Version
158
- version: '0.92'
159
- - !ruby/object:Gem::Dependency
160
- name: yard
161
- requirement: !ruby/object:Gem::Requirement
162
- requirements:
163
- - - "~>"
164
- - !ruby/object:Gem::Version
165
- version: '0.9'
166
- type: :development
167
- prerelease: false
168
- version_requirements: !ruby/object:Gem::Requirement
169
- requirements:
170
- - - "~>"
171
- - !ruby/object:Gem::Version
172
- version: '0.9'
173
61
  description: A simple API for NVD CVE feeds
174
62
  email: alexandre.zanni@europe.com
175
63
  executables:
@@ -179,6 +67,7 @@ executables:
179
67
  extensions: []
180
68
  extra_rdoc_files: []
181
69
  files:
70
+ - ".github/FUNDING.yml"
182
71
  - ".gitignore"
183
72
  - ".gitlab-ci.yml"
184
73
  - ".gitlab/CONTRIBUTING.md"
@@ -218,22 +107,26 @@ metadata:
218
107
  homepage_uri: https://noraj.gitlab.io/nvd_api/
219
108
  source_code_uri: https://gitlab.com/noraj/nvd_api/tree/master
220
109
  wiki_uri: https://gitlab.com/noraj/nvd_api/wikis/home
110
+ rubygems_mfa_required: 'true'
221
111
  post_install_message:
222
112
  rdoc_options: []
223
113
  require_paths:
224
114
  - lib
225
115
  required_ruby_version: !ruby/object:Gem::Requirement
226
116
  requirements:
227
- - - "~>"
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: 2.7.0
120
+ - - "<"
228
121
  - !ruby/object:Gem::Version
229
- version: '2.4'
122
+ version: '3.2'
230
123
  required_rubygems_version: !ruby/object:Gem::Requirement
231
124
  requirements:
232
125
  - - ">="
233
126
  - !ruby/object:Gem::Version
234
127
  version: '0'
235
128
  requirements: []
236
- rubygems_version: 3.1.2
129
+ rubygems_version: 3.3.3
237
130
  signing_key:
238
131
  specification_version: 4
239
132
  summary: API for NVD CVE feeds