Module: Invoicing::Taxable::ActMethods
- Defined in:
- lib/invoicing/taxable.rb
Instance Method Summary collapse
-
#acts_as_taxable(*args) ⇒ Object
Declares that one or more attributes on this model object store monetary values to which tax may be applied.
Instance Method Details
#acts_as_taxable(*args) ⇒ Object
Declares that one or more attributes on this model object store monetary values to which tax may be applied. Takes one or more attribute names, followed by an options hash:
:tax_logic
-
Object with instance methods apply_tax, remove_tax, tax_info and tax_details as documented in the
Taxable
module. Required. :currency
-
The name of the attribute/database column which stores the ISO 4217 currency code for the monetary amounts in this model object. Required if the column is not called
currency
.
acts_as_taxable
implies acts_as_currency_value
with the same options. See the Taxable
for details.
217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 |
# File 'lib/invoicing/taxable.rb', line 217 def acts_as_taxable(*args) Invoicing::ClassInfo.acts_as(Invoicing::Taxable, self, args) attrs = taxable_class_info.new_args.map{|a| a.to_s } currency_attrs = attrs + attrs.map{|attr| "#{attr}_taxed"} currency_opts = taxable_class_info..update({:conversion_input => :convert_taxable_value}) acts_as_currency_value(currency_attrs, currency_opts) attrs.each {|attr| generate_attr_taxable_methods(attr) } if tax_logic = taxable_class_info.[:tax_logic] other_methods = (tax_logic.respond_to?(:mixin_methods) ? tax_logic.mixin_methods : []) || [] other_methods.each {|method_name| generate_attr_taxable_other_method(method_name.to_s) } else raise ArgumentError, 'You must specify a :tax_logic option for acts_as_taxable' end end |