Module: Skroutz::Parsing

Included in:
Client, CollectionProxy
Defined in:
lib/skroutz/parsing.rb

Instance Method Summary collapse

Instance Method Details

#collection?(json) ⇒ Boolean

Returns:

  • (Boolean)


55
56
57
# File 'lib/skroutz/parsing.rb', line 55

def collection?(json)
  json[(json.keys - ['meta']).first].is_a?(Array)
end

#collection_resource_key(json) ⇒ Object



43
44
45
# File 'lib/skroutz/parsing.rb', line 43

def collection_resource_key(json)
  (json.keys - ['meta']).first.singularize
end

#infer_collection(json) ⇒ Object



51
52
53
# File 'lib/skroutz/parsing.rb', line 51

def infer_collection(json)
  "Skroutz::#{collection_resource_key(json).classify}".safe_constantize
end

#infer_model(json) ⇒ Object



47
48
49
# File 'lib/skroutz/parsing.rb', line 47

def infer_model(json)
  "Skroutz::#{resource_key(json).capitalize}".safe_constantize
end


30
31
32
33
34
35
36
37
# 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) ⇒ Object



2
3
4
5
6
7
8
9
10
11
12
# 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) ⇒ Object



18
19
20
21
22
23
24
# 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) ⇒ Object



26
27
28
# File 'lib/skroutz/parsing.rb', line 26

def parse_meta(response)
  HashWithIndifferentAccess.new(JSON.parse(response.body).fetch('meta', {}))
end

#parse_resource(json) ⇒ Object



14
15
16
# File 'lib/skroutz/parsing.rb', line 14

def parse_resource(json)
  infer_model(json).new(json[resource_key(json)], client)
end

#resource_key(json) ⇒ Object



39
40
41
# File 'lib/skroutz/parsing.rb', line 39

def resource_key(json)
  json.keys.first
end