Class: Koala::Facebook::API::GraphCollection

Inherits:
Array
  • Object
show all
Defined in:
lib/koala/api/graph_collection.rb

Overview

A light wrapper for collections returned from the Graph API. It extends Array to allow you to page backward and forward through result sets, and providing easy access to paging information.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(response, api) ⇒ Koala::Facebook::API::GraphCollection

Initialize the array of results and store various additional paging-related information.



31
32
33
34
35
36
37
38
# File 'lib/koala/api/graph_collection.rb', line 31

def initialize(response, api)
  super response.data["data"]
  @paging = response.data["paging"]
  @summary = response.data["summary"]
  @raw_response = response.data
  @api = api
  @headers = response.headers
end

Instance Attribute Details

#apiKoala::Facebook::GraphAPI (readonly)



17
18
19
# File 'lib/koala/api/graph_collection.rb', line 17

def api
  @api
end

#headersObject (readonly)

The headers from the Facebook response



21
22
23
# File 'lib/koala/api/graph_collection.rb', line 21

def headers
  @headers
end

#pagingObject (readonly)

The raw paging information from Facebook (next/previous URLs).



13
14
15
# File 'lib/koala/api/graph_collection.rb', line 13

def paging
  @paging
end

#raw_responseObject (readonly)

The entire raw response from Facebook.



19
20
21
# File 'lib/koala/api/graph_collection.rb', line 19

def raw_response
  @raw_response
end

#summaryObject (readonly)

The raw summary information from Facebook (total counts).



15
16
17
# File 'lib/koala/api/graph_collection.rb', line 15

def summary
  @summary
end

Class Method Details

.is_pageable?(response) ⇒ Boolean

response will always be an instance of Koala::HTTPService::Response since that is what we get from Koala::Facebook::API#api



53
54
55
# File 'lib/koala/api/graph_collection.rb', line 53

def self.is_pageable?(response)
  response.data.is_a?(Hash) && response.data["data"].is_a?(Array)
end

.parse_page_url(url) ⇒ Object

Parse the previous and next page URLs Facebook provides in pageable results. You'll mainly need to use this when using a non-Rails framework (one without url_for); to store paging information between page loads, pass the URL (from GraphCollection#paging) and use parse_page_url to turn it into parameters useful for Koala::Facebook::API#get_page.



114
115
116
117
118
119
120
121
122
123
124
125
# File 'lib/koala/api/graph_collection.rb', line 114

def self.parse_page_url(url)
  uri = Addressable::URI.parse(url)

  base = uri.path.sub(/^\//, '')
  params = CGI.parse(uri.query)

  new_params = {}
  params.each_pair do |key,value|
    new_params[key] = value.join ","
  end
  [base,new_params]
end

Instance Method Details

#next_page(extra_params = {}) ⇒ Object

Retrieve the next page of results.

Examples:

With optional extra params

wall = api.get_connections("me", "feed", since: 1379593891)
wall.next_page(since: 1379593891)


66
67
68
69
# File 'lib/koala/api/graph_collection.rb', line 66

def next_page(extra_params = {})
  base, args = next_page_params
  base ? @api.get_page([base, args.merge(extra_params)]) : nil
end

#next_page_paramsObject

Arguments that can be sent to Koala::Facebook::API#graph_call to retrieve the next page of results.

Examples:

@api.graph_call(*collection.next_page_params)


87
88
89
# File 'lib/koala/api/graph_collection.rb', line 87

def next_page_params
  @paging && @paging["next"] ? parse_page_url(@paging["next"]) : nil
end

#previous_page(extra_params = {}) ⇒ Object

Retrieve the previous page of results.



76
77
78
79
# File 'lib/koala/api/graph_collection.rb', line 76

def previous_page(extra_params = {})
  base, args = previous_page_params
  base ? @api.get_page([base, args.merge(extra_params)]) : nil
end

#previous_page_paramsObject

Arguments that can be sent to Koala::Facebook::API#graph_call to retrieve the previous page of results.

Examples:

@api.graph_call(*collection.previous_page_params)


97
98
99
# File 'lib/koala/api/graph_collection.rb', line 97

def previous_page_params
  @paging && @paging["previous"] ? parse_page_url(@paging["previous"]) : nil
end