10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
# File 'lib/prezzo/explainable.rb', line 10
def explain_with(*component_names)
define_method(:explain) do
explanation = {
total: calculate,
}
components = component_names.each_with_object({}) do |component, acc|
value = send(component)
if self.class.respond_to?(:components) && self.class.components.include?(component)
value = cached_components[component]
end
value = value.explain if value.respond_to?(:explain)
value = value.calculate if value.respond_to?(:calculate)
acc[component] = value
end
explanation[:components] = components unless components.empty?
explanation
end
end
|