class Legion::Extensions::Conditioner::Condition

Public Class Methods

new(args) click to toggle source
# File lib/legion/extensions/conditioner/helpers/condition.rb, line 7
def initialize(args)
  @conditions = Legion::JSON.load(args[:conditions])
  @values = to_dotted_hash(args[:values])
end

Public Instance Methods

to_dotted_hash(source, target = {}, namespace = nil) click to toggle source
# File lib/legion/extensions/conditioner/helpers/condition.rb, line 12
def to_dotted_hash(source, target = {}, namespace = nil)
  prefix = "#{namespace}." if namespace
  case source
  when Hash
    source.each do |key, value|
      to_dotted_hash(value, target, "#{prefix}#{key}")
    end
  when Array
    source.each_with_index do |value, index|
      to_dotted_hash(value, target, "#{prefix}#{index}")
    end
  else
    target[namespace] = source
  end
  target
end
valid?() click to toggle source
# File lib/legion/extensions/conditioner/helpers/condition.rb, line 70
def valid?
  @valid = validate_test if @valid.nil?
  @valid
end
validate_test(conditions = @conditions) click to toggle source
# File lib/legion/extensions/conditioner/helpers/condition.rb, line 36
def validate_test(conditions = @conditions) # rubocop:disable Metrics/AbcSize
  conditions.each do |condition|
    condition[1].each do |rule|
      result = validate_test('conditions' => { 'all' => rule[:all] }) if rule.include? :all
      result = validate_test('conditions' => { 'any' => rule[:any] }) if rule.include? :any
      case rule[:operator]
      when 'equal'
        result = Legion::Extensions::Conditioner::Comparator.equal?(rule[:fact], rule[:value], @values)
      when 'not_equal'
        result = Legion::Extensions::Conditioner::Comparator.not_equal?(rule[:fact], rule[:value], @values)
      when 'nil'
        result = Legion::Extensions::Conditioner::Comparator.nil?(rule[:fact], @values)
      when 'not_nil'
        result = Legion::Extensions::Conditioner::Comparator.not_nil?(rule[:fact], @values)
      when 'is_false'
        result = Legion::Extensions::Conditioner::Comparator.is_false?(rule[:fact], @values)
      when 'is_true'
        result = Legion::Extensions::Conditioner::Comparator.is_true?(rule[:fact], @values)
      when 'is_string'
        result = Legion::Extensions::Conditioner::Comparator.is_string?(rule[:fact], @values)
      when 'is_array'
        result = Legion::Extensions::Conditioner::Comparator.is_array?(rule[:fact], @values)
      when 'is_integer'
        result = Legion::Extensions::Conditioner::Comparator.is_integer?(rule[:fact], @values)
      end

      return true if condition[0] == :any && result == true
      return false if condition[0] == :all && result == false
    end
    return false if condition[0] == :any
    return true if condition[0] == :all
  end
end
validate_vars() click to toggle source
# File lib/legion/extensions/conditioner/helpers/condition.rb, line 29
def validate_vars
  raise Legion::Exception::MissingArgument, '@conditions is nil' if @conditions.nil?
  raise Legion::Exception::MissingArgument, '@values is nil' if @values.nil?
  raise Legion::Exception::WrongType::Hash, @values.class unless @values.is_a? Hash
  raise Legion::Exception::WrongType::Hash, @conditions.class unless @conditions.is_a? Hash
end