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
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