Guest User

Untitled

a guest
Feb 20th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.29 KB | None | 0 0
  1. module Spec
  2. module Matchers
  3.  
  4. def self.create(name, &block)
  5. @guid ||= 0
  6. mod = Module.new do
  7. klass = Class.new(MatcherDSL) do
  8. def initialize(expected_value)
  9. @expected_value = expected_value
  10. end
  11. end
  12. klass.class_eval(&block)
  13.  
  14. define_method(name) do |*expected_value|
  15. # Avoid a warning for the form should foo.
  16. klass.new(expected_value && expected_value[0])
  17. end
  18. end
  19. Merb::Test::ExampleGroup.send(:include, mod)
  20. end
  21.  
  22. class MatcherDSL
  23. include Merb::Test::RouteHelper
  24.  
  25. def self.matches(&block)
  26. define_method(:matches_proxy, &block)
  27.  
  28. define_method(:matches?) do |object|
  29. @object = object
  30. if block.arity == 2
  31. matches_proxy(@object, @expected_value)
  32. else
  33. matches_proxy(@object)
  34. end
  35. end
  36. end
  37.  
  38. def self.expected_value(&block)
  39. define_method(:transform_expected, &block)
  40.  
  41. define_method(:initialize) do |expected_value|
  42. @expected_value = transform_expected(expected_value) || expected_value
  43. end
  44. end
  45.  
  46. def self.negative_failure_message(&block)
  47. define_method(:proxy_negative_failure_message, &block)
  48.  
  49. define_method(:negative_failure_message) do
  50. proxy_negative_failure_message(@object, @expected_value)
  51. end
  52. end
  53.  
  54. def self.failure_message(&block)
  55. define_method(:proxy_failure_message, &block)
  56.  
  57. define_method(:failure_message) do
  58. proxy_failure_message(@object, @expected_value)
  59. end
  60. end
  61.  
  62. def self.message(&block)
  63. class_eval do
  64. def failure_message
  65. generic_message(@object, @expected_value, nil)
  66. end
  67.  
  68. def negative_failure_message
  69. generic_message(@object, @expected_value, " not")
  70. end
  71. end
  72.  
  73. define_method(:proxy_generic_message, &block)
  74.  
  75. define_method(:generic_message) do |object, expected, not_string|
  76. proxy_generic_message(not_string, object, expected)
  77. end
  78. end
  79. end
  80.  
  81. end
  82. end
Add Comment
Please, Sign In to add comment