Sha256: 53c7989ca12aa3f2092effc844c213a874fc7783914459c3ed995479984049ab

Contents?: true

Size: 779 Bytes

Versions: 5

Compression:

Stored size: 779 Bytes

Contents

module Monolens
  module Type
    class Any
      include Type::ErrorHandling

      def initialize(candidates)
        @candidates = candidates
      end

      def self.of(*candidates)
        Any.new(candidates)
      end

      def self.dress(instance, registry)
        instance
      end

      def self.===(instance)
        true
      end

      def ===(instance)
        @candidates.any?{|c| c === instance }
      end

      def dress(instance, registry, &block)
        first_error = nil
        @candidates.each do |candidate|
          begin
            return candidate.dress(instance, registry, &block)
          rescue TypeError => ex
            first_error ||= ex
          end
        end
        fail!(first_error.message, &block)
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
monolens-0.6.4 lib/monolens/type/any.rb
monolens-0.6.3 lib/monolens/type/any.rb
monolens-0.6.2 lib/monolens/type/any.rb
monolens-0.6.1 lib/monolens/type/any.rb
monolens-0.6.0 lib/monolens/type/any.rb