Module: ActsAsPurchasable
- Extended by:
- ActiveSupport::Concern
- Defined in:
- app/models/concerns/acts_as_purchasable.rb
Defined Under Namespace
Modules: ActiveRecord, ClassMethods
Instance Method Summary
collapse
Instance Method Details
#declined!(order = nil, order_item = nil) ⇒ Object
124
125
126
127
|
# File 'app/models/concerns/acts_as_purchasable.rb', line 124
def declined!(order = nil, order_item = nil)
after_decline(order, order_item) if self.respond_to?(:after_decline)
self.save!
end
|
#is_effectively_purchasable? ⇒ Boolean
45
46
47
|
# File 'app/models/concerns/acts_as_purchasable.rb', line 45
def is_effectively_purchasable?
true
end
|
#price ⇒ Object
49
50
51
|
# File 'app/models/concerns/acts_as_purchasable.rb', line 49
def price
self[:price] || 0
end
|
#price=(value) ⇒ Object
If I have a column type of Integer, and I’m passed a non-Integer, convert it here
54
55
56
57
58
59
60
61
62
63
64
65
66
|
# File 'app/models/concerns/acts_as_purchasable.rb', line 54
def price=(value)
integer_column = ((column_for_attribute('price').try(:type) rescue nil) == :integer)
if integer_column == false
super
elsif value.kind_of?(Integer)
super
elsif value.kind_of?(String) && !value.include?('.') super
else super((value.to_f * 100.0).to_i)
end
end
|
#purchased!(order = nil, order_item = nil) ⇒ Object
114
115
116
117
118
119
120
121
122
|
# File 'app/models/concerns/acts_as_purchasable.rb', line 114
def purchased!(order = nil, order_item = nil)
after_purchase(order, order_item) if self.respond_to?(:after_purchase)
self.save!
end
|
#purchased? ⇒ Boolean
90
91
92
|
# File 'app/models/concerns/acts_as_purchasable.rb', line 90
def purchased?
@is_purchased ||= orders.any? { |order| order.purchased? }
end
|
#purchased_by?(user) ⇒ Boolean
94
95
96
|
# File 'app/models/concerns/acts_as_purchasable.rb', line 94
def purchased_by?(user)
orders.any? { |order| order.purchased? && order.user_id == user.id }
end
|
#purchased_download_url ⇒ Object
Override me if this is a digital purchase.
130
131
132
|
# File 'app/models/concerns/acts_as_purchasable.rb', line 130
def purchased_download_url
false
end
|
#purchased_orders ⇒ Object
98
99
100
|
# File 'app/models/concerns/acts_as_purchasable.rb', line 98
def purchased_orders
orders.select { |order| order.purchased? }
end
|
#quantity_enabled? ⇒ Boolean
102
103
104
|
# File 'app/models/concerns/acts_as_purchasable.rb', line 102
def quantity_enabled?
self.respond_to?(:quantity_enabled) ? quantity_enabled == true : false
end
|
#quantity_remaining ⇒ Object
106
107
108
|
# File 'app/models/concerns/acts_as_purchasable.rb', line 106
def quantity_remaining
(quantity_max - quantity_purchased) rescue 0
end
|
#seller ⇒ Object
84
85
86
87
88
|
# File 'app/models/concerns/acts_as_purchasable.rb', line 84
def seller
if EffectiveOrders.stripe_connect_enabled
raise 'acts_as_purchasable object requires the seller be defined to return the User selling this item. This is only a requirement when using StripeConnect.'
end
end
|
#sold_out? ⇒ Boolean
110
111
112
|
# File 'app/models/concerns/acts_as_purchasable.rb', line 110
def sold_out?
quantity_enabled? ? (quantity_remaining == 0) : false
end
|
#tax_exempt ⇒ Object
72
73
74
|
# File 'app/models/concerns/acts_as_purchasable.rb', line 72
def tax_exempt
self[:tax_exempt] || false
end
|
#tax_rate ⇒ Object
76
77
78
79
80
81
82
|
# File 'app/models/concerns/acts_as_purchasable.rb', line 76
def tax_rate
@tax_rate ||= (
self.instance_exec(self, &EffectiveOrders.tax_rate_method).to_f.tap do |rate|
raise ArgumentError.new("expected EffectiveOrders.tax_rate_method to return a value between 0 and 1. Received #{rate}. Please return 0.05 for 5% tax.") if (rate > 1.0 || rate < 0.0)
end
)
end
|
#title ⇒ Object
68
69
70
|
# File 'app/models/concerns/acts_as_purchasable.rb', line 68
def title
self[:title] || 'ActsAsPurchasable'
end
|