Rynaro/FipExtractor

View on GitHub
lib/fipextractor/request.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'faraday'
require_relative 'response'

module FipExtractor
  class RouteNotFoundError < StandardError; end
  class ResourceNotFoundError < StandardError; end

  class Request
    HOST = "veiculos.fipe.org.br".freeze
    API = "api/veiculos".freeze

    def call
      response_class.new(request).tap do |response|
        raise ResourceNotFoundError if response.error?
      end
    end

    def response_class
      Object.const_get("#{self.class}Response")
    end

    def request
      Faraday.new(url: resource, headers: headers).send(:post) do |request|
        request.body = params
      end
    end

    def base_url
      "https://#{HOST}/#{API}"
    end

    def route
      raise RouteNotFoundError
    end

    def resource
      "#{base_url}/#{route}"
    end

    def params
      {}
    end

    private

    def headers
      {
        'Host' => HOST,
        'Referer' => "https://#{HOST}"
      }
    end
  end
end