Sha256: 514d09efbbfdb8514e95b9027df45b460d23b901efdcaa9f2fae718a124961c6

Contents?: true

Size: 745 Bytes

Versions: 2

Compression:

Stored size: 745 Bytes

Contents

module Datacaster
  class ThenNode < Base
    def initialize(left, then_caster)
      @left = left
      @then = then_caster
    end

    def else(else_caster)
      raise ArgumentError.new("Datacaster: double else clause is not permitted") if @else

      @else = else_caster
      self
    end

    def cast(object)
      unless @else
        raise ArgumentError.new('Datacaster: use "a & b" instead of "a.then(b)" when there is no else-clause')
      end

      object = super(object)
      left_result = @left.(object)

      if left_result.valid?
        @then.(left_result)
      else
        @else.(object)
      end
    end

    def inspect
      "#<Datacaster::ThenNode Then: #{@then.inspect} Else: #{@else.inspect}>"
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
datacaster-2.0.2 lib/datacaster/then_node.rb
datacaster-2.0.1 lib/datacaster/then_node.rb