Sha256: 43da0659021e3a219d1208ee41fa12976cb701e92d1272daebf6593420aaf544

Contents?: true

Size: 1.39 KB

Versions: 4

Compression:

Stored size: 1.39 KB

Contents

class Trolley < ActiveRecord::Base
  belongs_to :user
  has_many :orders

  # get specified order (or first, if not specified)
  # or create one if none exists
  def selected_order(position = 1)
    index = position - 1
    
    orders[index] || orders.create!
  end

  # TODO: STUB: implement way to determine
  # correct order given an purchasable_item
  def correct_order(purchasable_item)
    orders.with_state_current.first || orders.create!
  end

  # add item or array of items to trolley
  def add(*items_to_order)
    # get order
    items_to_order.each do |item|
      selected_order.add(item)
    end
  end

  # do any of this trolley's orders contain the purchasable_item?
  # TODO: when status is added to orders, limit by option for checking status
  def contains?(purchasable_item, state = nil)
    within_orders = state ? orders.send("with_state_#{state}") : orders

    these_contain?(within_orders, purchasable_item)
  end

  def these_contain?(within_orders, purchasable_item)
    return false if within_orders.size == 0

    within_orders.each do |order|
      return true if order.contains?(purchasable_item)
    end
    false
  end

  # active is defined as either current or in_process order
  def has_active_order_for?(purchasable_item)
    within_orders = orders.with_state_current + orders.with_state_in_process + orders.with_state_ready

    these_contain?(within_orders, purchasable_item)
  end

end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
trollied-0.1.3 app/models/trolley.rb
trollied-0.1.2 app/models/trolley.rb
trollied-0.1.1 app/models/trolley.rb
trollied-0.1.0 app/models/trolley.rb