Module: Skroutz::Parsing
- Included in:
- Client, CollectionProxy
- Defined in:
- lib/skroutz/parsing.rb
Instance Method Summary collapse
- #collection?(json) ⇒ Boolean
- #collection_resource_key(json) ⇒ Object
- #infer_collection(json) ⇒ Object
- #infer_model(json) ⇒ Object
- #link_header(response) ⇒ Object
- #parse(response) ⇒ Object
- #parse_collection(json) ⇒ Object
- #parse_meta(response) ⇒ Object
- #parse_resource(json) ⇒ Object
- #resource_key(json) ⇒ Object
Instance Method Details
#collection?(json) ⇒ 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 |
#link_header(response) ⇒ Object
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 (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 |