Class: IronDome::Requester
- Inherits:
-
Object
- Object
- IronDome::Requester
- 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
- .osv_request(packages_and_versions) ⇒ Object
- .process_batch(batch) ⇒ Object
- .query_osv(package, version) ⇒ Object
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.}" [] 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 |