Class: Calculator

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/calculator.rb

Defined Under Namespace

Classes: FlatPercentItemTotal, FlatRate, FlexiRate, PerItem, PriceBucket, SalesTax, Vat

Constant Summary collapse

@@calculators =
Set.new

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.calculatorsObject

Returns all calculators applicable for kind of work If passed nil, will return only general calculators



26
27
28
# File 'app/models/calculator.rb', line 26

def self.calculators
  @@calculators.to_a
end

.descriptionObject

overwrite to provide description for your calculators



12
13
14
# File 'app/models/calculator.rb', line 12

def self.description
  "Base Caclulator"
end

.registerObject

Registers calculator to be used with selected kinds of operations



20
21
22
# File 'app/models/calculator.rb', line 20

def self.register
  @@calculators.add(self)
end

Instance Method Details

#available?(object) ⇒ Boolean

Returns:

  • (Boolean)


38
39
40
# File 'app/models/calculator.rb', line 38

def available?(object)
  self.class.available?(object)
end

#compute(something = nil) ⇒ Object

This method must be overriden in concrete calculator.

It should return amount computed based on #calculable and/or optional parameter

Raises:

  • (NotImplementedError)


7
8
9
# File 'app/models/calculator.rb', line 7

def compute(something=nil)
  raise(NotImplementedError, "please use concrete calculator")
end

#descriptionObject



34
35
36
# File 'app/models/calculator.rb', line 34

def description
  self.class.description
end

#to_sObject



30
31
32
# File 'app/models/calculator.rb', line 30

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