lib/bearcat/api_array.rb in bearcat-1.5.17 vs lib/bearcat/api_array.rb in bearcat-1.5.19

- old
+ new

@@ -43,12 +43,16 @@ def method raw_response.env[:method] end - def [](i) - @members[i] + def [](key) + if key.is_a?(Numeric) + @members[key] + else + @raw_response.body[key] + end end def last @members.last end @@ -125,12 +129,12 @@ @link_hash[rel.gsub('"', '').split('=').last] = url end end end - def get_page(url, params = {}) - params['per_page'] = @page_count unless params.key?('per_page') || !@page_count + def get_page(url, params = {}, page_size_param: 'per_page') + params[page_size_param] = @page_count unless params.key?(page_size_param) || !@page_count parsed_url = URI.parse(url) p = parse_url_params(parsed_url) u = url.gsub("?#{parsed_url.query}", '') @@ -200,13 +204,21 @@ end key end def process_body(response) - if response.body.is_a?(Array) - self.class.make_indifferent(response.body) - elsif response.body.is_a?(Hash) && @array_key - self.class.make_indifferent(response.body[@array_key]) + data = response.body + if @array_key.is_a?(Proc) + data = @array_key.call(data, response) + elsif @array_key.present? + ak = @array_key + ak = ak.split('.') if ak.is_a?(String) + ak = Array(ak) + data = data.dig(*ak) end + + raise "Response could not be mapped to items" unless data.is_a?(Array) + + self.class.make_indifferent(data) end end end