Sha256: 9cae1f077ff3191bad261683fe87cb30cc56dfb12c52854ffe958719d1c24d47

Contents?: true

Size: 1.65 KB

Versions: 1

Compression:

Stored size: 1.65 KB

Contents

module SimpleCart

  class Cart

    attr_accessor :session

    def initialize(cart_session)
      @session = cart_session
    end

    def subtotal
      subtotal = 0
      unless @session.nil?
        @session.each do |k, v|
          subtotal += k.split('_')[0].constantize.find(k.split('_')[1]).price * v
        end
        subtotal -= @discount unless @discount.nil?
        subtotal
      end
    end

    def items
      unless @session.nil?
        arr = []
        @session.each do |k, v|
          arr << k.split('_')[0].constantize.find(k.split('_')[1])
        end
        arr
      end
    end

    def order_items
      items = []
      self.items.each do |item|
        items << OrderItem.new(price: item.price, qty: @session["#{item.class}_#{item.id}".to_s], itemable: item)
      end
      items
    end

    def build_order
      order = Order.new(total_price: self.subtotal, completed_date: Time.now)
      order.order_items << self.order_items
      order
    end

    def add_item(book_id, qty)
      qty = 1 unless qty > 0
      @session[book_id].nil? ? @session[book_id] = qty : @session[book_id] += qty
    end

    def remove_item(item_id)
      @session.delete(item_id)
    end

    def update_books(params)
      @session.each do |k, v|
        params[k] = 1 unless params[k].to_i > 0
        @session[k] = params[k].to_i
      end
      @discount = discount(params[:coupon]) if using_coupon?
    end

    def using_coupon?
      SimpleCart.coupon_class
    rescue
      false
    end

    def discount(code=nil)
      coupon = SimpleCart.coupon_class.find_by(code: code)
      self.subtotal * (coupon.discount / 100.0) unless coupon.nil?
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
simple_cart-0.0.3 app/models/simple_cart/cart.rb