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