Sha256: b8dbae7a4091cfd93ff686821802c36044c744573eff020ef38ec5e48f448c97

Contents?: true

Size: 877 Bytes

Versions: 14

Compression:

Stored size: 877 Bytes

Contents

module Dynflow
  module Testing

    # when extended into Class or an_object it makes all instances of the class or the object
    # mimic the supplied types. It does so by hooking into kind_of? method.
    # @example
    #   m = mock('product')
    #   m.is_a? ::Product # => false
    #   m.extend Mimic
    #   m.mimic! ::Product
    #   m.is_a? ::Product # => true
    module Mimic
      class ::Module
        def ===(v)
          v.kind_of? self
        end
      end

      def mimic!(*types)
        define =-> _ do
          define_method :kind_of? do |type|
            types.any? { |t| t <= type } || super(type)
          end

          alias_method :is_a?, :kind_of?
        end

        if self.kind_of? ::Class
          self.class_eval &define
        else
          self.singleton_class.class_eval &define
        end

        self
      end
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
dynflow-0.7.4 lib/dynflow/testing/mimic.rb
dynflow-0.7.3 lib/dynflow/testing/mimic.rb
dynflow-0.7.2 lib/dynflow/testing/mimic.rb
dynflow-0.7.1 lib/dynflow/testing/mimic.rb
dynflow-0.7.0 lib/dynflow/testing/mimic.rb
dynflow-0.6.2 lib/dynflow/testing/mimic.rb
dynflow-0.6.1 lib/dynflow/testing/mimic.rb
dynflow-0.6.0 lib/dynflow/testing/mimic.rb
dynflow-0.5.1 lib/dynflow/testing/mimic.rb
dynflow-0.5.0 lib/dynflow/testing/mimic.rb
dynflow-0.4.1 lib/dynflow/testing/mimic.rb
dynflow-0.4.0 lib/dynflow/testing/mimic.rb
dynflow-0.3.0 lib/dynflow/testing/mimic.rb
dynflow-0.2.0 lib/dynflow/testing/mimic.rb