Sha256: 03ecb3efb916208cb95f3fb86e9d4b6afd0629f5a18feaaa7c2f0b2c98be621b

Contents?: true

Size: 1.35 KB

Versions: 8

Compression:

Stored size: 1.35 KB

Contents

module Masheri
  class RpcClient
    class Response
      def initialize(query_builder)
        @query_builder = query_builder
        @json          = query_builder.to_json
      end

      def result
        @json["result"]
      end

      def error
        @json["error"]
      end

      def items
        result["items"]
      end

      def to_objects
        items.map do |item|
          @query_builder.reify(item)
        end
      end

      def find_each(&block)
        to_objects.each(&block)

        if next_page?
          response = next_page!
          response.find_each(&block)
        end
      end

      def error?
        error.present?
      end

      def length
        items.length
      end

      def more_pages?
        current_page < total_pages
      end

      alias :next_page? :more_pages?

      def next_page_number
        current_page + 1
      end

      # Can't call Mashery too many times, or they get mad
      MASHERY_WAIT_TIME = 0.1

      def next_page!
        sleep(MASHERY_WAIT_TIME)
        Response.new(@query_builder.page(next_page_number))
      end

      def total_items
        result["total_items"]
      end

      def total_pages
        result["total_pages"]
      end

      def current_page
        result["current_page"]
      end

      def items_per_page
        result["items_per_page"]
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
masheri-0.6.1 lib/masheri/rpc_client/response.rb
masheri-0.6.0 lib/masheri/rpc_client/response.rb
masheri-0.5.6 lib/masheri/rpc_client/response.rb
masheri-0.5.5 lib/masheri/rpc_client/response.rb
masheri-0.5.2 lib/masheri/rpc_client/response.rb
masheri-0.5.1 lib/masheri/rpc_client/response.rb
masheri-0.5.0 lib/masheri/rpc_client/response.rb
masheri-0.4.0 lib/masheri/rpc_client/response.rb