mocha 1.6.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (229) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +58 -0
  3. data/.rubocop_todo.yml +50 -0
  4. data/RELEASE.md +7 -0
  5. data/Rakefile +35 -28
  6. data/bin/build-matrix +17 -18
  7. data/lib/mocha/any_instance_method.rb +19 -25
  8. data/lib/mocha/api.rb +1 -5
  9. data/lib/mocha/argument_iterator.rb +4 -8
  10. data/lib/mocha/backtrace_filter.rb +1 -5
  11. data/lib/mocha/cardinality.rb +20 -27
  12. data/lib/mocha/central.rb +7 -15
  13. data/lib/mocha/change_state_side_effect.rb +0 -4
  14. data/lib/mocha/class_method.rb +31 -37
  15. data/lib/mocha/class_methods.rb +5 -13
  16. data/lib/mocha/configuration.rb +3 -9
  17. data/lib/mocha/debug.rb +3 -2
  18. data/lib/mocha/deprecation.rb +4 -11
  19. data/lib/mocha/detection/mini_test.rb +0 -2
  20. data/lib/mocha/detection/test_unit.rb +4 -4
  21. data/lib/mocha/error_with_filtered_backtrace.rb +0 -4
  22. data/lib/mocha/exception_raiser.rb +2 -5
  23. data/lib/mocha/expectation.rb +15 -18
  24. data/lib/mocha/expectation_error.rb +2 -0
  25. data/lib/mocha/expectation_error_factory.rb +0 -1
  26. data/lib/mocha/expectation_list.rb +2 -6
  27. data/lib/mocha/hooks.rb +0 -1
  28. data/lib/mocha/in_state_ordering_constraint.rb +0 -4
  29. data/lib/mocha/inspect.rb +3 -5
  30. data/lib/mocha/instance_method.rb +0 -2
  31. data/lib/mocha/integration.rb +3 -4
  32. data/lib/mocha/integration/mini_test/adapter.rb +2 -4
  33. data/lib/mocha/integration/mini_test/exception_translation.rb +1 -1
  34. data/lib/mocha/integration/mini_test/nothing.rb +4 -4
  35. data/lib/mocha/integration/mini_test/version_13.rb +3 -1
  36. data/lib/mocha/integration/mini_test/version_140.rb +3 -1
  37. data/lib/mocha/integration/mini_test/version_141.rb +3 -1
  38. data/lib/mocha/integration/mini_test/version_142_to_172.rb +3 -1
  39. data/lib/mocha/integration/mini_test/version_200.rb +3 -1
  40. data/lib/mocha/integration/mini_test/version_201_to_222.rb +3 -1
  41. data/lib/mocha/integration/mini_test/version_2110_to_2111.rb +3 -1
  42. data/lib/mocha/integration/mini_test/version_2112_to_320.rb +3 -1
  43. data/lib/mocha/integration/mini_test/version_230_to_2101.rb +3 -1
  44. data/lib/mocha/integration/monkey_patcher.rb +5 -7
  45. data/lib/mocha/integration/test_unit/adapter.rb +5 -6
  46. data/lib/mocha/integration/test_unit/gem_version_200.rb +4 -2
  47. data/lib/mocha/integration/test_unit/gem_version_201_to_202.rb +4 -2
  48. data/lib/mocha/integration/test_unit/gem_version_203_to_220.rb +4 -2
  49. data/lib/mocha/integration/test_unit/gem_version_230_to_250.rb +4 -2
  50. data/lib/mocha/integration/test_unit/nothing.rb +4 -4
  51. data/lib/mocha/integration/test_unit/ruby_version_185_and_below.rb +3 -1
  52. data/lib/mocha/integration/test_unit/ruby_version_186_and_above.rb +3 -1
  53. data/lib/mocha/is_a.rb +0 -2
  54. data/lib/mocha/logger.rb +0 -4
  55. data/lib/mocha/method_matcher.rb +1 -5
  56. data/lib/mocha/minitest.rb +1 -1
  57. data/lib/mocha/mock.rb +25 -30
  58. data/lib/mocha/mockery.rb +27 -43
  59. data/lib/mocha/module_method.rb +0 -2
  60. data/lib/mocha/module_methods.rb +0 -4
  61. data/lib/mocha/multiple_yields.rb +0 -5
  62. data/lib/mocha/names.rb +1 -11
  63. data/lib/mocha/no_yields.rb +1 -7
  64. data/lib/mocha/not_initialized_error.rb +0 -2
  65. data/lib/mocha/object_methods.rb +10 -14
  66. data/lib/mocha/parameter_matchers.rb +0 -2
  67. data/lib/mocha/parameter_matchers/all_of.rb +1 -7
  68. data/lib/mocha/parameter_matchers/any_of.rb +1 -7
  69. data/lib/mocha/parameter_matchers/any_parameters.rb +3 -9
  70. data/lib/mocha/parameter_matchers/anything.rb +2 -8
  71. data/lib/mocha/parameter_matchers/base.rb +6 -12
  72. data/lib/mocha/parameter_matchers/equals.rb +0 -6
  73. data/lib/mocha/parameter_matchers/equivalent_uri.rb +6 -6
  74. data/lib/mocha/parameter_matchers/has_entries.rb +2 -6
  75. data/lib/mocha/parameter_matchers/has_entry.rb +8 -11
  76. data/lib/mocha/parameter_matchers/has_key.rb +2 -6
  77. data/lib/mocha/parameter_matchers/has_value.rb +2 -6
  78. data/lib/mocha/parameter_matchers/includes.rb +2 -6
  79. data/lib/mocha/parameter_matchers/instance_of.rb +0 -6
  80. data/lib/mocha/parameter_matchers/is_a.rb +2 -6
  81. data/lib/mocha/parameter_matchers/kind_of.rb +2 -6
  82. data/lib/mocha/parameter_matchers/not.rb +2 -6
  83. data/lib/mocha/parameter_matchers/object.rb +0 -2
  84. data/lib/mocha/parameter_matchers/optionally.rb +4 -10
  85. data/lib/mocha/parameter_matchers/regexp_matches.rb +0 -6
  86. data/lib/mocha/parameter_matchers/responds_with.rb +3 -8
  87. data/lib/mocha/parameter_matchers/yaml_equivalent.rb +2 -6
  88. data/lib/mocha/parameters_matcher.rb +6 -9
  89. data/lib/mocha/pretty_parameters.rb +0 -4
  90. data/lib/mocha/receivers.rb +6 -12
  91. data/lib/mocha/return_values.rb +3 -7
  92. data/lib/mocha/sequence.rb +4 -9
  93. data/lib/mocha/single_return_value.rb +0 -4
  94. data/lib/mocha/single_yield.rb +0 -5
  95. data/lib/mocha/state_machine.rb +6 -10
  96. data/lib/mocha/stubbing_error.rb +0 -2
  97. data/lib/mocha/test_unit.rb +1 -1
  98. data/lib/mocha/thrower.rb +2 -5
  99. data/lib/mocha/unexpected_invocation.rb +3 -5
  100. data/lib/mocha/version.rb +1 -1
  101. data/lib/mocha/yield_parameters.rb +3 -7
  102. data/mocha.gemspec +34 -58
  103. data/test/acceptance/acceptance_test_helper.rb +0 -4
  104. data/test/acceptance/bug_18914_test.rb +7 -12
  105. data/test/acceptance/bug_21465_test.rb +0 -2
  106. data/test/acceptance/bug_21563_test.rb +0 -2
  107. data/test/acceptance/exception_rescue_test.rb +7 -8
  108. data/test/acceptance/expectations_on_multiple_methods_test.rb +2 -1
  109. data/test/acceptance/expected_invocation_count_test.rb +27 -29
  110. data/test/acceptance/failure_messages_test.rb +3 -5
  111. data/test/acceptance/issue_272_test.rb +0 -1
  112. data/test/acceptance/issue_65_test.rb +15 -13
  113. data/test/acceptance/issue_70_test.rb +0 -1
  114. data/test/acceptance/mocha_example_test.rb +5 -6
  115. data/test/acceptance/mocha_test_result_test.rb +7 -7
  116. data/test/acceptance/mock_test.rb +2 -4
  117. data/test/acceptance/mock_with_initializer_block_test.rb +0 -2
  118. data/test/acceptance/mocked_methods_dispatch_test.rb +0 -2
  119. data/test/acceptance/multiple_expectations_failure_message_test.rb +16 -17
  120. data/test/acceptance/optional_parameters_test.rb +0 -2
  121. data/test/acceptance/parameter_matcher_test.rb +2 -3
  122. data/test/acceptance/partial_mocks_test.rb +4 -6
  123. data/test/acceptance/prepend_test.rb +14 -16
  124. data/test/acceptance/prevent_use_of_mocha_outside_test_test.rb +0 -2
  125. data/test/acceptance/raise_exception_test.rb +2 -4
  126. data/test/acceptance/return_value_test.rb +0 -2
  127. data/test/acceptance/sequence_test.rb +9 -11
  128. data/test/acceptance/states_test.rb +6 -4
  129. data/test/acceptance/stub_any_instance_method_defined_on_superclass_test.rb +5 -4
  130. data/test/acceptance/stub_any_instance_method_test.rb +19 -17
  131. data/test/acceptance/stub_class_method_defined_on_active_record_association_proxy_test.rb +8 -8
  132. data/test/acceptance/stub_class_method_defined_on_class_test.rb +2 -1
  133. data/test/acceptance/stub_class_method_defined_on_module_test.rb +0 -1
  134. data/test/acceptance/stub_class_method_defined_on_superclass_test.rb +7 -4
  135. data/test/acceptance/stub_everything_test.rb +1 -3
  136. data/test/acceptance/stub_instance_method_defined_on_active_record_association_proxy_test.rb +6 -7
  137. data/test/acceptance/stub_instance_method_defined_on_class_and_aliased_test.rb +0 -1
  138. data/test/acceptance/stub_instance_method_defined_on_class_test.rb +0 -1
  139. data/test/acceptance/stub_instance_method_defined_on_kernel_module_test.rb +0 -1
  140. data/test/acceptance/stub_instance_method_defined_on_module_test.rb +0 -1
  141. data/test/acceptance/stub_instance_method_defined_on_object_class_test.rb +2 -1
  142. data/test/acceptance/stub_instance_method_defined_on_singleton_class_test.rb +0 -2
  143. data/test/acceptance/stub_instance_method_defined_on_superclass_test.rb +0 -1
  144. data/test/acceptance/stub_module_method_test.rb +13 -13
  145. data/test/acceptance/stub_test.rb +1 -3
  146. data/test/acceptance/stubba_example_test.rb +6 -14
  147. data/test/acceptance/stubba_test_result_test.rb +5 -8
  148. data/test/acceptance/stubbing_error_backtrace_test.rb +2 -2
  149. data/test/acceptance/stubbing_frozen_object_test.rb +2 -1
  150. data/test/acceptance/stubbing_method_accepting_block_parameter_test.rb +12 -7
  151. data/test/acceptance/stubbing_method_unnecessarily_test.rb +0 -2
  152. data/test/acceptance/stubbing_nil_test.rb +4 -5
  153. data/test/acceptance/stubbing_non_existent_any_instance_method_test.rb +1 -3
  154. data/test/acceptance/stubbing_non_existent_class_method_test.rb +3 -3
  155. data/test/acceptance/stubbing_non_existent_instance_method_test.rb +1 -3
  156. data/test/acceptance/stubbing_non_public_any_instance_method_test.rb +0 -2
  157. data/test/acceptance/stubbing_non_public_class_method_test.rb +3 -3
  158. data/test/acceptance/stubbing_non_public_instance_method_test.rb +1 -3
  159. data/test/acceptance/stubbing_on_non_mock_object_test.rb +4 -10
  160. data/test/acceptance/stubbing_same_class_method_on_parent_and_child_classes_test.rb +3 -4
  161. data/test/acceptance/throw_test.rb +0 -2
  162. data/test/acceptance/unexpected_invocation_test.rb +2 -3
  163. data/test/acceptance/unstubbing_test.rb +41 -14
  164. data/test/deprecation_disabler.rb +0 -1
  165. data/test/execution_point.rb +2 -4
  166. data/test/integration/mini_test_test.rb +2 -2
  167. data/test/integration/shared_tests.rb +24 -22
  168. data/test/integration/test_unit_test.rb +2 -2
  169. data/test/method_definer.rb +1 -3
  170. data/test/mini_test_result.rb +17 -11
  171. data/test/minitest_result.rb +0 -1
  172. data/test/simple_counter.rb +0 -2
  173. data/test/test_helper.rb +13 -5
  174. data/test/test_runner.rb +2 -4
  175. data/test/test_unit_result.rb +4 -2
  176. data/test/unit/any_instance_method_test.rb +31 -17
  177. data/test/unit/array_inspect_test.rb +2 -4
  178. data/test/unit/backtrace_filter_test.rb +3 -5
  179. data/test/unit/cardinality_test.rb +0 -2
  180. data/test/unit/central_test.rb +26 -27
  181. data/test/unit/change_state_side_effect_test.rb +0 -4
  182. data/test/unit/class_method_test.rb +59 -34
  183. data/test/unit/class_methods_test.rb +9 -11
  184. data/test/unit/configuration_test.rb +1 -2
  185. data/test/unit/date_time_inspect_test.rb +1 -3
  186. data/test/unit/exception_raiser_test.rb +0 -2
  187. data/test/unit/expectation_list_test.rb +0 -2
  188. data/test/unit/expectation_test.rb +41 -46
  189. data/test/unit/hash_inspect_test.rb +3 -5
  190. data/test/unit/hooks_test.rb +9 -4
  191. data/test/unit/in_state_ordering_constraint_test.rb +0 -4
  192. data/test/unit/method_matcher_test.rb +1 -3
  193. data/test/unit/mock_test.rb +35 -22
  194. data/test/unit/mockery_test.rb +28 -26
  195. data/test/unit/module_methods_test.rb +0 -2
  196. data/test/unit/multiple_yields_test.rb +0 -2
  197. data/test/unit/no_yields_test.rb +0 -2
  198. data/test/unit/object_inspect_test.rb +16 -7
  199. data/test/unit/object_methods_test.rb +6 -8
  200. data/test/unit/parameter_matchers/all_of_test.rb +0 -2
  201. data/test/unit/parameter_matchers/any_of_test.rb +0 -2
  202. data/test/unit/parameter_matchers/anything_test.rb +2 -4
  203. data/test/unit/parameter_matchers/equals_test.rb +1 -3
  204. data/test/unit/parameter_matchers/equivalent_uri_test.rb +0 -1
  205. data/test/unit/parameter_matchers/has_entries_test.rb +2 -2
  206. data/test/unit/parameter_matchers/has_entry_test.rb +13 -14
  207. data/test/unit/parameter_matchers/has_key_test.rb +0 -1
  208. data/test/unit/parameter_matchers/has_value_test.rb +0 -2
  209. data/test/unit/parameter_matchers/includes_test.rb +8 -9
  210. data/test/unit/parameter_matchers/instance_of_test.rb +1 -3
  211. data/test/unit/parameter_matchers/is_a_test.rb +1 -3
  212. data/test/unit/parameter_matchers/kind_of_test.rb +1 -3
  213. data/test/unit/parameter_matchers/not_test.rb +0 -2
  214. data/test/unit/parameter_matchers/regexp_matches_test.rb +1 -2
  215. data/test/unit/parameter_matchers/responds_with_test.rb +9 -3
  216. data/test/unit/parameter_matchers/stub_matcher.rb +0 -4
  217. data/test/unit/parameter_matchers/yaml_equivalent_test.rb +1 -3
  218. data/test/unit/parameters_matcher_test.rb +2 -4
  219. data/test/unit/receivers_test.rb +8 -6
  220. data/test/unit/return_values_test.rb +3 -5
  221. data/test/unit/sequence_test.rb +1 -5
  222. data/test/unit/single_return_value_test.rb +0 -2
  223. data/test/unit/single_yield_test.rb +0 -2
  224. data/test/unit/state_machine_test.rb +1 -3
  225. data/test/unit/string_inspect_test.rb +2 -4
  226. data/test/unit/thrower_test.rb +0 -2
  227. data/test/unit/yield_parameters_test.rb +0 -2
  228. data/yard-templates/default/layout/html/setup.rb +2 -3
  229. metadata +22 -6
@@ -1,21 +1,17 @@
1
1
  module Mocha
2
-
3
2
  class ArgumentIterator
4
-
5
3
  def initialize(argument)
6
4
  @argument = argument
7
5
  end
8
6
 
9
- def each(&block)
10
- if @argument.is_a?(Hash) then
7
+ def each
8
+ if @argument.is_a?(Hash)
11
9
  @argument.each do |method_name, return_value|
12
- block.call(method_name, return_value)
10
+ yield method_name, return_value
13
11
  end
14
12
  else
15
- block.call(@argument)
13
+ yield @argument
16
14
  end
17
15
  end
18
-
19
16
  end
20
-
21
17
  end
@@ -1,8 +1,6 @@
1
1
  module Mocha
2
-
3
2
  class BacktraceFilter
4
-
5
- LIB_DIRECTORY = File.expand_path(File.join(File.dirname(__FILE__), "..")) + File::SEPARATOR
3
+ LIB_DIRECTORY = File.expand_path(File.join(File.dirname(__FILE__), '..')) + File::SEPARATOR
6
4
 
7
5
  def initialize(lib_directory = LIB_DIRECTORY)
8
6
  @path_pattern = Regexp.new(lib_directory)
@@ -11,7 +9,5 @@ module Mocha
11
9
  def filtered(backtrace)
12
10
  backtrace.reject { |location| @path_pattern.match(File.expand_path(location)) }
13
11
  end
14
-
15
12
  end
16
-
17
13
  end
@@ -1,11 +1,8 @@
1
1
  module Mocha
2
-
3
2
  class Cardinality
4
-
5
3
  INFINITY = 1 / 0.0
6
4
 
7
5
  class << self
8
-
9
6
  def exactly(count)
10
7
  new(count, count)
11
8
  end
@@ -20,15 +17,15 @@ module Mocha
20
17
 
21
18
  def times(range_or_count)
22
19
  case range_or_count
23
- when Range then new(range_or_count.first, range_or_count.last)
24
- else new(range_or_count, range_or_count)
20
+ when Range then new(range_or_count.first, range_or_count.last)
21
+ else new(range_or_count, range_or_count)
25
22
  end
26
23
  end
27
-
28
24
  end
29
25
 
30
26
  def initialize(required, maximum)
31
- @required, @maximum = required, maximum
27
+ @required = required
28
+ @maximum = maximum
32
29
  end
33
30
 
34
31
  def invocations_allowed?(invocation_count)
@@ -48,28 +45,26 @@ module Mocha
48
45
  end
49
46
 
50
47
  def allowed_any_number_of_times?
51
- required == 0 && infinite?(maximum)
48
+ required.zero? && infinite?(maximum)
52
49
  end
53
50
 
54
51
  def used?(invocation_count)
55
- (invocation_count > 0) || (maximum == 0)
52
+ (invocation_count > 0) || maximum.zero?
56
53
  end
57
54
 
58
55
  def mocha_inspect
59
56
  if allowed_any_number_of_times?
60
- "allowed any number of times"
57
+ 'allowed any number of times'
58
+ elsif required.zero? && maximum.zero?
59
+ 'expected never'
60
+ elsif required == maximum
61
+ "expected exactly #{times(required)}"
62
+ elsif infinite?(maximum)
63
+ "expected at least #{times(required)}"
64
+ elsif required.zero?
65
+ "expected at most #{times(maximum)}"
61
66
  else
62
- if required == 0 && maximum == 0
63
- "expected never"
64
- elsif required == maximum
65
- "expected exactly #{times(required)}"
66
- elsif infinite?(maximum)
67
- "expected at least #{times(required)}"
68
- elsif required == 0
69
- "expected at most #{times(maximum)}"
70
- else
71
- "expected between #{required} and #{times(maximum)}"
72
- end
67
+ "expected between #{required} and #{times(maximum)}"
73
68
  end
74
69
  end
75
70
 
@@ -79,17 +74,15 @@ module Mocha
79
74
 
80
75
  def times(number)
81
76
  case number
82
- when 0 then "no times"
83
- when 1 then "once"
84
- when 2 then "twice"
85
- else "#{number} times"
77
+ when 0 then 'no times'
78
+ when 1 then 'once'
79
+ when 2 then 'twice'
80
+ else "#{number} times"
86
81
  end
87
82
  end
88
83
 
89
84
  def infinite?(number)
90
85
  number.respond_to?(:infinite?) && number.infinite?
91
86
  end
92
-
93
87
  end
94
-
95
88
  end
@@ -1,9 +1,6 @@
1
1
  module Mocha
2
-
3
2
  class Central
4
-
5
3
  class Null < self
6
-
7
4
  def initialize(&block)
8
5
  super
9
6
  @raise_not_initialized_error = block
@@ -16,7 +13,6 @@ module Mocha
16
13
  def unstub(*)
17
14
  @raise_not_initialized_error.call
18
15
  end
19
-
20
16
  end
21
17
 
22
18
  attr_accessor :stubba_methods
@@ -26,25 +22,21 @@ module Mocha
26
22
  end
27
23
 
28
24
  def stub(method)
29
- unless stubba_methods.detect { |m| m.matches?(method) }
30
- method.stub
31
- stubba_methods.push(method)
32
- end
25
+ return if stubba_methods.detect { |m| m.matches?(method) }
26
+ method.stub
27
+ stubba_methods.push(method)
33
28
  end
34
29
 
35
30
  def unstub(method)
36
- if existing = stubba_methods.detect { |m| m.matches?(method) }
37
- existing.unstub
38
- stubba_methods.delete(existing)
39
- end
31
+ return unless (existing = stubba_methods.detect { |m| m.matches?(method) })
32
+ existing.unstub
33
+ stubba_methods.delete(existing)
40
34
  end
41
35
 
42
36
  def unstub_all
43
- while stubba_methods.any? do
37
+ while stubba_methods.any?
44
38
  unstub(stubba_methods.first)
45
39
  end
46
40
  end
47
-
48
41
  end
49
-
50
42
  end
@@ -1,7 +1,5 @@
1
1
  module Mocha
2
-
3
2
  class ChangeStateSideEffect
4
-
5
3
  def initialize(state)
6
4
  @state = state
7
5
  end
@@ -13,7 +11,5 @@ module Mocha
13
11
  def mocha_inspect
14
12
  "then #{@state.mocha_inspect}"
15
13
  end
16
-
17
14
  end
18
-
19
15
  end
@@ -2,16 +2,15 @@ require 'mocha/ruby_version'
2
2
  require 'metaclass'
3
3
 
4
4
  module Mocha
5
-
6
5
  class ClassMethod
7
-
8
6
  PrependedModule = Class.new(Module)
9
7
 
10
8
  attr_reader :stubbee, :method
11
9
 
12
10
  def initialize(stubbee, method)
13
11
  @stubbee = stubbee
14
- @original_method, @original_visibility = nil, nil
12
+ @original_method = nil
13
+ @original_visibility = nil
15
14
  @method = PRE_RUBY_V19 ? method.to_s : method.to_sym
16
15
  end
17
16
 
@@ -24,9 +23,8 @@ module Mocha
24
23
  remove_new_method
25
24
  restore_original_method
26
25
  mock.unstub(method.to_sym)
27
- unless mock.any_expectations?
28
- reset_mocha
29
- end
26
+ return if mock.any_expectations?
27
+ reset_mocha
30
28
  end
31
29
 
32
30
  def mock
@@ -38,21 +36,22 @@ module Mocha
38
36
  end
39
37
 
40
38
  def hide_original_method
41
- if @original_visibility = method_visibility(method)
42
- begin
43
- if RUBY_V2_PLUS
44
- @definition_target = PrependedModule.new
45
- stubbee.__metaclass__.__send__ :prepend, @definition_target
46
- else
47
- @original_method = stubbee._method(method)
48
- if @original_method && @original_method.owner == stubbee.__metaclass__
49
- stubbee.__metaclass__.send(:remove_method, method)
50
- end
39
+ return unless (@original_visibility = method_visibility(method))
40
+ begin
41
+ if RUBY_V2_PLUS
42
+ @definition_target = PrependedModule.new
43
+ stubbee.__metaclass__.__send__ :prepend, @definition_target
44
+ else
45
+ @original_method = stubbee._method(method)
46
+ if @original_method && @original_method.owner == stubbee.__metaclass__
47
+ stubbee.__metaclass__.send(:remove_method, method)
51
48
  end
52
- rescue NameError
53
- # deal with nasties like ActiveRecord::Associations::AssociationProxy
54
49
  end
50
+ # rubocop:disable Lint/HandleExceptions
51
+ rescue NameError
52
+ # deal with nasties like ActiveRecord::Associations::AssociationProxy
55
53
  end
54
+ # rubocop:enable Lint/HandleExceptions
56
55
  end
57
56
 
58
57
  def define_new_method
@@ -61,9 +60,8 @@ module Mocha
61
60
  mocha.method_missing(:#{method}, *args, &block)
62
61
  end
63
62
  CODE
64
- if @original_visibility
65
- Module.instance_method(@original_visibility).bind(definition_target).call(method)
66
- end
63
+ return unless @original_visibility
64
+ Module.instance_method(@original_visibility).bind(definition_target).call(method)
67
65
  end
68
66
 
69
67
  def remove_new_method
@@ -71,26 +69,24 @@ module Mocha
71
69
  end
72
70
 
73
71
  def restore_original_method
74
- unless RUBY_V2_PLUS
75
- if @original_method && @original_method.owner == stubbee.__metaclass__
76
- if PRE_RUBY_V19
77
- original_method = @original_method
78
- stubbee.__metaclass__.send(:define_method, method) do |*args, &block|
79
- original_method.call(*args, &block)
80
- end
81
- else
82
- stubbee.__metaclass__.send(:define_method, method, @original_method)
72
+ return if RUBY_V2_PLUS
73
+ if @original_method && @original_method.owner == stubbee.__metaclass__
74
+ if PRE_RUBY_V19
75
+ original_method = @original_method
76
+ stubbee.__metaclass__.send(:define_method, method) do |*args, &block|
77
+ original_method.call(*args, &block)
83
78
  end
84
- end
85
- if @original_visibility
86
- Module.instance_method(@original_visibility).bind(stubbee.__metaclass__).call(method)
79
+ else
80
+ stubbee.__metaclass__.send(:define_method, method, @original_method)
87
81
  end
88
82
  end
83
+ return unless @original_visibility
84
+ Module.instance_method(@original_visibility).bind(stubbee.__metaclass__).call(method)
89
85
  end
90
86
 
91
87
  def matches?(other)
92
- return false unless (other.class == self.class)
93
- (stubbee.object_id == other.stubbee.object_id) and (method == other.method)
88
+ return false unless other.class == self.class
89
+ (stubbee.object_id == other.stubbee.object_id) && (method == other.method)
94
90
  end
95
91
 
96
92
  alias_method :==, :eql?
@@ -113,7 +109,5 @@ module Mocha
113
109
  def definition_target
114
110
  @definition_target ||= stubbee.__metaclass__
115
111
  end
116
-
117
112
  end
118
-
119
113
  end
@@ -3,10 +3,8 @@ require 'mocha/class_method'
3
3
  require 'mocha/any_instance_method'
4
4
 
5
5
  module Mocha
6
-
7
6
  # Methods added to all classes to allow mocking and stubbing on real (i.e. non-mock) objects.
8
7
  module ClassMethods
9
-
10
8
  # @private
11
9
  def stubba_method
12
10
  Mocha::ClassMethod
@@ -14,7 +12,6 @@ module Mocha
14
12
 
15
13
  # @private
16
14
  class AnyInstance
17
-
18
15
  def initialize(klass)
19
16
  @stubba_object = klass
20
17
  end
@@ -31,20 +28,17 @@ module Mocha
31
28
  Mocha::AnyInstanceMethod
32
29
  end
33
30
 
34
- def stubba_object
35
- @stubba_object
36
- end
31
+ attr_reader :stubba_object
37
32
 
38
33
  def method_exists?(method, include_public_methods = true)
39
34
  if include_public_methods
40
- return true if @stubba_object.public_instance_methods(include_superclass_methods = true).include?(method)
35
+ return true if @stubba_object.public_instance_methods(true).include?(method)
41
36
  return true if @stubba_object.allocate.respond_to?(method.to_sym)
42
37
  end
43
- return true if @stubba_object.protected_instance_methods(include_superclass_methods = true).include?(method)
44
- return true if @stubba_object.private_instance_methods(include_superclass_methods = true).include?(method)
45
- return false
38
+ return true if @stubba_object.protected_instance_methods(true).include?(method)
39
+ return true if @stubba_object.private_instance_methods(true).include?(method)
40
+ false
46
41
  end
47
-
48
42
  end
49
43
 
50
44
  # @return [Mock] a mock object which will detect calls to any instance of this class.
@@ -62,7 +56,5 @@ module Mocha
62
56
  end
63
57
  @any_instance ||= AnyInstance.new(self)
64
58
  end
65
-
66
59
  end
67
-
68
60
  end
@@ -1,5 +1,4 @@
1
1
  module Mocha
2
-
3
2
  # This class allows you to determine what should happen under certain circumstances. In each scenario, Mocha can be configured to {.allow do nothing}, {.warn_when display a warning message}, or {.prevent raise an exception}. The relevant scenario is identified using one of the following symbols:
4
3
  #
5
4
  # * +:stubbing_method_unnecessarily+ This is useful for identifying unused stubs. Unused stubs are often accidentally introduced when code is {http://martinfowler.com/bliki/DefinitionOfRefactoring.html refactored}. Allowed by default.
@@ -67,17 +66,15 @@ module Mocha
67
66
  # # => no exception raised
68
67
  # end
69
68
  class Configuration
70
-
71
69
  DEFAULTS = {
72
70
  :stubbing_method_unnecessarily => :allow,
73
71
  :stubbing_method_on_non_mock_object => :allow,
74
72
  :stubbing_non_existent_method => :allow,
75
73
  :stubbing_non_public_method => :allow,
76
- :stubbing_method_on_nil => :prevent,
77
- }
74
+ :stubbing_method_on_nil => :prevent
75
+ }.freeze
78
76
 
79
77
  class << self
80
-
81
78
  # Allow the specified +action+.
82
79
  #
83
80
  # @param [Symbol] action one of +:stubbing_method_unnecessarily+, +:stubbing_method_on_non_mock_object+, +:stubbing_non_existent_method+, +:stubbing_non_public_method+, +:stubbing_method_on_nil+.
@@ -139,16 +136,13 @@ module Mocha
139
136
  end
140
137
 
141
138
  # @private
142
- def temporarily_change_config(action, new_value, &block)
139
+ def temporarily_change_config(action, new_value)
143
140
  original_value = configuration[action]
144
141
  configuration[action] = new_value
145
142
  yield
146
143
  ensure
147
144
  configuration[action] = original_value
148
145
  end
149
-
150
146
  end
151
-
152
147
  end
153
-
154
148
  end
@@ -1,11 +1,12 @@
1
1
  module Mocha
2
2
  module Debug
3
3
  OPTIONS = (ENV['MOCHA_OPTIONS'] || '').split(',').inject({}) do |hash, key|
4
- hash[key] = true; hash
4
+ hash[key] = true
5
+ hash
5
6
  end.freeze
6
7
 
7
8
  def self.puts(message)
8
- $stderr.puts(message) if OPTIONS['debug']
9
+ warn(message) if OPTIONS['debug']
9
10
  end
10
11
  end
11
12
  end
@@ -1,27 +1,20 @@
1
1
  require 'mocha/backtrace_filter'
2
2
 
3
3
  module Mocha
4
-
5
4
  class Deprecation
6
-
7
5
  class << self
8
-
9
6
  attr_accessor :mode, :messages
10
7
 
11
8
  def warning(message)
12
9
  @messages << message
13
- unless mode == :disabled
14
- filter = BacktraceFilter.new
15
- location = filter.filtered(caller)[0]
16
- $stderr.puts "Mocha deprecation warning at #{location}: #{message}"
17
- end
10
+ return if mode == :disabled
11
+ filter = BacktraceFilter.new
12
+ location = filter.filtered(caller)[0]
13
+ warn "Mocha deprecation warning at #{location}: #{message}"
18
14
  end
19
-
20
15
  end
21
16
 
22
17
  self.mode = :enabled
23
18
  self.messages = []
24
-
25
19
  end
26
-
27
20
  end