Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module Spec
- module Matchers
- def self.create(name, &block)
- @guid ||= 0
- mod = Module.new do
- klass = Class.new(MatcherDSL) do
- def initialize(expected_value)
- @expected_value = expected_value
- end
- end
- klass.class_eval(&block)
- define_method(name) do |*expected_value|
- # Avoid a warning for the form should foo.
- klass.new(expected_value && expected_value[0])
- end
- end
- Merb::Test::ExampleGroup.send(:include, mod)
- end
- class MatcherDSL
- include Merb::Test::RouteHelper
- def self.matches(&block)
- define_method(:matches_proxy, &block)
- define_method(:matches?) do |object|
- @object = object
- if block.arity == 2
- matches_proxy(@object, @expected_value)
- else
- matches_proxy(@object)
- end
- end
- end
- def self.expected_value(&block)
- define_method(:transform_expected, &block)
- define_method(:initialize) do |expected_value|
- @expected_value = transform_expected(expected_value) || expected_value
- end
- end
- def self.negative_failure_message(&block)
- define_method(:proxy_negative_failure_message, &block)
- define_method(:negative_failure_message) do
- proxy_negative_failure_message(@object, @expected_value)
- end
- end
- def self.failure_message(&block)
- define_method(:proxy_failure_message, &block)
- define_method(:failure_message) do
- proxy_failure_message(@object, @expected_value)
- end
- end
- def self.message(&block)
- class_eval do
- def failure_message
- generic_message(@object, @expected_value, nil)
- end
- def negative_failure_message
- generic_message(@object, @expected_value, " not")
- end
- end
- define_method(:proxy_generic_message, &block)
- define_method(:generic_message) do |object, expected, not_string|
- proxy_generic_message(not_string, object, expected)
- end
- end
- end
- end
- end
Add Comment
Please, Sign In to add comment