Class: Inquirex::Rules::All

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

Overview

Composite rule: logical AND of multiple sub-rules. All must be true.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*rules) ⇒ All

Returns a new instance of All.

Parameters:

  • rules (Array<Rules::Base>)

    sub-rules that must all hold



11
12
13
14
15
# File 'lib/inquirex/rules/all.rb', line 11

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

Instance Attribute Details

#rulesObject (readonly)

Returns the value of attribute rules.



8
9
10
# File 'lib/inquirex/rules/all.rb', line 8

def rules
  @rules
end

Class Method Details

.from_h(hash) ⇒ All

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

Parameters:

  • hash (Hash)

    rule hash with string or symbol keys

Returns:



39
40
41
42
# File 'lib/inquirex/rules/all.rb', line 39

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 every sub-rule evaluates true (vacuously true when empty).

Parameters:

  • answers (Hash{Symbol => Object})

    answer context, step_id => value

Returns:

  • (Boolean)


21
22
23
# File 'lib/inquirex/rules/all.rb', line 21

def evaluate(answers)
  @rules.all? { |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



26
27
28
# File 'lib/inquirex/rules/all.rb', line 26

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

#to_sString

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

Returns:

  • (String)

    human-readable form, sub-rules joined with AND



31
32
33
# File 'lib/inquirex/rules/all.rb', line 31

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