class LightRulesEngine::DataProvider
Attributes
data[R]
Public Class Methods
new(data)
click to toggle source
# File lib/light_rules_engine/data_provider.rb, line 3 def initialize(data) @data = data end
Public Instance Methods
value_for(keyword)
click to toggle source
# File lib/light_rules_engine/data_provider.rb, line 7 def value_for(keyword) send_methods(keyword).inject(data, &method(:call_chain_methods)) end
Private Instance Methods
call_chain_methods(object, method_name)
click to toggle source
# File lib/light_rules_engine/data_provider.rb, line 19 def call_chain_methods(object, method_name) state = method_state(method_name) return nil unless object.respond_to?(state[:method_name]) case state[:kind] when :pure then object.public_send(state[:method_name]) when :round then object.public_send(state[:method_name], state[:arg]) when :square then object.public_send(state[:method_name]).public_send(:[], state[:arg]) end end
method_state(method_name)
click to toggle source
# File lib/light_rules_engine/data_provider.rb, line 29 def method_state(method_name) arg_var_one = method_name[/\(.*?\)/] arg_var_two = method_name[/\[.*?\]/] arg = (arg_var_one || arg_var_two) method_name = method_name.gsub!(arg.to_s, '') return { method_name: method_name, kind: :pure } unless arg return { method_name: method_name, kind: :square, arg: prepare_arg(arg) } if arg_var_two { method_name: method_name, kind: :round, arg: prepare_arg(arg) } end
prepare_arg(arg)
click to toggle source
# File lib/light_rules_engine/data_provider.rb, line 39 def prepare_arg(arg) arg.delete!("\"'[()]") Integer(arg) rescue arg end
send_methods(keyword)
click to toggle source
# File lib/light_rules_engine/data_provider.rb, line 15 def send_methods(keyword) keyword.split('.').compact end