aquarium 0.4.1 → 0.4.2
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/Aquarium-IDEA.ipr +252 -0
- data/Aquarium-IDEA.iws +493 -0
- data/Aquarium.ipr +1 -1
- data/Aquarium.iws +133 -138
- data/CHANGES +63 -0
- data/ParseTreePlay.rb +25 -0
- data/README +55 -3
- data/RELEASE-PLAN +9 -1
- data/TODO.rb +175 -15
- data/examples/aspect_design_example.rb +13 -1
- data/examples/aspect_design_example_spec.rb +20 -2
- data/examples/introductions_example.rb +35 -0
- data/examples/introductions_example_spec.rb +37 -0
- data/examples/method_missing_example.rb +2 -1
- data/lib/aquarium/aspects/advice.rb +127 -74
- data/lib/aquarium/aspects/aspect.rb +139 -72
- data/lib/aquarium/aspects/default_objects_handler.rb +6 -4
- data/lib/aquarium/aspects/exclusion_handler.rb +15 -3
- data/lib/aquarium/aspects/join_point.rb +60 -55
- data/lib/aquarium/aspects/pointcut.rb +153 -124
- data/lib/aquarium/aspects/pointcut_composition.rb +1 -1
- data/lib/aquarium/dsl/aspect_dsl.rb +13 -5
- data/lib/aquarium/dsl/object_dsl.rb +4 -2
- data/lib/aquarium/extras/design_by_contract.rb +9 -5
- data/lib/aquarium/finders.rb +1 -0
- data/lib/aquarium/finders/finder_result.rb +13 -5
- data/lib/aquarium/finders/method_finder.rb +75 -70
- data/lib/aquarium/finders/pointcut_finder.rb +166 -0
- data/lib/aquarium/finders/type_finder.rb +104 -62
- data/lib/aquarium/utils/array_utils.rb +1 -1
- data/lib/aquarium/utils/invalid_options.rb +2 -0
- data/lib/aquarium/utils/name_utils.rb +3 -2
- data/lib/aquarium/utils/nil_object.rb +7 -3
- data/lib/aquarium/utils/options_utils.rb +38 -27
- data/lib/aquarium/utils/set_utils.rb +2 -2
- data/lib/aquarium/utils/type_utils.rb +11 -0
- data/lib/aquarium/version.rb +1 -1
- data/spec/aquarium/aspects/advice_spec.rb +147 -32
- data/spec/aquarium/aspects/aspect_invocation_spec.rb +252 -43
- data/spec/aquarium/aspects/aspect_spec.rb +148 -88
- data/spec/aquarium/aspects/aspect_with_nested_types_spec.rb +40 -34
- data/spec/aquarium/aspects/aspect_with_subtypes_spec.rb +39 -3
- data/spec/aquarium/aspects/join_point_spec.rb +190 -227
- data/spec/aquarium/aspects/pointcut_spec.rb +24 -1
- data/spec/aquarium/dsl/aspect_dsl_spec.rb +17 -17
- data/spec/aquarium/finders/method_finder_spec.rb +8 -2
- data/spec/aquarium/finders/pointcut_finder_spec.rb +193 -0
- data/spec/aquarium/finders/pointcut_finder_spec_test_classes.rb +90 -0
- data/spec/aquarium/finders/type_finder_spec.rb +17 -0
- data/spec/aquarium/finders/type_finder_with_descendents_and_ancestors_spec.rb +4 -4
- data/spec/aquarium/finders/type_finder_with_nested_types.rb +47 -0
- data/spec/aquarium/utils/nil_object_spec.rb +21 -0
- data/spec/aquarium/utils/type_utils_sample_nested_types.rb +51 -0
- data/spec/aquarium/utils/type_utils_spec.rb +18 -1
- metadata +13 -3
@@ -0,0 +1,47 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
require File.dirname(__FILE__) + '/../utils/type_utils_sample_classes'
|
3
|
+
require File.dirname(__FILE__) + '/../utils/type_utils_sample_nested_types'
|
4
|
+
require 'aquarium/finders/type_finder'
|
5
|
+
|
6
|
+
include Aquarium::Utils
|
7
|
+
|
8
|
+
def purge_actuals actuals
|
9
|
+
# Remove extra stuff inserted by RSpec, Aquarium, and "pretty printer" (rake?), possibly in other specs!
|
10
|
+
actuals.matched_keys.reject do |t2|
|
11
|
+
t2.name.include?("Spec::") or t2.name =~ /Aquarium::(Utils|Extras|Examples|Aspects|PointcutFinderTestClasses)/ or t2.name =~ /^PP/
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe TypeUtils, "#find types and their nested types, using :types_and_nested_types" do
|
16
|
+
it "should find the matching types and their nested types." do
|
17
|
+
Aquarium::NestedTestTypes.nested_in_NestedTestTypes.keys.each do |t|
|
18
|
+
actual = Aquarium::Finders::TypeFinder.new.find :types_and_nested_types => (t.name)
|
19
|
+
actual_keys = purge_actuals actual
|
20
|
+
actual_keys.sort{|x,y| x.name <=> y.name}.should == Aquarium::NestedTestTypes.nested_in_NestedTestTypes[t].sort{|x,y| x.name <=> y.name}
|
21
|
+
actual.not_matched_keys.should == []
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
Aquarium::Finders::TypeFinder::CANONICAL_OPTIONS["types_and_nested_types"].each do |synonym|
|
26
|
+
it "should accept :#{synonym} as a synonym for :types_and_nested_types" do
|
27
|
+
lambda {Aquarium::Finders::TypeFinder.new.find synonym.intern => TypeUtils.sample_types, :noop => true}.should_not raise_error(InvalidOptions)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe TypeUtils, "#find nested types subtracting out excluded types and descendents, using :exclude_types_and_descendents" do
|
33
|
+
it "should find the matching types and their descendent subtypes, minus the excluded type hierarchies." do
|
34
|
+
actual = Aquarium::Finders::TypeFinder.new.find :types_and_nested_types => Aquarium::NestedTestTypes,
|
35
|
+
:exclude_types_and_nested_types => Aquarium::NestedTestTypes::TopModule
|
36
|
+
expected = [Aquarium::NestedTestTypes] + Aquarium::NestedTestTypes.nested_in_NestedTestTypes[Aquarium::NestedTestTypes::TopClass]
|
37
|
+
actual_keys = purge_actuals actual
|
38
|
+
actual_keys.sort{|x,y| x.name <=> y.name}.should == expected.sort{|x,y| x.name <=> y.name}
|
39
|
+
actual.not_matched_keys.should == []
|
40
|
+
end
|
41
|
+
|
42
|
+
Aquarium::Finders::TypeFinder::CANONICAL_OPTIONS["exclude_types_and_nested_types"].each do |synonym|
|
43
|
+
it "should accept :#{synonym} as a synonym for :exclude_types_and_nested_types" do
|
44
|
+
lambda {Aquarium::Finders::TypeFinder.new.find :exclude_types_and_nested_types => ModuleForDescendents, synonym.intern => D1ForDescendents, :noop => true}.should_not raise_error(InvalidOptions)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -2,6 +2,27 @@ require File.dirname(__FILE__) + '/../spec_helper'
|
|
2
2
|
require File.dirname(__FILE__) + '/../spec_example_types'
|
3
3
|
require 'aquarium/utils/nil_object'
|
4
4
|
|
5
|
+
describe Aquarium::Utils::NilObject, "#eql?" do
|
6
|
+
it "should return true when called with any other NilObject" do
|
7
|
+
nil_object1 = Aquarium::Utils::NilObject.new
|
8
|
+
nil_object2 = Aquarium::Utils::NilObject.new
|
9
|
+
nil_object1.should eql(nil_object1)
|
10
|
+
nil_object1.should eql(nil_object2)
|
11
|
+
nil_object2.should eql(nil_object1)
|
12
|
+
nil_object1.eql?(nil_object1).should be_true
|
13
|
+
nil_object1.eql?(nil_object2).should be_true
|
14
|
+
nil_object2.eql?(nil_object1).should be_true
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should return false when called with any other object" do
|
18
|
+
nil_object = Aquarium::Utils::NilObject.new
|
19
|
+
nil_object.should_not eql(nil)
|
20
|
+
nil_object.should_not eql("nil_object")
|
21
|
+
nil_object.eql?(nil).should be_false
|
22
|
+
nil_object.eql?("nil_object").should be_false
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
5
26
|
describe Aquarium::Utils::NilObject, " (when a message is sent to it)" do
|
6
27
|
it "should return itself, by default, for methods not defined for Object" do
|
7
28
|
nil_object = Aquarium::Utils::NilObject.new
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Aquarium
|
2
|
+
module NestedTestTypes
|
3
|
+
def ntt; end
|
4
|
+
module TopModule
|
5
|
+
def tm; end
|
6
|
+
module MiddleModule
|
7
|
+
def mm; end
|
8
|
+
module BottomModule
|
9
|
+
def bm; end
|
10
|
+
end
|
11
|
+
class BottomModuleClass
|
12
|
+
def bmc; end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
class TopClass
|
17
|
+
def tc; end
|
18
|
+
class MiddleClass
|
19
|
+
def mc; end
|
20
|
+
class BottomClass
|
21
|
+
def bc; end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
module Aquarium
|
30
|
+
module NestedTestTypes
|
31
|
+
@@bottom_modules = [Aquarium::NestedTestTypes::TopModule::MiddleModule::BottomModule]
|
32
|
+
@@bottom_modules_classes = [Aquarium::NestedTestTypes::TopModule::MiddleModule::BottomModuleClass]
|
33
|
+
@@middle_modules = [Aquarium::NestedTestTypes::TopModule::MiddleModule] + @@bottom_modules + @@bottom_modules_classes
|
34
|
+
@@top_modules = [Aquarium::NestedTestTypes::TopModule] + @@middle_modules
|
35
|
+
@@bottom_classes = [Aquarium::NestedTestTypes::TopClass::MiddleClass::BottomClass]
|
36
|
+
@@middle_classes = [Aquarium::NestedTestTypes::TopClass::MiddleClass] + @@bottom_classes
|
37
|
+
@@top_classes = [Aquarium::NestedTestTypes::TopClass] + @@middle_classes
|
38
|
+
@@all_types = [Aquarium::NestedTestTypes] + @@top_modules + @@top_classes
|
39
|
+
def self.nested_in_NestedTestTypes
|
40
|
+
{Aquarium::NestedTestTypes => @@all_types,
|
41
|
+
Aquarium::NestedTestTypes::TopModule => @@top_modules,
|
42
|
+
Aquarium::NestedTestTypes::TopModule::MiddleModule => @@middle_modules,
|
43
|
+
Aquarium::NestedTestTypes::TopModule::MiddleModule::BottomModule => @@bottom_modules,
|
44
|
+
Aquarium::NestedTestTypes::TopModule::MiddleModule::BottomModuleClass => @@bottom_modules_classes,
|
45
|
+
Aquarium::NestedTestTypes::TopClass => @@top_classes,
|
46
|
+
Aquarium::NestedTestTypes::TopClass::MiddleClass => @@middle_classes,
|
47
|
+
Aquarium::NestedTestTypes::TopClass::MiddleClass::BottomClass => @@bottom_classes}
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/../spec_helper'
|
2
2
|
require 'aquarium/utils/type_utils'
|
3
3
|
require File.dirname(__FILE__) + '/../utils/type_utils_sample_classes'
|
4
|
+
require File.dirname(__FILE__) + '/../utils/type_utils_sample_nested_types'
|
4
5
|
|
5
6
|
include Aquarium::Utils
|
6
7
|
|
@@ -82,4 +83,20 @@ describe TypeUtils, ".descendents applied to JRuby-wrapped Java classes" do
|
|
82
83
|
it "should properly determine descendents" do
|
83
84
|
TypeUtils.descendents(FakeJRubyWrapperModule).should include(FakeJRubyWrapperClass)
|
84
85
|
end
|
85
|
-
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe TypeUtils, ".nested called with a type" do
|
89
|
+
it "should return the type itself in the result" do
|
90
|
+
Aquarium::NestedTestTypes.nested_in_NestedTestTypes.keys.each do |t|
|
91
|
+
TypeUtils.nested(t).should include(t)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should return all the modules and classes nested under the type, inclusive" do
|
96
|
+
Aquarium::NestedTestTypes.nested_in_NestedTestTypes.keys.each do |t|
|
97
|
+
actual_types = TypeUtils.nested(t)
|
98
|
+
actual_types.sort{|x,y| x.name <=> y.name}.should == Aquarium::NestedTestTypes.nested_in_NestedTestTypes[t].sort{|x,y| x.name <=> y.name}
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aquarium
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aquarium Development Team
|
@@ -9,7 +9,7 @@ autorequire: aquarium
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-05-25 00:00:00 -05:00
|
13
13
|
default_executable: ""
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -25,11 +25,14 @@ extra_rdoc_files:
|
|
25
25
|
- MIT-LICENSE
|
26
26
|
- UPGRADE
|
27
27
|
files:
|
28
|
+
- Aquarium-IDEA.ipr
|
29
|
+
- Aquarium-IDEA.iws
|
28
30
|
- Aquarium.ipr
|
29
31
|
- Aquarium.iws
|
30
32
|
- CHANGES
|
31
33
|
- EXAMPLES.rd
|
32
34
|
- MIT-LICENSE
|
35
|
+
- ParseTreePlay.rb
|
33
36
|
- Rakefile
|
34
37
|
- README
|
35
38
|
- RELEASE-PLAN
|
@@ -56,6 +59,7 @@ files:
|
|
56
59
|
- lib/aquarium/extras.rb
|
57
60
|
- lib/aquarium/finders/finder_result.rb
|
58
61
|
- lib/aquarium/finders/method_finder.rb
|
62
|
+
- lib/aquarium/finders/pointcut_finder.rb
|
59
63
|
- lib/aquarium/finders/type_finder.rb
|
60
64
|
- lib/aquarium/finders.rb
|
61
65
|
- lib/aquarium/utils/array_utils.rb
|
@@ -96,8 +100,11 @@ files:
|
|
96
100
|
- spec/aquarium/extras/design_by_contract_spec.rb
|
97
101
|
- spec/aquarium/finders/finder_result_spec.rb
|
98
102
|
- spec/aquarium/finders/method_finder_spec.rb
|
103
|
+
- spec/aquarium/finders/pointcut_finder_spec.rb
|
104
|
+
- spec/aquarium/finders/pointcut_finder_spec_test_classes.rb
|
99
105
|
- spec/aquarium/finders/type_finder_spec.rb
|
100
106
|
- spec/aquarium/finders/type_finder_with_descendents_and_ancestors_spec.rb
|
107
|
+
- spec/aquarium/finders/type_finder_with_nested_types.rb
|
101
108
|
- spec/aquarium/spec_example_types.rb
|
102
109
|
- spec/aquarium/spec_helper.rb
|
103
110
|
- spec/aquarium/utils/array_utils_spec.rb
|
@@ -111,6 +118,7 @@ files:
|
|
111
118
|
- spec/aquarium/utils/options_utils_spec.rb
|
112
119
|
- spec/aquarium/utils/set_utils_spec.rb
|
113
120
|
- spec/aquarium/utils/type_utils_sample_classes.rb
|
121
|
+
- spec/aquarium/utils/type_utils_sample_nested_types.rb
|
114
122
|
- spec/aquarium/utils/type_utils_spec.rb
|
115
123
|
- examples/aspect_design_example.rb
|
116
124
|
- examples/aspect_design_example_spec.rb
|
@@ -118,6 +126,8 @@ files:
|
|
118
126
|
- examples/design_by_contract_example_spec.rb
|
119
127
|
- examples/exception_wrapping_example.rb
|
120
128
|
- examples/exception_wrapping_example_spec.rb
|
129
|
+
- examples/introductions_example.rb
|
130
|
+
- examples/introductions_example_spec.rb
|
121
131
|
- examples/method_missing_example.rb
|
122
132
|
- examples/method_missing_example_spec.rb
|
123
133
|
- examples/method_tracing_example.rb
|
@@ -158,6 +168,6 @@ rubyforge_project: aquarium
|
|
158
168
|
rubygems_version: 1.0.1
|
159
169
|
signing_key:
|
160
170
|
specification_version: 2
|
161
|
-
summary: Aquarium-0.4.
|
171
|
+
summary: Aquarium-0.4.2 (r7) - Aspect-Oriented Programming toolkit for Ruby http://aquarium.rubyforge.org
|
162
172
|
test_files: []
|
163
173
|
|