class Dry::Logic::Result

Constants

SUCCESS

Attributes

id[R]
serializer[R]
success[R]

Public Class Methods

new(success, id = nil, &block) click to toggle source
# File lib/dry/logic/result.rb, line 22
def initialize(success, id = nil, &block)
  @success = success
  @id = id
  @serializer = block
end

Public Instance Methods

ast(input = Undefined) click to toggle source
# File lib/dry/logic/result.rb, line 40
def ast(input = Undefined)
  serializer.(input)
end
failure?() click to toggle source
# File lib/dry/logic/result.rb, line 32
def failure?
  !success?
end
success?() click to toggle source
# File lib/dry/logic/result.rb, line 28
def success?
  success
end
to_ast() click to toggle source
# File lib/dry/logic/result.rb, line 44
def to_ast
  if id
    [type, [id, ast]]
  else
    ast
  end
end
to_s() click to toggle source
# File lib/dry/logic/result.rb, line 52
def to_s
  visit(to_ast)
end
type() click to toggle source
# File lib/dry/logic/result.rb, line 36
def type
  success? ? :success : :failure
end

Private Instance Methods

visit(ast) click to toggle source
# File lib/dry/logic/result.rb, line 58
def visit(ast)
  __send__(:"visit_#{ast[0]}", ast[1])
end
visit_and(node) click to toggle source
# File lib/dry/logic/result.rb, line 72
def visit_and(node)
  left, right = node
  "#{visit(left)} AND #{visit(right)}"
end
visit_hint(node) click to toggle source
# File lib/dry/logic/result.rb, line 91
def visit_hint(node)
  visit(node)
end
visit_not(node) click to toggle source
# File lib/dry/logic/result.rb, line 87
def visit_not(node)
  "not(#{visit(node)})"
end
visit_or(node) click to toggle source
# File lib/dry/logic/result.rb, line 77
def visit_or(node)
  left, right = node
  "#{visit(left)} OR #{visit(right)}"
end
visit_predicate(node) click to toggle source
# File lib/dry/logic/result.rb, line 62
def visit_predicate(node)
  name, args = node

  if args.empty?
    name.to_s
  else
    "#{name}(#{args.map(&:last).map(&:inspect).join(", ")})"
  end
end
visit_xor(node) click to toggle source
# File lib/dry/logic/result.rb, line 82
def visit_xor(node)
  left, right = node
  "#{visit(left)} XOR #{visit(right)}"
end