Class: PoroValidator::Validator::Conditions

Inherits:
Object
  • Object
show all
Defined in:
lib/poro_validator/validator/conditions.rb

Overview

Since:

  • 0.0.1

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(context) ⇒ Conditions

Returns a new instance of Conditions.

Since:

  • 0.0.1



32
33
34
# File 'lib/poro_validator/validator/conditions.rb', line 32

def initialize(context)
  @context = context
end

Class Method Details

.matched?(conditions, context) ⇒ Boolean

Returns:

  • (Boolean)

Since:

  • 0.0.1



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/poro_validator/validator/conditions.rb', line 4

def self.matched?(conditions, context)
  results = []
  inst    = new(context)

  conditions.each do |condition|
    condition.each do |type, value|
      unless [:if, :unless].include?(type)
        raise ::PoroValidator::InvalidCondition.new(
          "Unimplemented conditional key: #{type}"
        )
      end

      if value.is_a?(::Array)
        value.each do |v|
          results << inst.match_condition(type, v)
        end
        next
      end

      results << inst.match_condition(type, value)
      next
    end
  end

  return false if results.include?(false)
  true
end

Instance Method Details

#match_condition(type, condition) ⇒ Object

Since:

  • 0.0.1



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/poro_validator/validator/conditions.rb', line 36

def match_condition(type, condition)
  result =
    case condition
    when String
      condition_type[String].call(context, condition)
    when Symbol
      condition_type[Symbol].call(context, condition)
    when Proc
      condition.call(context)
    else
      raise ::PoroValidator::InvalidCondition.new(
        "Unimplemented condition: #{condition.inspect}"
      )
    end

  if type == :unless
    return !result
  end
  result
end