Class: Calculator
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Calculator
- Defined in:
- app/models/calculator.rb
Direct Known Subclasses
FlatPercentItemTotal, FlatRate, FlexiRate, PerItem, PriceBucket, SalesTax, Vat
Defined Under Namespace
Classes: FlatPercentItemTotal, FlatRate, FlexiRate, PerItem, PriceBucket, SalesTax, Vat
Constant Summary collapse
- @@calculators =
Set.new
Class Method Summary collapse
-
.calculators ⇒ Object
Returns all calculators applicable for kind of work If passed nil, will return only general calculators.
-
.description ⇒ Object
overwrite to provide description for your calculators.
-
.register(*klasses) ⇒ Object
Registers calculator to be used with selected kinds of operations.
Instance Method Summary collapse
- #available?(object) ⇒ Boolean
-
#compute(something = nil) ⇒ Object
This method must be overriden in concrete calculator.
- #description ⇒ Object
- #to_s ⇒ Object
Class Method Details
.calculators ⇒ Object
Returns all calculators applicable for kind of work If passed nil, will return only general calculators
31 32 33 |
# File 'app/models/calculator.rb', line 31 def self.calculators @@calculators.to_a end |
.description ⇒ Object
overwrite to provide description for your calculators
12 13 14 |
# File 'app/models/calculator.rb', line 12 def self.description "Base Caclulator" end |
.register(*klasses) ⇒ Object
Registers calculator to be used with selected kinds of operations
20 21 22 23 24 25 26 27 |
# File 'app/models/calculator.rb', line 20 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 |
Instance Method Details
#available?(object) ⇒ Boolean
43 44 45 |
# File 'app/models/calculator.rb', line 43 def available?(object) return true #should be overridden if needed 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
7 8 9 |
# File 'app/models/calculator.rb', line 7 def compute(something=nil) raise(NotImplementedError, "please use concrete calculator") end |
#description ⇒ Object
39 40 41 |
# File 'app/models/calculator.rb', line 39 def description self.class.description end |
#to_s ⇒ Object
35 36 37 |
# File 'app/models/calculator.rb', line 35 def to_s self.class.name.titleize.gsub("Calculator\/", "") end |