Sha256: 139980a27e55373ba3204893a5629755253dcd4c2d34d10215e6555d432cd455

Contents?: true

Size: 1.14 KB

Versions: 5

Compression:

Stored size: 1.14 KB

Contents

module Dry
  module Logic
    def self.Result(response, rule, input)
      Result[rule].new(response, rule, input)
    end

    class Result
      include Dry::Equalizer(:success?, :input, :rule)

      attr_reader :input, :rule, :response, :success

      def self.[](type)
        case type
        when Rule::Each then Result::Each
        when Rule::Set then Result::Set
        when Rule::Key, Rule::Attr, Rule::Check then Result::Named
        else Result::Value
        end
      end

      def initialize(response, rule, input)
        @response = response
        @success = response.respond_to?(:success?) ? response.success? : response
        @rule = rule
        @input = input
      end

      def [](name)
        response[name] if response.respond_to?(:[])
      end

      def name
        nil
      end

      def negated
        self.class.new(!success, rule, input)
      end

      def success?
        @success
      end

      def failure?
        !success?
      end
    end
  end
end

require 'dry/logic/result/value'
require 'dry/logic/result/named'
require 'dry/logic/result/multi'
require 'dry/logic/result/each'
require 'dry/logic/result/set'

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
dry-logic-0.3.0 lib/dry/logic/result.rb
dry-logic-0.2.3 lib/dry/logic/result.rb
dry-logic-0.2.2 lib/dry/logic/result.rb
dry-logic-0.2.1 lib/dry/logic/result.rb
dry-logic-0.2.0 lib/dry/logic/result.rb