Class: Trevl::DataSource::Api
- Includes:
- HTTParty
- Defined in:
- lib/trevl/data_source/api.rb
Overview
Generic REST API data source.
Trevl::DataSource.register("my_api", Trevl::DataSource::Api.new(
base_url: "https://api.example.com/v1",
auth: Trevl::Auth::BearerToken.new("my-token")
))
Constant Summary collapse
- EMPTY_RESULT =
{"data" => [], "meta" => {}}.freeze
Instance Attribute Summary collapse
-
#base_url ⇒ Object
readonly
Returns the value of attribute base_url.
Instance Method Summary collapse
- #fetch(endpoint, params = {}, resource: nil) ⇒ Object
-
#initialize(base_url:, auth: nil, default_resource: nil) ⇒ Api
constructor
A new instance of Api.
Methods inherited from Base
Constructor Details
#initialize(base_url:, auth: nil, default_resource: nil) ⇒ Api
Returns a new instance of Api.
21 22 23 24 25 26 |
# File 'lib/trevl/data_source/api.rb', line 21 def initialize(base_url:, auth: nil, default_resource: nil, **) super() @base_url = base_url.to_s.chomp("/") @auth = auth @default_resource = default_resource end |
Instance Attribute Details
#base_url ⇒ Object (readonly)
Returns the value of attribute base_url.
19 20 21 |
# File 'lib/trevl/data_source/api.rb', line 19 def base_url @base_url end |
Instance Method Details
#fetch(endpoint, params = {}, resource: nil) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/trevl/data_source/api.rb', line 28 def fetch(endpoint, params = {}, resource: nil) resource = (resource || @default_resource).to_s url = build_url(resource, endpoint) headers = build_headers(url) body = params.is_a?(Hash) ? params : {} Trevl.logger.info("[Trevl::DataSource::Api] POST #{url}") response = self.class.post(url, body: body.to_json, headers: headers, timeout: 15) unless response.success? Trevl.logger.error("[Trevl::DataSource::Api] HTTP #{response.code} from #{url}") return EMPTY_RESULT.dup end parse_response(response.body) rescue JSON::ParserError, Timeout::Error, Errno::ECONNREFUSED => e Trevl.logger.error("[Trevl::DataSource::Api] Error: #{e.}") EMPTY_RESULT.dup end |