aquarium 0.4.4 → 0.5.1
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.
- data/CHANGES +31 -6
- data/README +4 -1
- data/RELEASE-PLAN +2 -0
- data/Rakefile +20 -30
- data/UPGRADE +14 -4
- data/lib/aquarium/aspects/advice.rb +25 -10
- data/lib/aquarium/aspects/aspect.rb +8 -7
- data/lib/aquarium/aspects/join_point.rb +15 -5
- data/lib/aquarium/aspects/pointcut.rb +4 -4
- data/lib/aquarium/extensions.rb +0 -1
- data/lib/aquarium/finders/method_finder.rb +3 -10
- data/lib/aquarium/finders/pointcut_finder.rb +15 -5
- data/lib/aquarium/finders/type_finder.rb +0 -1
- data/lib/aquarium/utils/array_utils.rb +0 -1
- data/lib/aquarium/utils/method_utils.rb +13 -2
- data/lib/aquarium/utils/options_utils.rb +1 -0
- data/lib/aquarium/utils/type_utils.rb +21 -5
- data/lib/aquarium/version.rb +2 -2
- data/spec/aquarium/aspects/advice_chain_node_spec.rb +0 -1
- data/spec/aquarium/aspects/advice_spec.rb +80 -45
- data/spec/aquarium/aspects/aspect_invocation_spec.rb +66 -31
- data/spec/aquarium/aspects/aspect_spec.rb +88 -91
- data/spec/aquarium/aspects/concurrent_aspects_spec.rb +1 -1
- data/spec/aquarium/aspects/concurrent_aspects_with_objects_and_types_spec.rb +3 -1
- data/spec/aquarium/aspects/join_point_spec.rb +0 -1
- data/spec/aquarium/aspects/pointcut_spec.rb +21 -18
- data/spec/aquarium/extensions/hash_spec.rb +211 -219
- data/spec/aquarium/extensions/set_spec.rb +1 -1
- data/spec/aquarium/extras/design_by_contract_spec.rb +1 -1
- data/spec/aquarium/finders/finder_result_spec.rb +4 -4
- data/spec/aquarium/finders/method_finder_spec.rb +6 -9
- data/spec/aquarium/finders/type_finder_spec.rb +2 -2
- data/spec/aquarium/finders/type_finder_with_descendents_and_ancestors_spec.rb +12 -10
- data/spec/aquarium/spec_example_types.rb +2 -2
- data/spec/aquarium/spec_helper.rb +1 -1
- data/spec/aquarium/utils/array_utils_spec.rb +32 -5
- data/spec/aquarium/utils/hash_utils_spec.rb +1 -0
- data/spec/aquarium/utils/method_utils_spec.rb +18 -0
- data/spec/aquarium/utils/options_utils_spec.rb +16 -20
- data/spec/aquarium/utils/type_utils_sample_classes.rb +10 -1
- data/spec/aquarium/utils/type_utils_spec.rb +9 -7
- metadata +29 -35
- data/lib/aquarium/extensions/symbol.rb +0 -22
- data/spec/aquarium/extensions/symbol_spec.rb +0 -37
@@ -28,7 +28,7 @@ describe Aquarium::Extras::DesignByContract, "postcondition" do
|
|
28
28
|
end
|
29
29
|
|
30
30
|
postcondition :method => :action, :message => "Must pass more than one argument and first argument must be non-empty." do |jp, obj, *args|
|
31
|
-
args.size > 0 && ! args[0].empty?
|
31
|
+
args.size > 0 && ! args[0].to_s.empty?
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
@@ -153,7 +153,7 @@ describe Aquarium::Finders::FinderResult, "#<<" do
|
|
153
153
|
end
|
154
154
|
end
|
155
155
|
|
156
|
-
|
156
|
+
shared_examples_for "union of finder results" do
|
157
157
|
it "should return a FinderResult equal to the second, non-empty FinderResult if the first FinderResult is empty." do
|
158
158
|
result1 = Aquarium::Finders::FinderResult.new
|
159
159
|
result2 = Aquarium::Finders::FinderResult.new :b => [:b1, :b2]
|
@@ -221,7 +221,7 @@ describe Aquarium::Finders::FinderResult, "#|" do
|
|
221
221
|
end
|
222
222
|
end
|
223
223
|
|
224
|
-
|
224
|
+
shared_examples_for "intersection of finder results" do
|
225
225
|
it "should return an empty FinderResult if self is empty." do
|
226
226
|
result1 = Aquarium::Finders::FinderResult.new
|
227
227
|
result2 = Aquarium::Finders::FinderResult.new :b => [:b1, :b2]
|
@@ -298,7 +298,7 @@ describe Aquarium::Finders::FinderResult, "#&" do
|
|
298
298
|
end
|
299
299
|
|
300
300
|
|
301
|
-
|
301
|
+
shared_examples_for "subtraction of finder results" do
|
302
302
|
it "should return an empty FinderResult if self is substracted from itself." do
|
303
303
|
result = Aquarium::Finders::FinderResult.new :b => [:b1, :b2]
|
304
304
|
(result - result).should be_empty
|
@@ -377,7 +377,7 @@ describe Aquarium::Finders::FinderResult, "#.append_not_matched" do
|
|
377
377
|
end
|
378
378
|
end
|
379
379
|
|
380
|
-
|
380
|
+
shared_examples_for "equality" do
|
381
381
|
it "should return true for the same object." do
|
382
382
|
result = Aquarium::Finders::FinderResult.new
|
383
383
|
result.should be_eql(result)
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/../spec_helper'
|
2
2
|
require 'aquarium/spec_example_types'
|
3
3
|
require 'aquarium/finders/method_finder'
|
4
|
+
require 'stringio'
|
4
5
|
|
5
6
|
# :stopdoc:
|
6
7
|
class Base
|
@@ -115,12 +116,6 @@ describe Aquarium::Finders::MethodFinder, "#find (synonymous input parameters)"
|
|
115
116
|
actual.should == expected
|
116
117
|
end
|
117
118
|
end
|
118
|
-
|
119
|
-
it "should warn that :options as a synonym for :method_options is deprecated." do
|
120
|
-
expected = Aquarium::Finders::MethodFinder.new.find :types => Derived, :methods => [/^mder/, /^mmod/], :options => [:exclude_ancestor_methods], :logger_stream => @logger_stream
|
121
|
-
@logger_stream.to_s.grep(/WARN.*deprecated/).should_not be_nil
|
122
|
-
end
|
123
|
-
|
124
119
|
end
|
125
120
|
|
126
121
|
describe Aquarium::Finders::MethodFinder, "#find (invalid input parameters)" do
|
@@ -332,15 +327,17 @@ describe Aquarium::Finders::MethodFinder, "#find (searching for class methods)"
|
|
332
327
|
end
|
333
328
|
|
334
329
|
it "should find all class methods specified by regular expression for types when :class is used." do
|
335
|
-
# NOTE: The list of methods defined by Kernel is different for
|
330
|
+
# NOTE: The list of methods defined by Kernel is different for Ruby 1.8 and 1.9.
|
336
331
|
expected = {}
|
337
332
|
expected[Kernel] = [:respond_to?]
|
338
|
-
|
333
|
+
if RUBY_VERSION.index("1.8")
|
334
|
+
expected[Kernel] += [:chomp!, :chop!]
|
335
|
+
end
|
339
336
|
[Object, Module, Class].each do |clazz|
|
340
337
|
expected[clazz] = [:respond_to?]
|
341
338
|
end
|
342
339
|
class_array = [Kernel, Module, Object, Class]
|
343
|
-
actual = Aquarium::Finders::MethodFinder.new.find :types => class_array, :methods => [/^resp
|
340
|
+
actual = Aquarium::Finders::MethodFinder.new.find :types => class_array, :methods => [/^resp.*to\?$/, /^ch.*\!$/], :method_options => :class
|
344
341
|
class_array.each do |c|
|
345
342
|
actual.matched[c].should == Set.new(expected[c])
|
346
343
|
end
|
@@ -97,7 +97,7 @@ describe Aquarium::Finders::TypeFinder, "#find with :types used to specify one o
|
|
97
97
|
expected_unfound_exps = %w[TestCase Unknown1 Unknown2]
|
98
98
|
actual = Aquarium::Finders::TypeFinder.new.find :types=> %w[Kernel Module Object Class TestCase Unknown1 Unknown2]
|
99
99
|
actual.matched_keys.sort.should == expected_found_types.sort
|
100
|
-
actual.not_matched_keys.should == expected_unfound_exps
|
100
|
+
actual.not_matched_keys.sort.should == expected_unfound_exps.sort
|
101
101
|
end
|
102
102
|
|
103
103
|
it "should find types with :: namespace delimiters using their names." do
|
@@ -254,4 +254,4 @@ describe Aquarium::Finders::TypeFinder, "#get_type_from_parent should" do
|
|
254
254
|
end
|
255
255
|
end
|
256
256
|
|
257
|
-
|
257
|
+
|
@@ -3,7 +3,7 @@ require 'aquarium/utils/type_utils_sample_classes'
|
|
3
3
|
require 'aquarium/finders/type_finder'
|
4
4
|
|
5
5
|
include Aquarium::Utils
|
6
|
-
|
6
|
+
|
7
7
|
def purge_actuals actuals
|
8
8
|
# Remove extra stuff inserted by RSpec, Aquarium, and "pretty printer" (rake?), possibly in other specs!
|
9
9
|
actuals.matched_keys.reject do |t2|
|
@@ -14,7 +14,7 @@ def purge_actuals actuals
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
describe
|
17
|
+
describe Aquarium::Finders::TypeFinder, "#find types and their descendents, using :types_and_descendents" do
|
18
18
|
it "should find the matching types and their descendent subtypes, even in different nested modules." do
|
19
19
|
TypeUtils.sample_types.each do |t|
|
20
20
|
actual = Aquarium::Finders::TypeFinder.new.find :types_and_descendents => (t.name)
|
@@ -31,7 +31,7 @@ describe TypeUtils, "#find types and their descendents, using :types_and_descend
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
-
describe
|
34
|
+
describe Aquarium::Finders::TypeFinder, "#find types subtracting out excluded types and descendents, using :exclude_types_and_descendents" do
|
35
35
|
it "should find the matching types and their descendent subtypes, minus the excluded type hierarchies." do
|
36
36
|
actual = Aquarium::Finders::TypeFinder.new.find :types_and_descendents => ModuleForDescendents, :exclude_types_and_descendents => D1ForDescendents
|
37
37
|
actual_keys = purge_actuals actual
|
@@ -50,7 +50,7 @@ describe TypeUtils, "#find types subtracting out excluded types and descendents,
|
|
50
50
|
end
|
51
51
|
|
52
52
|
|
53
|
-
describe
|
53
|
+
describe Aquarium::Finders::TypeFinder, "#find types and their ancestors, using :types_and_ancestors" do
|
54
54
|
it "should find the matching types and their ancestors, even in different nested modules." do
|
55
55
|
TypeUtils.sample_types.each do |t|
|
56
56
|
actual = Aquarium::Finders::TypeFinder.new.find :types_and_ancestors => (t.name)
|
@@ -68,7 +68,7 @@ describe TypeUtils, "#find types and their ancestors, using :types_and_ancestors
|
|
68
68
|
end
|
69
69
|
|
70
70
|
|
71
|
-
describe
|
71
|
+
describe Aquarium::Finders::TypeFinder, "#find types subtracting out excluded types and ancestors, using :exclude_types_and_ancestors" do
|
72
72
|
it "should find the matching types and their ancestors, minus the excluded types and ancestors." do
|
73
73
|
actual = Aquarium::Finders::TypeFinder.new.find :types_and_ancestors => D1ForDescendents, :exclude_types_and_ancestors => ModuleForDescendents
|
74
74
|
actual_keys = purge_actuals actual
|
@@ -87,7 +87,7 @@ describe TypeUtils, "#find types subtracting out excluded types and ancestors, u
|
|
87
87
|
end
|
88
88
|
|
89
89
|
|
90
|
-
describe
|
90
|
+
describe Aquarium::Finders::TypeFinder, "#find types and their descendents and ancestors" do
|
91
91
|
it "should find the matching types and their descendents and ancestors, even in different nested modules." do
|
92
92
|
TypeUtils.sample_types.each do |t|
|
93
93
|
actual = Aquarium::Finders::TypeFinder.new.find :types_and_ancestors => (t.name), :types_and_descendents => (t.name)
|
@@ -99,7 +99,7 @@ describe TypeUtils, "#find types and their descendents and ancestors" do
|
|
99
99
|
end
|
100
100
|
end
|
101
101
|
|
102
|
-
describe
|
102
|
+
describe Aquarium::Finders::TypeFinder, "#find types subtracting out excluded types and their descendents and ancestors" do
|
103
103
|
it "should find the matching types and their descendents and ancestors, minus the excluded types and their descendents and ancestors." do
|
104
104
|
actual = Aquarium::Finders::TypeFinder.new.find \
|
105
105
|
:types_and_ancestors => Aquarium::ForDescendents::NestedD1ForDescendents,
|
@@ -113,12 +113,14 @@ describe TypeUtils, "#find types subtracting out excluded types and their descen
|
|
113
113
|
end
|
114
114
|
end
|
115
115
|
|
116
|
-
describe
|
116
|
+
describe Aquarium::Finders::TypeFinder, "#find types and their descendents and ancestors, specified with regular expressions" do
|
117
117
|
it "should find the matching types and their descendents and ancestors, even in different nested modules." do
|
118
118
|
regexs = [/ForDescendents$/, /Aquarium::ForDescendents::.*ForDescendents/]
|
119
119
|
actual = Aquarium::Finders::TypeFinder.new.find :types_and_ancestors => regexs, :types_and_descendents => regexs
|
120
120
|
actual_keys = purge_actuals actual
|
121
|
-
|
121
|
+
extras = RUBY_VERSION =~ /^1.8/ ? [Kernel, Object] : [Kernel, BasicObject, Object]
|
122
|
+
|
123
|
+
expected = TypeUtils.sample_types_descendents_and_ancestors.keys + extras
|
122
124
|
actual_keys.size.should == expected.size
|
123
125
|
expected.each do |t|
|
124
126
|
actual_keys.should include(t)
|
@@ -128,7 +130,7 @@ describe TypeUtils, "#find types and their descendents and ancestors, specified
|
|
128
130
|
end
|
129
131
|
end
|
130
132
|
|
131
|
-
describe
|
133
|
+
describe Aquarium::Finders::TypeFinder, "#find types and their descendents and ancestors, subtracting out excluded types and their descendents and ancestors, specified using regular expressions" do
|
132
134
|
it "should find the matching types and their descendents and ancestors, minus the excluded types and their descendents and ancestors." do
|
133
135
|
actual = Aquarium::Finders::TypeFinder.new.find :types_and_ancestors => /Aquarium::ForDescendents::.*D1ForDescendents/,
|
134
136
|
:types_and_descendents => /Aquarium::ForDescendents::.*D1ForDescendents/,
|
@@ -118,9 +118,8 @@ class Watchful
|
|
118
118
|
|
119
119
|
%w[public protected private].each do |protection|
|
120
120
|
class_eval(<<-EOF, __FILE__, __LINE__)
|
121
|
-
public
|
122
121
|
attr_accessor :#{protection}_watchful_method_args, :#{protection}_watchful_method_that_raises_args
|
123
|
-
|
122
|
+
public :#{protection}_watchful_method_args, :#{protection}_watchful_method_that_raises_args
|
124
123
|
def #{protection}_watchful_method *args
|
125
124
|
@#{protection}_watchful_method_args = args
|
126
125
|
yield *args if block_given?
|
@@ -130,6 +129,7 @@ class Watchful
|
|
130
129
|
yield *args if block_given?
|
131
130
|
raise WatchfulError.new #("#{protection}_watchful_method_that_raises")
|
132
131
|
end
|
132
|
+
#{protection} :#{protection}_watchful_method, :#{protection}_watchful_method_that_raises
|
133
133
|
EOF
|
134
134
|
end
|
135
135
|
|
@@ -3,6 +3,8 @@ require 'aquarium/utils/array_utils'
|
|
3
3
|
require 'set'
|
4
4
|
|
5
5
|
describe Aquarium::Utils::ArrayUtils, "#make_array" do
|
6
|
+
include Aquarium::Utils::ArrayUtils
|
7
|
+
|
6
8
|
it "should return an empty array if the input is nil." do
|
7
9
|
make_array(nil).should == []
|
8
10
|
end
|
@@ -25,7 +27,12 @@ describe Aquarium::Utils::ArrayUtils, "#make_array" do
|
|
25
27
|
end
|
26
28
|
|
27
29
|
it "should return an array with all nils removed from the input Set." do
|
28
|
-
make_array(Set.new([nil, 1, 2, nil, 3, 4]))
|
30
|
+
array = make_array(Set.new([nil, 1, 2, nil, 3, 4]))
|
31
|
+
array.should include(1)
|
32
|
+
array.should include(2)
|
33
|
+
array.should include(3)
|
34
|
+
array.should include(4)
|
35
|
+
array.should_not include(nil)
|
29
36
|
end
|
30
37
|
|
31
38
|
it "should return an 1-element array with an empty element if the input is empty." do
|
@@ -41,15 +48,25 @@ describe Aquarium::Utils::ArrayUtils, "#make_array" do
|
|
41
48
|
end
|
42
49
|
|
43
50
|
it "should return an input Set#to_a if it contains no nil elements." do
|
44
|
-
make_array(Set.new([1,2,"123"]))
|
51
|
+
array = make_array(Set.new([1,2,"123"]))
|
52
|
+
array.should include(1)
|
53
|
+
array.should include(2)
|
54
|
+
array.should include("123")
|
55
|
+
array.should_not include(nil)
|
45
56
|
end
|
46
57
|
|
47
58
|
it "should be available as a class method." do
|
48
|
-
Aquarium::Utils::ArrayUtils.make_array(Set.new([1,2,"123"]))
|
59
|
+
array = Aquarium::Utils::ArrayUtils.make_array(Set.new([1,2,"123"]))
|
60
|
+
array.should include(1)
|
61
|
+
array.should include(2)
|
62
|
+
array.should include("123")
|
63
|
+
array.should_not include(nil)
|
49
64
|
end
|
50
65
|
end
|
51
66
|
|
52
67
|
describe Aquarium::Utils::ArrayUtils, "#strip_array_nils" do
|
68
|
+
include Aquarium::Utils::ArrayUtils
|
69
|
+
|
53
70
|
it "should return an empty array if an input array contains all nils." do
|
54
71
|
strip_array_nils([nil, nil]).should == []
|
55
72
|
end
|
@@ -63,12 +80,22 @@ describe Aquarium::Utils::ArrayUtils, "#strip_array_nils" do
|
|
63
80
|
end
|
64
81
|
|
65
82
|
it "should return an array with all nils removed from the input Set." do
|
66
|
-
strip_array_nils(Set.new([nil, 1, 2, nil, 3, 4]))
|
83
|
+
array = strip_array_nils(Set.new([nil, 1, 2, nil, 3, 4]))
|
84
|
+
array.should include(1)
|
85
|
+
array.should include(2)
|
86
|
+
array.should include(3)
|
87
|
+
array.should include(4)
|
88
|
+
array.should_not include(nil)
|
67
89
|
end
|
68
90
|
end
|
69
91
|
|
70
92
|
describe Aquarium::Utils::ArrayUtils, ".strip_array_nils" do
|
71
93
|
it "should work like the instance method." do
|
72
|
-
Aquarium::Utils::ArrayUtils.strip_array_nils(Set.new([nil, 1, 2, nil, 3, 4]))
|
94
|
+
array = Aquarium::Utils::ArrayUtils.strip_array_nils(Set.new([nil, 1, 2, nil, 3, 4]))
|
95
|
+
array.should include(1)
|
96
|
+
array.should include(2)
|
97
|
+
array.should include(3)
|
98
|
+
array.should include(4)
|
99
|
+
array.should_not include(nil)
|
73
100
|
end
|
74
101
|
end
|
@@ -1,6 +1,24 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/../spec_helper'
|
2
2
|
require 'aquarium/utils/method_utils'
|
3
3
|
|
4
|
+
describe Aquarium::Utils::MethodUtils, ".to_name" do
|
5
|
+
it "should return a String for Ruby 1.8" do
|
6
|
+
name = Aquarium::Utils::MethodUtils.to_name "length"
|
7
|
+
if RUBY_VERSION =~ /^1.8/
|
8
|
+
name.class.should == String
|
9
|
+
end
|
10
|
+
String.public_instance_methods.include?(name)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should return a Symbol for Ruby 1.9" do
|
14
|
+
name = Aquarium::Utils::MethodUtils.to_name "length"
|
15
|
+
if RUBY_VERSION =~ /^1.9/
|
16
|
+
name.class.should == Symbol
|
17
|
+
end
|
18
|
+
String.public_instance_methods.include?(name)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
4
22
|
describe Aquarium::Utils::MethodUtils, ".method_args_to_hash" do
|
5
23
|
|
6
24
|
it "should return an empty hash for no arguments." do
|
@@ -1,6 +1,7 @@
|
|
1
1
|
|
2
2
|
require File.dirname(__FILE__) + '/../spec_helper'
|
3
3
|
require 'aquarium/utils'
|
4
|
+
require 'stringio'
|
4
5
|
|
5
6
|
include Aquarium::Utils
|
6
7
|
|
@@ -155,44 +156,39 @@ module Aquarium
|
|
155
156
|
end
|
156
157
|
end
|
157
158
|
|
159
|
+
def method_checks which_type, has_methods, has_not_methods = []
|
160
|
+
# Handle 1.8 vs. 1.9 difference; convert methods names uniformly to symbols
|
161
|
+
methods = which_type.instance_methods.map {|m| m.intern}
|
162
|
+
has_methods.each {|m| methods.should include(m)}
|
163
|
+
has_not_methods.each {|m| methods.should_not include(m)}
|
164
|
+
end
|
165
|
+
|
158
166
|
describe OptionsUtils, ".canonical_option_accessor" do
|
167
|
+
|
159
168
|
it "should create a reader and writer method for each option" do
|
160
|
-
Aquarium::OptionsUtilsExampleWithAccessors
|
161
|
-
Aquarium::OptionsUtilsExampleWithAccessors.instance_methods.should include("bars")
|
162
|
-
Aquarium::OptionsUtilsExampleWithAccessors.instance_methods.should include("foos=")
|
163
|
-
Aquarium::OptionsUtilsExampleWithAccessors.instance_methods.should include("bars=")
|
169
|
+
method_checks Aquarium::OptionsUtilsExampleWithAccessors, [:foos, :bars, :foos=, :bars=]
|
164
170
|
end
|
165
171
|
it "should accept individual options" do
|
166
|
-
Aquarium::OptionsUtilsExampleWithAccessors
|
167
|
-
Aquarium::OptionsUtilsExampleWithAccessors.instance_methods.should include("bars")
|
168
|
-
Aquarium::OptionsUtilsExampleWithAccessors.instance_methods.should include("foos=")
|
169
|
-
Aquarium::OptionsUtilsExampleWithAccessors.instance_methods.should include("bars=")
|
172
|
+
method_checks Aquarium::OptionsUtilsExampleWithAccessors, [:foos, :bars, :foos=, :bars=]
|
170
173
|
end
|
171
174
|
it "should accept the CANONICAL_OPTIONS as an argument" do
|
172
|
-
Aquarium::OptionsUtilsExampleWithCanonicalOptionsAccessors
|
173
|
-
Aquarium::OptionsUtilsExampleWithCanonicalOptionsAccessors.instance_methods.should include("bars")
|
174
|
-
Aquarium::OptionsUtilsExampleWithCanonicalOptionsAccessors.instance_methods.should include("foos=")
|
175
|
-
Aquarium::OptionsUtilsExampleWithCanonicalOptionsAccessors.instance_methods.should include("bars=")
|
175
|
+
method_checks Aquarium::OptionsUtilsExampleWithCanonicalOptionsAccessors, [:foos, :bars, :foos=, :bars=]
|
176
176
|
end
|
177
177
|
end
|
178
|
+
|
178
179
|
describe OptionsUtils, ".canonical_option_reader" do
|
179
180
|
it "creates a reader method for each option" do
|
180
|
-
Aquarium::OptionsUtilsExampleWithReaders
|
181
|
-
Aquarium::OptionsUtilsExampleWithReaders.instance_methods.should include("bars")
|
182
|
-
Aquarium::OptionsUtilsExampleWithReaders.instance_methods.should_not include("foos=")
|
183
|
-
Aquarium::OptionsUtilsExampleWithReaders.instance_methods.should_not include("bars=")
|
181
|
+
method_checks Aquarium::OptionsUtilsExampleWithReaders, [:foos, :bars], [:foos=, :bars=]
|
184
182
|
end
|
185
183
|
it "should create readers that return set values" do
|
186
184
|
object = Aquarium::OptionsUtilsExampleWithReaders.new
|
187
185
|
object.foos.class.should == Set
|
188
186
|
end
|
189
187
|
end
|
188
|
+
|
190
189
|
describe OptionsUtils, ".canonical_option_writer" do
|
191
190
|
it "creates a writer method for each option" do
|
192
|
-
Aquarium::OptionsUtilsExampleWithWriters
|
193
|
-
Aquarium::OptionsUtilsExampleWithWriters.instance_methods.should_not include("bars")
|
194
|
-
Aquarium::OptionsUtilsExampleWithWriters.instance_methods.should include("foos=")
|
195
|
-
Aquarium::OptionsUtilsExampleWithWriters.instance_methods.should include("bars=")
|
191
|
+
method_checks Aquarium::OptionsUtilsExampleWithWriters, [:foos=, :bars=], [:foos, :bars]
|
196
192
|
end
|
197
193
|
it "should create writers that convert the input values to sets, if they aren't already sets" do
|
198
194
|
object = Aquarium::OptionsUtilsExampleWithAccessors.new
|
@@ -115,7 +115,7 @@ module Aquarium
|
|
115
115
|
Aquarium::ForDescendents::Nested2ModuleForDescendents,
|
116
116
|
ModuleForDescendents]}
|
117
117
|
|
118
|
-
|
118
|
+
sample_classes_ancestors = {
|
119
119
|
BaseForDescendents => [
|
120
120
|
BaseForDescendents,
|
121
121
|
Object,
|
@@ -178,6 +178,15 @@ module Aquarium
|
|
178
178
|
BaseForDescendents,
|
179
179
|
Object,
|
180
180
|
Kernel]}
|
181
|
+
|
182
|
+
@@sample_classes_ancestors = if RUBY_VERSION =~ /^1.8/
|
183
|
+
sample_classes_ancestors
|
184
|
+
else
|
185
|
+
sample_classes_ancestors.inject({}) do |map, (k,v)|
|
186
|
+
map[k] = (v << BasicObject).sort {|a,b| a.name <=> b.name}
|
187
|
+
map
|
188
|
+
end
|
189
|
+
end
|
181
190
|
|
182
191
|
@@sample_types_ancestors = @@sample_classes_ancestors.merge @@sample_modules_ancestors
|
183
192
|
|
@@ -31,13 +31,15 @@ describe TypeUtils, ".descendents called with a class" do
|
|
31
31
|
end
|
32
32
|
|
33
33
|
it "should return just the class if it has no descendents" do
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
34
|
+
[D11ForDescendents,
|
35
|
+
D2ForDescendents,
|
36
|
+
Aquarium::ForDescendents::NestedD11ForDescendents,
|
37
|
+
Aquarium::ForDescendents::NestedD2ForDescendents,
|
38
|
+
Aquarium::ForDescendents::NestedD3ForDescendents,
|
39
|
+
Aquarium::ForDescendents::NestedD4ForDescendents,
|
40
|
+
Aquarium::ForDescendents::NestedD31ForDescendents].each do |t|
|
41
|
+
TypeUtils.descendents(t).should eql([t])
|
42
|
+
end
|
41
43
|
end
|
42
44
|
|
43
45
|
TypeUtils.sample_classes.each do |t|
|