Sha256: c2d059934bf708e060fb9c6be7fa2cc0d82bfe77fdea89c77816e8bbd116669e

Contents?: true

Size: 1.04 KB

Versions: 3

Compression:

Stored size: 1.04 KB

Contents

module DeathAndTaxes
  module Taxable
    def self.included(base)
      base.extend ClassMethods
    end
    
    
    module ClassMethods
      
      ##
      # Makes this model taxable
      # It will then be able to have taxations applied
      # Example:
      #   class Invoicing < ActiveRecord::Base
      #     acts_as_taxable
      #   end
      def acts_as_taxable(*args)
        
        class_eval do
          has_many :taxations, :as => :taxable, :class_name => 'DeathAndTaxes::Taxation'
        end
        
        include DeathAndTaxes::Taxable::InstanceMethods
      end
      
      def calculate_rate taxes
        taxes.reduce(1) { |rate, tax| rate + tax.apply(1) }
      end
      
    end
    
    module InstanceMethods
      def apply_taxes(taxes)
        taxes = [taxes] unless taxes.is_a? Array
        
        self.taxations = taxes.collect do |tax|
          Taxation.new :amount => tax.apply(amount).round, :percentage => tax.percentage, :name => tax.name, :account_number => tax.account_number
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
death_and_taxes-0.0.5 lib/death_and_taxes/taxable.rb
death_and_taxes-0.0.4 lib/death_and_taxes/taxable.rb
death_and_taxes-0.0.3 lib/death_and_taxes/taxable.rb