Base class for all the count validators.
# File lib/flexmock/validators.rb, line 23 def initialize(expectation, limit) @exp = expectation @limit = limit end
Human readable description of the validator
# File lib/flexmock/validators.rb, line 36 def describe case @limit when 0 ".never" when 1 ".once" when 2 ".twice" else ".times(#{@limit})" end end
# File lib/flexmock/validators.rb, line 49 def describe_limit @limit.to_s end
If the expectation has been called n
times, is it still
eligible to be called again? The default answer compares n to the
established limit.
# File lib/flexmock/validators.rb, line 31 def eligible?(n) n < @limit end
# File lib/flexmock/validators.rb, line 56 def validate_count(n, &block) unless yield raise ValidationFailed, construct_validation_count_error_message(n) end end
Pluralize “call”
# File lib/flexmock/validators.rb, line 73 def calls(n) n == 1 ? "call" : "calls" end
Build the error message for an invalid count
# File lib/flexmock/validators.rb, line 65 def construct_validation_count_error_message(n) "Method '#{@exp}' called incorrect number of times\n" + "#{describe_limit} matching #{calls(@limit)} expected\n" + "#{n} matching #{calls(n)} found\n" + describe_calls(@exp.mock) end