Sha256: f016616899fe67a92d14b31795cc571da1fcb723c64a8423937e8739412d1dbd

Contents?: true

Size: 1 KB

Versions: 6

Compression:

Stored size: 1 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
    @@calculators.add(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)
    self.class.available?(object)
  end
end

Version data entries

6 entries across 6 versions & 2 rubygems

Version Path
spree-enriquez-0.9.4 app/models/calculator.rb
spree-0.9.4 app/models/calculator.rb
spree-0.9.3 app/models/calculator.rb
spree-0.9.2 app/models/calculator.rb
spree-0.9.1 app/models/calculator.rb
spree-0.9.0 app/models/calculator.rb