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