Class: Spree::Calculator

Inherits:
Base
  • Object
show all
Includes:
Preferences::Persistable
Defined in:
app/models/spree/calculator.rb

Defined Under Namespace

Modules: Returns, Shipping Classes: DefaultTax, DistributedAmount, FlatPercentItemTotal, FlatRate, FlexiRate, PercentOnLineItem, TieredFlatRate, TieredPercent

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

display_includes

Methods included from Spree::Core::Permalinks

#generate_permalink, #save_permalink

Class Method Details

.descriptionString

A description for this calculator in few words

Returns:

  • (String)

    A description for the calculator


28
29
30
# File 'app/models/spree/calculator.rb', line 28

def self.description
  model_name.human
end

Instance Method Details

#available?(_object) ⇒ Boolean

Returns:

  • (Boolean)

42
43
44
# File 'app/models/spree/calculator.rb', line 42

def available?(_object)
  true
end

#compute(computable) ⇒ Object

This method calls a compute_<computable> method. must be overriden in concrete calculator.

It should return amount computed based on #calculable and the computable parameter


14
15
16
17
18
19
20
21
22
23
24
# File 'app/models/spree/calculator.rb', line 14

def compute(computable)
  # Spree::LineItem -> :compute_line_item
  computable_name = computable.class.name.demodulize.underscore
  method_name = "compute_#{computable_name}".to_sym
  calculator_class = self.class
  if respond_to?(method_name)
    send(method_name, computable)
  else
    raise NotImplementedError, "Please implement '#{method_name}(#{computable_name})' in your calculator: #{calculator_class.name}"
  end
end

#descriptionObject


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

def description
  self.class.description
end

#to_sObject


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

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