Sha256: ffdee629fc7f600909b9e708874d87e99ed8e0ee52aed233caae8c05e3bc48d4

Contents?: true

Size: 1.22 KB

Versions: 38

Compression:

Stored size: 1.22 KB

Contents

module FbGraph
  class Collection < Array
    attr_reader :previous, :next, :total_count

    def initialize(collection = nil)
      collection = case collection
      when Array
        {:data => collection, :count => collection.size}
      when Hash
        collection[:data] ||= []
        collection
      when nil
        collection = {:data => [], :count => 0}
      else
        raise ArgumentError.new("Invalid collection")
      end

      # NOTE: Graph API returns {"data":{"to":[null]}} sometimes... :(
      collection[:data].delete_if(&:nil?)

      result = replace(collection[:data])
      @total_count = collection[:count]
      @previous, @next = {}, {}
      if (paging = collection[:paging])
        if paging[:previous]
          @previous = fetch_params(paging[:previous])
        end
        if paging[:next]
          @next = fetch_params(paging[:next])
        end
      end
    end

    private

    def fetch_params(url)
      query = URI.parse(URI.encode(url)).query
      params = {}
      query.split('&').each do |q|
        key, value = q.split('=')
        if ['limit', 'offset', 'until', 'since'].include?(key)
          params[key.to_sym] = URI.unescape(value)
        end
      end
      params
    end
  end
end

Version data entries

38 entries across 38 versions & 1 rubygems

Version Path
fb_graph-2.1.13 lib/fb_graph/collection.rb
fb_graph-2.1.12 lib/fb_graph/collection.rb
fb_graph-2.1.11 lib/fb_graph/collection.rb
fb_graph-2.1.10 lib/fb_graph/collection.rb
fb_graph-2.1.9 lib/fb_graph/collection.rb
fb_graph-2.1.8 lib/fb_graph/collection.rb
fb_graph-2.1.7 lib/fb_graph/collection.rb
fb_graph-2.1.6 lib/fb_graph/collection.rb
fb_graph-2.1.5 lib/fb_graph/collection.rb
fb_graph-2.1.4 lib/fb_graph/collection.rb
fb_graph-2.1.3 lib/fb_graph/collection.rb
fb_graph-2.1.2 lib/fb_graph/collection.rb
fb_graph-2.1.1 lib/fb_graph/collection.rb
fb_graph-2.1.0 lib/fb_graph/collection.rb
fb_graph-2.1.0.alpha lib/fb_graph/collection.rb
fb_graph-2.0.2 lib/fb_graph/collection.rb
fb_graph-2.0.1 lib/fb_graph/collection.rb
fb_graph-2.0.0 lib/fb_graph/collection.rb
fb_graph-2.0.0.beta lib/fb_graph/collection.rb
fb_graph-2.0.0.alpha lib/fb_graph/collection.rb