Sha256: 5b622813b03260cbd396fb704443dba78923ee0418a68302d50d08f413e6f6f3

Contents?: true

Size: 1.33 KB

Versions: 32

Compression:

Stored size: 1.33 KB

Contents

module Spec
  module Mocks
    
    class ArgumentExpectation
      attr_reader :args
      
      def initialize(args, &block)
        @args = args
        @constraints_block = block
        
        if ArgumentConstraints::AnyArgsConstraint === args.first
          @match_any_args = true
        elsif ArgumentConstraints::NoArgsConstraint === args.first
          @constraints = []
        else
          @constraints = args.collect {|arg| constraint_for(arg)}
        end
      end
      
      def constraint_for(arg)
        return ArgumentConstraints::MatcherConstraint.new(arg)   if is_matcher?(arg)
        return ArgumentConstraints::RegexpConstraint.new(arg) if arg.is_a?(Regexp)
        return ArgumentConstraints::EqualityProxy.new(arg)
      end
      
      def is_matcher?(obj)
        return obj.respond_to?(:matches?) && obj.respond_to?(:description)
      end
      
      def args_match?(given_args)
        match_any_args? || constraints_block_matches?(given_args) || constraints_match?(given_args)
      end
      
      def constraints_block_matches?(given_args)
        @constraints_block ? @constraints_block.call(*given_args) : nil
      end
      
      def constraints_match?(given_args)
        @constraints == given_args
      end
      
      def match_any_args?
        @match_any_args
      end
      
    end
    
  end
end

Version data entries

32 entries across 32 versions & 6 rubygems

Version Path
dchelimsky-rspec-1.1.10 lib/spec/mocks/argument_expectation.rb
dchelimsky-rspec-1.1.11.1 lib/spec/mocks/argument_expectation.rb
dchelimsky-rspec-1.1.11.2 lib/spec/mocks/argument_expectation.rb
dchelimsky-rspec-1.1.11.3 lib/spec/mocks/argument_expectation.rb
dchelimsky-rspec-1.1.11.4 lib/spec/mocks/argument_expectation.rb
dchelimsky-rspec-1.1.11.5 lib/spec/mocks/argument_expectation.rb
dchelimsky-rspec-1.1.11.6 lib/spec/mocks/argument_expectation.rb
dchelimsky-rspec-1.1.11.7 lib/spec/mocks/argument_expectation.rb
dchelimsky-rspec-1.1.11 lib/spec/mocks/argument_expectation.rb
merb-core-1.1.3 spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/argument_expectation.rb
merb-core-1.1.2 spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/argument_expectation.rb
merb-core-1.1.1 spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/argument_expectation.rb
merb-core-1.1.0 spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/argument_expectation.rb
merb-core-1.1.0.rc1 spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/argument_expectation.rb
merb-core-1.1.0.pre spec10/public/webrat/test_app/gems/gems/rspec-1.1.11/lib/spec/mocks/argument_expectation.rb
mack-0.8.2 lib/gems/rspec-1.1.11/lib/spec/mocks/argument_expectation.rb
mack-0.8.3 lib/gems/rspec-1.1.12/lib/spec/mocks/argument_expectation.rb
mack-0.8.3.1 lib/gems/rspec-1.1.12/lib/spec/mocks/argument_expectation.rb
rspec-1.1.10 lib/spec/mocks/argument_expectation.rb
rspec-1.1.11 lib/spec/mocks/argument_expectation.rb