class RuleBox::Facade
Attributes
_current_method[R]
bucket[R]
data[R]
errors[R]
executed[R]
model[R]
show_steps[RW]
status[R]
steps[R]
Public Class Methods
new(**dependencies)
click to toggle source
# File lib/rule_box/facade.rb, line 7 def initialize(**dependencies) errors = [] settings.dependencies.each do |key, block| begin if dependencies.key? key value = dependencies[key] block&.call(value, errors) else errors << "missing keyword: #{key}" end rescue StandardError => e errors << e.message end end raise errors.join("\n") unless errors.empty? dependencies.each { |key, value| keys["current_#{key}".to_sym] = value } @executed = false @show_steps = settings.show_steps end
Private Class Methods
clear_configuration()
click to toggle source
# File lib/rule_box/facade.rb, line 169 def clear_configuration @settings = Settings.new end
configure() { |settings| ... }
click to toggle source
# File lib/rule_box/facade.rb, line 165 def configure yield(settings) if block_given? end
settings()
click to toggle source
# File lib/rule_box/facade.rb, line 173 def settings @settings ||= Settings.new end
Public Instance Methods
_current_class()
click to toggle source
# File lib/rule_box/facade.rb, line 45 def _current_class @_current_class ||= if model.nil? nil elsif model.is_a?(Class) || model.is_a?(Module) model elsif model.is_a?(Symbol) || model.is_a?(String) Object.const_get RuleBox::Util.camelize(model.to_s) else Object.const_get model.class.name end end
as_json(**options)
click to toggle source
# File lib/rule_box/facade.rb, line 71 def as_json(**options) options.key?(:root) ? { self.class.name.to_sym => attributes } : attributes end
attributes()
click to toggle source
# File lib/rule_box/facade.rb, line 58 def attributes attrs = {} %i[model status data bucket executed errors steps _current_method].each do |key| value = send key attrs[key] = value end attrs end
delete(model, **args)
click to toggle source
# File lib/rule_box/facade.rb, line 41 def delete(model, **args) execute(:delete, model, args) end
insert(model, **args)
click to toggle source
# File lib/rule_box/facade.rb, line 29 def insert(model, **args) execute(:insert, model, args) end
select(model, **args)
click to toggle source
# File lib/rule_box/facade.rb, line 33 def select(model, **args) execute(:select, model, args) end
to_json(**args)
click to toggle source
# File lib/rule_box/facade.rb, line 67 def to_json(**args) JSON.generate(as_json(args), args) end
to_s()
click to toggle source
# File lib/rule_box/facade.rb, line 75 def to_s as_json(root: true).to_s end
update(model, **args)
click to toggle source
# File lib/rule_box/facade.rb, line 37 def update(model, **args) execute(:update, model, args) end
Private Instance Methods
add_step(value)
click to toggle source
# File lib/rule_box/facade.rb, line 145 def add_step(value) new_value = "[#{DateTime.now.strftime('%FT%T.%L%:z')}] #{value}" puts new_value if show_steps || settings.show_steps steps << new_value end
execute(method, model, **args)
click to toggle source
# File lib/rule_box/facade.rb, line 96 def execute(method, model, **args) raise 'Process already executed' if @executed @executed = true @status = :green @bucket = RuleBox::Hash.new args.each { |key, value| bucket[key] = value } pre_process(method, model) end
keys()
click to toggle source
# File lib/rule_box/facade.rb, line 159 def keys @keys ||= {} end
marshal_dump()
click to toggle source
# File lib/rule_box/facade.rb, line 151 def marshal_dump instance_variables.map { |name| [name, instance_variable_get(name)] }.to_h end
marshal_load(variables)
click to toggle source
# File lib/rule_box/facade.rb, line 155 def marshal_load(variables) variables.each { |key, value| instance_variable_set(key, value) } end
method_missing(method, *parameters)
click to toggle source
Calls superclass method
# File lib/rule_box/facade.rb, line 81 def method_missing(method, *parameters) super if parameters.empty? super if method.to_s.end_with? '=' model = parameters[0] args = parameters[1] || {} execute(method, model, args) end
pre_process(method, model)
click to toggle source
# File lib/rule_box/facade.rb, line 106 def pre_process(method, model) @model = model @_current_method = method class_name = _current_class @errors = [] @steps = [] add_step "{ method: #{method}, model: #{class_name}, args: #{bucket} }" strategies = class_name.strategies(method)&.map { |strategy| strategy.new(self) } unless strategies raise "class [#{class_name}] without mapped rules to [#{method}]'" end process(strategies) end
process(strategies)
click to toggle source
# File lib/rule_box/facade.rb, line 122 def process(strategies) add_step "amount of rules #{strategies.count}" strategies.each do |strategy| add_step "executing of rule: #{strategy.class.name}." strategy.process break if status == :red end rescue Exception => e errors << settings.default_error_message @status = :red block = settings.resolve block.call(e, RuleBox::Proxy.new(self)) if block.is_a? Proc ensure add_step 'finalized the process on the facade.' return self end
respond_to_missing?(method, _include_private = false)
click to toggle source
Calls superclass method
# File lib/rule_box/facade.rb, line 90 def respond_to_missing?(method, _include_private = false) return false if @executed || method.to_s.end_with?('=') super end
settings()
click to toggle source
# File lib/rule_box/facade.rb, line 141 def settings RuleBox::Facade.settings end