Sha256: 1fd9f4dc5260b07062e2561f102a23d8e5e21ee76af1307d9efdceff6e5dea26

Contents?: true

Size: 1.5 KB

Versions: 4

Compression:

Stored size: 1.5 KB

Contents

module A2z
  module Responses
    class ItemSearch
      include Helpers
      
      attr_accessor :operation_request, :items, :total_results, :total_pages, :more_search_results_url
      
      def initialize
        @items = []
        @total_results = 0
        @total_pages = 0
        @valid = true
      end
      
      def valid=(value)
        @valid = !!value
      end
      
      def valid?
        @valid
      end
      
      # TODO capture data['Items']['Request']['Errors'] into an attr_accessor value
      # TODO consider capturing data['Items']['Request'] into an attr_accessor value
      def self.from_response(data)
        new.tap do |item_search|
          item_search.operation_request       = OperationRequest.from_response(data['OperationRequest']) if data['OperationRequest']
          item_search.items                   = items_from_response(data)
          item_search.total_results           = data['Items']['TotalResults'].to_i rescue 0
          item_search.total_pages             = data['Items']['TotalPages'].to_i rescue 0
          item_search.more_search_results_url = data['Items']['MoreSearchResultsUrl'] rescue nil
          item_search.valid                   = data['Items']['Request']['IsValid'] == 'True' rescue false
          item_search.freeze
        end
      end
      
      private
      
      def self.items_from_response(data)
        items = array_wrap(data['Items']['Item']) rescue []
        items.collect { |item| Item.from_response(item) }
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
a2z-0.1.3 lib/a2z/responses/item_search.rb
a2z-0.1.2 lib/a2z/responses/item_search.rb
a2z-0.1.1 lib/a2z/responses/item_search.rb
a2z-0.1.0 lib/a2z/responses/item_search.rb