Class: Trevl::Renderer::DataFetcher

Inherits:
Object
  • Object
show all
Defined in:
lib/trevl/renderer/data_fetcher.rb

Overview

Normalizes API responses and resolves API parameters.

fetcher = DataFetcher.new
fetcher.coerce_payload([{x: 1}])
# => {"data" => [{"x" => 1}], "meta" => {}}

Instance Method Summary collapse

Instance Method Details

#coerce_payload(result) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/trevl/renderer/data_fetcher.rb', line 12

def coerce_payload(result)
  case result
  when Array
    {"data" => result, "meta" => {}}
  when Hash
    data = result["data"] || result[:data]
    meta = result["meta"] || result[:meta] || {}
    meta = {} unless meta.is_a?(Hash)
    if data.is_a?(Array)
      {"data" => data, "meta" => CoreExt::Hash.deep_stringify_keys(meta)}
    else
      {"data" => [], "meta" => CoreExt::Hash.deep_stringify_keys(meta)}
    end
  else
    {"data" => [], "meta" => {}}
  end
end

#merge_api_params(component, query_params) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/trevl/renderer/data_fetcher.rb', line 30

def merge_api_params(component, query_params)
  api_params = component["api_parameters"] || component["api-parameters"] || {}
  api_params = CoreExt::Hash.deep_stringify_keys(api_params) if api_params.is_a?(Hash)
  api_params = resolve_placeholders(api_params, query_params)

  overrides = query_params["param_override"] || query_params[:param_override]
  if overrides.is_a?(Hash)
    overrides = CoreExt::Hash.deep_stringify_keys(overrides)
    api_params = CoreExt::Hash.deep_merge(api_params, overrides)
  end

  api_params
end