class Determinator::Explainer
Constants
- MESSAGES
Attributes
enabled[RW]
logs[R]
Public Class Methods
new()
click to toggle source
# File lib/determinator/explainer.rb, line 8 def initialize @logs = [] @enabled = false end
Public Instance Methods
explain() { || ... }
click to toggle source
# File lib/determinator/explainer.rb, line 13 def explain @enabled = true { outcome: yield, explanation: @logs } ensure @logs = [] @enabled = false end
log(type, args = {}) { |: nil| ... }
click to toggle source
# File lib/determinator/explainer.rb, line 21 def log(type, args = {}) result = block_given? ? yield : nil return result unless @enabled result.tap do |r| add(type, r, args) end end
Private Instance Methods
add(type, result, args = {})
click to toggle source
# File lib/determinator/explainer.rb, line 33 def add(type, result, args = {}) template = MESSAGES[type].fetch(result.to_s) { MESSAGES[type][:default] } return unless template args = convert_hash( args.merge(result: result) .transform_values { |v| v.respond_to?(:to_explain_params) ? v.to_explain_params : v } ) @logs << template.dup.tap do |m| m[:title] = format(m[:title], args) m[:subtitle] = format(m[:subtitle], args) if m[:subtitle] end true end
convert_hash(hsh, path = "")
click to toggle source
# File lib/determinator/explainer.rb, line 49 def convert_hash(hsh, path = "") hsh.each_with_object({}) do |(k, v), ret| key = "#{path}#{k}" if v.is_a?(Hash) ret.merge! convert_hash(v, "#{key}.") else ret[key.to_sym] = v end end end