Sha256: 69fb07886d2bdc94b97d7bd8ddaa462693e4b4e13fca5363f8602d62a44fd1d4

Contents?: true

Size: 1.16 KB

Versions: 39

Compression:

Stored size: 1.16 KB

Contents

class Calculator < ActiveRecord::Base
  belongs_to :calculable, :polymorphic => true

  # This method must be overriden in concrete calculator.
  #
  # It should return amount computed based on #calculable and/or optional parameter
  def compute(something=nil)
    raise(NotImplementedError, "please use concrete calculator")
  end

  # overwrite to provide description for your calculators
  def self.description
    "Base Caclulator"
  end

  ###################################################################

  @@calculators = Set.new
  # Registers calculator to be used with selected kinds of operations
  def self.register(*klasses)
    @@calculators.add(self)
    klasses.each do |klass|
      klass = klass.constantize if klass.is_a?(String)
      klass.register_calculator(self)
    end
    self
  end

  # Returns all calculators applicable for kind of work
  # If passed nil, will return only general calculators
  def self.calculators
    @@calculators.to_a
  end

  def to_s
    self.class.name.titleize.gsub("Calculator\/", "")
  end

  def description
    self.class.description
  end

  def available?(object)
    return true #should be overridden if needed
  end
end

Version data entries

39 entries across 39 versions & 7 rubygems

Version Path
spree-0.11.4 app/models/calculator.rb
apispree_core-0.0.0 app/models/calculator.rb
My-Commerce_core-1.1.0 app/models/calculator.rb
My-Commerce_core-1.0.0 app/models/calculator.rb
MyCommerceapi-1.0.0 core/app/models/calculator.rb
MyCommerce-0.0.3 core/app/models/calculator.rb
rfcommerce_core-0.0.3 app/models/calculator.rb
spree_core-0.60.6 app/models/calculator.rb
spree_core-0.60.5 app/models/calculator.rb
spree-0.11.3 app/models/calculator.rb
spree_core-0.30.2 app/models/calculator.rb
spree_core-0.40.4 app/models/calculator.rb
spree_core-0.50.4 app/models/calculator.rb
spree_core-0.60.4 app/models/calculator.rb
spree_core-0.50.3 app/models/calculator.rb
spree_core-0.60.3 app/models/calculator.rb
spree_core-0.60.2 app/models/calculator.rb
spree_core-0.70.0.rc2 app/models/calculator.rb
spree_core-0.70.RC1 app/models/calculator.rb
spree_core-0.60.1 app/models/calculator.rb