class Dry::Logic::Operations::Set

def [](input)

def [](input)
  rules.map { |rule| rule[input] }.all?
end

def ast(input = Undefined)

def ast(input = Undefined)
  [type, rules.map { |rule| rule.ast(input) }]
end

def call(input)

def call(input)
  results = rules.map { |rule| rule.(input) }
  success = results.all?(&:success?)
  Result.new(success, id) do
    [type, results.select(&:failure?).map(&:to_ast)]
  end
end

def to_s

def to_s
  "#{type}(#{rules.map(&:to_s).join(", ")})"
end

def type

def type
  :set
end