Sha256: 640b42fa0f556ba6782308e96b20f8a45bdaad3e1552e2c4bd95b0edd857e1ac

Contents?: true

Size: 1.19 KB

Versions: 1

Compression:

Stored size: 1.19 KB

Contents

module Flows
  class Contract
    # Makes a contract from provided object's case equality check.
    #
    # @example String contract
    #     string_check = Flows::Contract::CaseEq.new(String)
    #
    #     string_check.check(111)
    #     # => Flows::Result::Err.new('must match `String`')
    #
    #     string_check === 'sdfdsfsd'
    #     # => true
    #
    # @example Integer contract with custom error message
    #     int_check = Flows::Contract::CaseEq.new(Integer, 'must be an integer')
    #
    #     int_check.check('111')
    #     # => Flows::Result::Err.new('must be an integer')
    #
    #     string_check === 'sdfdsfsd'
    #     # => true
    class CaseEq < Contract
      # @param object [#===] object with case equality
      # @param error_message [String] you may override default error message
      def initialize(object, error_message = nil)
        @object = object
        @error_message = error_message
      end

      # @see Contract#check!
      def check!(other)
        unless @object === other
          value_error = @error_message || "must match `#{@object.inspect}`"
          raise Error.new(other, value_error)
        end

        true
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
flows-0.4.0 lib/flows/contract/case_eq.rb