Class: Inquirex::Rules::Any

Inherits:
Base
  • Object
show all
Defined in:
lib/inquirex/rules/any.rb

Overview

Composite rule: logical OR of multiple sub-rules. At least one must be true.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*rules) ⇒ Any

Returns a new instance of Any.

Parameters:

  • rules (Array<Rules::Base>)

    sub-rules, at least one of which must hold



10
11
12
13
14
# File 'lib/inquirex/rules/any.rb', line 10

def initialize(*rules)
  super()
  @rules = rules.flatten.freeze
  freeze
end

Instance Attribute Details

#rulesObject (readonly)

Returns the value of attribute rules.



7
8
9
# File 'lib/inquirex/rules/any.rb', line 7

def rules
  @rules
end

Class Method Details

.from_h(hash) ⇒ Any

Deserializes an Any rule, recursively rehydrating its sub-rules.

Parameters:

  • hash (Hash)

    rule hash with string or symbol keys

Returns:



38
39
40
41
# File 'lib/inquirex/rules/any.rb', line 38

def self.from_h(hash)
  raw_rules = hash["rules"] || hash[:rules] || []
  new(*raw_rules.map { |r| Base.from_h(r) })
end

Instance Method Details

#evaluate(answers) ⇒ Boolean

True when at least one sub-rule evaluates true (false when empty).

Parameters:

  • answers (Hash{Symbol => Object})

    answer context, step_id => value

Returns:

  • (Boolean)


20
21
22
# File 'lib/inquirex/rules/any.rb', line 20

def evaluate(answers)
  @rules.any? { |rule| rule.evaluate(answers) }
end

#to_hHash{String => Object}

Returns wire format with nested rule hashes.

Returns:

  • (Hash{String => Object})

    wire format with nested rule hashes



25
26
27
# File 'lib/inquirex/rules/any.rb', line 25

def to_h
  { "op" => "any", "rules" => @rules.map(&:to_h) }
end

#to_sString

Returns human-readable form, sub-rules joined with OR.

Returns:

  • (String)

    human-readable form, sub-rules joined with OR



30
31
32
# File 'lib/inquirex/rules/any.rb', line 30

def to_s
  "(#{@rules.join(" OR ")})"
end