module Skroutz::Parsing
Public Instance Methods
collection?(json)
click to toggle source
# File lib/skroutz/parsing.rb, line 55 def collection?(json) json[(json.keys - ['meta']).first].is_a?(Array) end
collection_resource_key(json)
click to toggle source
# File lib/skroutz/parsing.rb, line 43 def collection_resource_key(json) (json.keys - ['meta']).first.singularize end
infer_collection(json)
click to toggle source
# File lib/skroutz/parsing.rb, line 51 def infer_collection(json) "Skroutz::#{collection_resource_key(json).classify}".safe_constantize end
infer_model(json)
click to toggle source
# File lib/skroutz/parsing.rb, line 47 def infer_model(json) "Skroutz::#{resource_key(json).capitalize}".safe_constantize end
link_header(response)
click to toggle source
# File lib/skroutz/parsing.rb, line 30 def link_header(response) response.headers.fetch('link', '').split(',').reduce({}) do |h, link| page, type = link.scan(/\<(.*)\>; rel="(.*)"/).flatten h[type.to_sym] = page h end end
parse(response)
click to toggle source
# File lib/skroutz/parsing.rb, line 2 def parse(response) json = JSON.parse(response.body) if collection?(json) Skroutz::PaginatedCollection.new(self, response, parse_collection(json)) else parse_resource(json) end rescue JSON::ParserError raise Skroutz::InvalidResource.new(model_name.to_s, response.body) end
parse_collection(json)
click to toggle source
# File lib/skroutz/parsing.rb, line 18 def parse_collection(json) model_name = infer_collection(json) json[collection_resource_key(json).pluralize].map do |resource| model_name.new(resource, client) end end
parse_meta(response)
click to toggle source
# File lib/skroutz/parsing.rb, line 26 def parse_meta(response) HashWithIndifferentAccess.new(JSON.parse(response.body).fetch('meta', {})) end
parse_resource(json)
click to toggle source
# File lib/skroutz/parsing.rb, line 14 def parse_resource(json) infer_model(json).new(json[resource_key(json)], client) end
resource_key(json)
click to toggle source
# File lib/skroutz/parsing.rb, line 39 def resource_key(json) json.keys.first end