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.

Parameters:

  • response (Koala::HTTPService::Response)

    object wrapping the raw Facebook response

  • api

    the Graph API instance to use to make calls (usually the API that made the original call).



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)

Returns the api used to make requests.

Returns:

  • (Koala::Facebook::GraphAPI)

    the api used to make requests.



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

Returns:

  • (Boolean)


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.

Parameters:

  • url

    the paging URL to turn into graph_call parameters

Returns:

  • an array of parameters that can be provided via graph_call(*parsed_params)



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)

Parameters:

Returns:

  • a GraphCollection array of additional results (an empty array if there are no more results)



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)

Returns:

  • an array of arguments, or nil if there are no more pages



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.

Parameters:

Returns:

  • a GraphCollection array of additional results (an empty array if there are no earlier 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)

Returns:

  • an array of arguments, or nil if there are no previous pages



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