rconditions 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +1 -0
- data/lib/rconditions.rb +12 -8
- data/test/rconditions_test.rb +37 -1
- metadata +38 -38
data/README
CHANGED
@@ -96,6 +96,7 @@ the require call. Our test setup had no measurable slowdown afterwards.
|
|
96
96
|
The test suite of RConditions passes for
|
97
97
|
* ruby 1.8.6
|
98
98
|
* ruby 1.9.0 (tested with revision 13680)
|
99
|
+
* jruby 1.1 (tested with revision 4574)
|
99
100
|
|
100
101
|
If you use another ruby version, please check whether the tests pass.
|
101
102
|
|
data/lib/rconditions.rb
CHANGED
@@ -31,7 +31,7 @@ module RConditions
|
|
31
31
|
def extend_predicate_methods_and_define_bang_methods
|
32
32
|
ObjectSpace.each_object(Module) do |mod|
|
33
33
|
(mod.instance_methods(false) + mod.private_instance_methods(false)).each do |id|
|
34
|
-
RConditions.extend_predicate_method_and_define_bang_method(mod, id)
|
34
|
+
::RConditions.extend_predicate_method_and_define_bang_method(mod, id)
|
35
35
|
end
|
36
36
|
end
|
37
37
|
end
|
@@ -61,7 +61,7 @@ module RConditions
|
|
61
61
|
mod.const_set(positive_module, Module.new) unless mod.const_defined?(positive_module)
|
62
62
|
negative_module = camelize("not_#{predicate_method_without_questionmark}_error")
|
63
63
|
mod.const_set(negative_module, Module.new) unless mod.const_defined?(negative_module)
|
64
|
-
|
64
|
+
|
65
65
|
time = Time.now
|
66
66
|
predicate_method_without_rconditions = "#{predicate_method_without_questionmark}_rconditions_#{mod.object_id}_#{time.to_i}_#{time.usec}"
|
67
67
|
|
@@ -73,6 +73,10 @@ module RConditions
|
|
73
73
|
result = #{predicate_method_without_rconditions}(*args, &block)
|
74
74
|
::RConditions.add_exception_module(result ? #{positive_module} : #{negative_module})
|
75
75
|
result
|
76
|
+
rescue NoMethodError => e
|
77
|
+
raise unless self.is_a?(Module) && e.message =~ /#{Regexp.escape(predicate_method_without_rconditions)}/
|
78
|
+
module_function :#{predicate_method_without_rconditions}
|
79
|
+
#{predicate_method_without_rconditions}(*args, &block)
|
76
80
|
end
|
77
81
|
#{visibility(mod, predicate_method)} :#{predicate_method}
|
78
82
|
EOS
|
@@ -111,16 +115,16 @@ module RConditions
|
|
111
115
|
end
|
112
116
|
end
|
113
117
|
|
114
|
-
unless defined? RCONDITIONS_ONLY_FOR_NEW_METHODS
|
118
|
+
unless defined? ::RCONDITIONS_ONLY_FOR_NEW_METHODS
|
115
119
|
# To apply RConditions to new methods only, set this constant to <tt>true</tt>
|
116
120
|
# before <tt>require "rconditions"</tt>.
|
117
|
-
RCONDITIONS_ONLY_FOR_NEW_METHODS = false
|
121
|
+
::RCONDITIONS_ONLY_FOR_NEW_METHODS = false
|
118
122
|
end
|
119
|
-
|
120
|
-
unless RCONDITIONS_ONLY_FOR_NEW_METHODS
|
121
|
-
RConditions.extend_predicate_methods_and_define_bang_methods
|
123
|
+
|
124
|
+
unless ::RCONDITIONS_ONLY_FOR_NEW_METHODS
|
125
|
+
::RConditions.extend_predicate_methods_and_define_bang_methods
|
122
126
|
end
|
123
|
-
|
127
|
+
|
124
128
|
class Module #:nodoc:
|
125
129
|
alias_method :method_added_without_rconditions, :method_added
|
126
130
|
private :method_added_without_rconditions
|
data/test/rconditions_test.rb
CHANGED
@@ -239,7 +239,7 @@ class RConditionsTest < Test::Unit::TestCase
|
|
239
239
|
assert e.kind_of?(NowANamedModule::NotActivatedError)
|
240
240
|
end
|
241
241
|
|
242
|
-
def
|
242
|
+
def test_does_not_work_for_singleton_methods
|
243
243
|
f = Foo.new
|
244
244
|
class << f
|
245
245
|
def x?; b?; end
|
@@ -247,6 +247,42 @@ class RConditionsTest < Test::Unit::TestCase
|
|
247
247
|
assert !f.respond_to?(:x!)
|
248
248
|
end
|
249
249
|
|
250
|
+
def test_does_not_break_module_functions
|
251
|
+
eval <<-EOS
|
252
|
+
module WithModuleFunctions
|
253
|
+
def module_function_1?
|
254
|
+
'module_function_1?'
|
255
|
+
end
|
256
|
+
module_function :module_function_1?
|
257
|
+
|
258
|
+
module_function
|
259
|
+
def module_function_2?
|
260
|
+
'module_function_2?'
|
261
|
+
end
|
262
|
+
end
|
263
|
+
EOS
|
264
|
+
assert !WithModuleFunctions.respond_to?(:module_function_1!)
|
265
|
+
assert !WithModuleFunctions.respond_to?(:module_function_2!)
|
266
|
+
assert_equal 'module_function_1?', WithModuleFunctions.module_function_1?
|
267
|
+
assert_equal 'module_function_2?', WithModuleFunctions.module_function_2?
|
268
|
+
end
|
269
|
+
|
270
|
+
def test_module_functions_fix_ignores_no_method_error_from_non_module_function
|
271
|
+
eval <<-EOS
|
272
|
+
module ModuleWithNoMethodError
|
273
|
+
def error?
|
274
|
+
foo()
|
275
|
+
end
|
276
|
+
module_function :error?
|
277
|
+
end
|
278
|
+
EOS
|
279
|
+
o = Object.new
|
280
|
+
class<<o;include ModuleWithNoMethodError;end
|
281
|
+
e = exception_raised_by { o.instance_eval { error? } }
|
282
|
+
assert_equal NoMethodError, e.class
|
283
|
+
assert e.message =~ /foo/
|
284
|
+
end
|
285
|
+
|
250
286
|
def test_exception_in_a_predicate_method_does_not_screw_up_the_next_result
|
251
287
|
eval <<-EOS
|
252
288
|
class Foo
|
metadata
CHANGED
@@ -1,41 +1,17 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.2
|
3
|
-
specification_version: 1
|
4
|
-
name: rconditions
|
5
|
-
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.2.0
|
7
|
-
date: 2007-10-14 00:00:00 +02:00
|
8
|
-
summary: RConditions generates a bang method (for example, Array#empty!) for each predicate method (for example, Array#empty?). The bang method will return true if the predicate method returns true, otherwise it will throw an exception. The exception will include auto-generated modules that give information on predicate methods passed or failed in the bang method's execution.
|
9
|
-
require_paths:
|
10
|
-
- lib
|
11
|
-
email: tammo@tammofreese.de
|
1
|
+
--- !ruby/object:Gem::Specification
|
12
2
|
homepage: http://rconditions.rubyforge.org
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: true
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">"
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.0
|
24
|
-
version:
|
25
|
-
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
3
|
+
extensions: []
|
4
|
+
executables: []
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 0.3.0
|
28
7
|
post_install_message:
|
29
|
-
|
30
|
-
- Norman Timmler
|
31
|
-
- Tammo Freese
|
8
|
+
date: 2007-11-28 23:00:00 +00:00
|
32
9
|
files:
|
33
10
|
- test/rconditions_test.rb
|
34
11
|
- lib/rconditions.rb
|
35
12
|
- README
|
36
13
|
- MIT-LICENSE
|
37
|
-
|
38
|
-
- test/rconditions_test.rb
|
14
|
+
rubygems_version: 0.9.4
|
39
15
|
rdoc_options:
|
40
16
|
- --title
|
41
17
|
- RConditions RDoc Documentation
|
@@ -43,14 +19,38 @@ rdoc_options:
|
|
43
19
|
- README
|
44
20
|
- --charset
|
45
21
|
- utf-8
|
22
|
+
signing_key:
|
23
|
+
cert_chain:
|
24
|
+
name: rconditions
|
25
|
+
has_rdoc: true
|
26
|
+
platform: ruby
|
27
|
+
summary: RConditions generates a bang method (for example, Array#empty!) for each
|
28
|
+
predicate method (for example, Array#empty?). The bang method will return true if
|
29
|
+
the predicate method returns true, otherwise it will throw an exception. The exception
|
30
|
+
will include auto-generated modules that give information on predicate methods passed
|
31
|
+
or failed in the bang method's execution.
|
32
|
+
default_executable:
|
33
|
+
bindir: bin
|
34
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
35
|
+
version:
|
36
|
+
requirements:
|
37
|
+
- - '>'
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 0.0.0
|
40
|
+
require_paths:
|
41
|
+
- lib
|
42
|
+
specification_version: 1
|
43
|
+
test_files:
|
44
|
+
- test/rconditions_test.rb
|
45
|
+
dependencies: []
|
46
|
+
description:
|
47
|
+
authors:
|
48
|
+
- Norman Timmler
|
49
|
+
- Tammo Freese
|
50
|
+
email: tammo@tammofreese.de
|
46
51
|
extra_rdoc_files:
|
47
52
|
- README
|
48
53
|
- MIT-LICENSE
|
49
|
-
executables: []
|
50
|
-
|
51
|
-
extensions: []
|
52
|
-
|
53
54
|
requirements: []
|
54
|
-
|
55
|
-
|
56
|
-
|
55
|
+
rubyforge_project:
|
56
|
+
autorequire: rconditions
|