class GunBroker::User::OrdersAsPagesDelegate

Used to scope {OrdersAsPage} actions by {User}.

Public Class Methods

new(user, options = {}) click to toggle source

@param user [User] A {User} instance to scope order pages by. @param options [Hash] { orders_per_page => <number of desired orders per page> (Integer) }.

# File lib/gun_broker/user/orders_as_pages_delegate.rb, line 12
def initialize(user, options = {})
  max_page_size = GunBroker::API::PAGE_SIZE
  @user = user
  @orders_per_page = options.fetch(:orders_per_page, max_page_size)

  if @orders_per_page > max_page_size
    raise ArgumentError.new("`orders_per_page` may not exceed #{max_page_size}")
  end
end

Public Instance Methods

sold() click to toggle source

Returns pages for orders the User has sold. @note {API#get! GET} /OrdersSold @return [Array<OrdersAsPage>]

# File lib/gun_broker/user/orders_as_pages_delegate.rb, line 25
def sold
  @sold ||= build_pages_for(:OrdersSold, { 'TimeFrame' => GunBroker::API::MAX_ORDERS_TIME_FRAME })
end

Private Instance Methods

build_pages_for(endpoint, params = {}) click to toggle source
# File lib/gun_broker/user/orders_as_pages_delegate.rb, line 31
def build_pages_for(endpoint, params = {})
  endpoint = ['/', endpoint.to_s].join
  _token_header = token_header(@user.token)
  response = GunBroker::API.get(endpoint, params.merge({ 'PageSize' => 1 }), _token_header)
  number_of_pages = (response['count'] / @orders_per_page.to_f).ceil
  orders_as_pages = []

  number_of_pages.times do |page_number|
    page_number += 1
    attrs = {
      page_size:    @orders_per_page,
      page_index:   page_number,
      endpoint:     endpoint,
      params:       params,
      token_header: _token_header
    }

    orders_as_pages << GunBroker::OrdersAsPage.new(attrs)
  end

  orders_as_pages
end