app/models/comable/stock.rb in comable-0.0.2 vs app/models/comable/stock.rb in comable-0.0.3
- old
+ new
@@ -1,31 +1,82 @@
module Comable
+ #
+ # 在庫モデル。
+ # 商品に複数紐付き、品数やSKU(Stock Keeping Unit)情報を保持する。
+ #
class Stock < ActiveRecord::Base
include Decoratable
belongs_to :product, class_name: Comable::Product.name, foreign_key: Comable::Product.table_name.singularize.foreign_key
+ #
+ # @!group Scope
+ #
+
+ # @!scope class
+ # 有効な在庫インスタンスを返す
scope :activated, -> { where.not(product_id_num: nil) }
+
+ # @!scope class
+ # 品切れでない在庫インスタンスを返す
scope :unsold, -> { where('quantity > ?', 0) }
+
+ # @!scope class
+ # 品切れの在庫インスタンスを返す
scope :soldout, -> { where('quantity <= ?', 0) }
+ #
+ # @!endgroup
+ #
+
delegate :price, to: :product
delegate :sku?, to: :product
+ def name
+ return product.name unless product.sku?
+ sku_name = sku_h_choice_name
+ sku_name += '/' + sku_v_choice_name if sku_v_choice_name.present?
+ product.name + "(#{sku_name})"
+ end
+
+ # 在庫の有無を取得する
+ #
+ # @example
+ # stock.unsold? #=> true
+ #
+ # @return [Boolean] 在庫があれば true を返す
+ # @see #soldout?
def unsold?
return false if product_id_num.nil?
return false if quantity.nil?
quantity > 0
end
+ # 在庫の有無を取得する
+ #
+ # @example
+ # stock.soldout? #=> false
+ #
+ # @return [Boolean] {#unsold?} の逆。在庫がなければ true を返す
+ # @see #unsold?
def soldout?
!unsold?
end
- def decrement_quantity!
+ # 在庫減算を行う
+ #
+ # @example
+ # stock.quantity #=> 10
+ # stock.decrement!(quantity: 1) #=> true
+ # stock.quantity #=> 9
+ #
+ # @param quantity [Fixnum] 減算する在庫数を指定する
+ # @return [Boolean] レコードの保存に成功すると true を返す
+ def decrement!(quantity: 1)
with_lock do
# TODO: カラムマッピングのdecrementメソッドへの対応
- update_attributes!(quantity: quantity.pred)
+ self.quantity -= quantity
+ save!
end
end
end
end