Class: IronDome::Requester

Inherits:
Object
  • Object
show all
Defined in:
lib/iron_dome/requester.rb

Overview

The requester class responsible to deal with osv database request and result.

Constant Summary collapse

URL =
"https://api.osv.dev/v1/query"
FARADAY_OPTIONS =
{ headers: { "Content-Type" => "application/json" } }.freeze
CONN =
Faraday.new(URL, FARADAY_OPTIONS)

Class Method Summary collapse

Class Method Details

.osv_request(packages_and_versions) ⇒ Object



14
15
16
17
18
19
20
# File 'lib/iron_dome/requester.rb', line 14

def self.osv_request(packages_and_versions)
  futures = packages_and_versions.each_slice(5).map do |batch|
    Concurrent::Future.execute { process_batch(batch) }
  end

  futures.flat_map(&:value).compact
end

.process_batch(batch) ⇒ Object



22
23
24
25
26
27
# File 'lib/iron_dome/requester.rb', line 22

def self.process_batch(batch)
  batch.map { |package, version| query_osv(package, version) }
rescue Faraday::ClientError, Faraday::ConnectionFailed, Faraday::TimeoutError => e
  puts "Error: #{e.message}"
  []
end

.query_osv(package, version) ⇒ Object



29
30
31
32
# File 'lib/iron_dome/requester.rb', line 29

def self.query_osv(package, version)
  response = CONN.post("/v1/query", { version: version, package: { name: package, ecosystem: "RubyGems" } }.to_json)
  JSON.parse(response.body) unless response.body == "{}"
end