Sha256: 63674ade81bdee7eaa6ba3f563c4cfcdf2fda38867df2ffd59be44f255da6eab

Contents?: true

Size: 1.35 KB

Versions: 22

Compression:

Stored size: 1.35 KB

Contents

module Recurly
  module Formats
    class XmlWithPaginationFormat
      include ActiveResource::Formats::XmlFormat

      def decode(xml)
        data = super

        if data.is_a?(Hash) and data["type"] == "collection" and data["current_page"]
          data = paginate_data(data)
        end

        data
      end

      # convert the data into a paginated resultset (array with singleton methods)
      def paginate_data(data)

        per_page = data["per_page"] || 0
        current_page = data["current_page"] || 0
        total_entries = data["total_entries"] || 0

        # find the first array and use that as the resultset (lame workaround)
        results = data.values.select{|v| v.is_a?(Array)}.first || []
        if results.empty?
          data.delete("per_page")
          data.delete("current_page")
          data.delete("total_entries")
          data.delete("type")
          results = [data.values.first].compact
        end

        # define total_entries accessor on result object
        results.instance_eval "def total_entries; #{total_entries.to_i}; end"

        # define current_page accessor on result object
        results.instance_eval "def current_page; #{current_page.to_i}; end"

        # define per_page accessor on result object
        results.instance_eval "def per_page; #{per_page.to_i}; end"

        results
      end
    end
  end
end

Version data entries

22 entries across 22 versions & 1 rubygems

Version Path
recurly-0.4.16 lib/recurly/formats/xml_with_pagination.rb
recurly-0.4.15 lib/recurly/formats/xml_with_pagination.rb
recurly-0.4.14 lib/recurly/formats/xml_with_pagination.rb
recurly-0.4.13 lib/recurly/formats/xml_with_pagination.rb
recurly-0.4.11 lib/recurly/formats/xml_with_pagination.rb
recurly-0.4.10 lib/recurly/formats/xml_with_pagination.rb
recurly-0.4.8 lib/recurly/formats/xml_with_pagination.rb
recurly-0.4.7 lib/recurly/formats/xml_with_pagination.rb
recurly-0.4.6 lib/recurly/formats/xml_with_pagination.rb
recurly-0.4.5 lib/recurly/formats/xml_with_pagination.rb
recurly-0.4.4 lib/recurly/formats/xml_with_pagination.rb
recurly-0.4.3 lib/recurly/formats/xml_with_pagination.rb
recurly-0.4.2 lib/recurly/formats/xml_with_pagination.rb
recurly-0.4.1 lib/recurly/formats/xml_with_pagination.rb
recurly-0.4.0 lib/recurly/formats/xml_with_pagination.rb
recurly-0.3.4 lib/recurly/formats/xml_with_pagination.rb
recurly-0.3.3 lib/recurly/formats/xml_with_pagination.rb
recurly-0.3.2 lib/recurly/formats/xml_with_pagination.rb
recurly-0.3.1 lib/recurly/formats/xml_with_pagination.rb
recurly-0.3.0 lib/recurly/formats/xml_with_pagination.rb