aquarium 0.2.0 → 0.3.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 (59) hide show
  1. data/CHANGES +35 -0
  2. data/MIT-LICENSE +1 -1
  3. data/README +66 -20
  4. data/Rakefile +1 -1
  5. data/UPGRADE +5 -0
  6. data/examples/aspect_design_example.rb +5 -4
  7. data/examples/aspect_design_example_spec.rb +6 -5
  8. data/examples/design_by_contract_example.rb +3 -3
  9. data/examples/design_by_contract_example_spec.rb +4 -4
  10. data/examples/method_missing_example.rb +1 -1
  11. data/examples/method_missing_example_spec.rb +2 -2
  12. data/examples/method_tracing_example.rb +3 -3
  13. data/examples/method_tracing_example_spec.rb +6 -6
  14. data/lib/aquarium/aspects/advice.rb +2 -3
  15. data/lib/aquarium/aspects/aspect.rb +100 -246
  16. data/lib/aquarium/aspects/{default_object_handler.rb → default_objects_handler.rb} +7 -6
  17. data/lib/aquarium/aspects/dsl/aspect_dsl.rb +2 -2
  18. data/lib/aquarium/aspects/pointcut.rb +190 -107
  19. data/lib/aquarium/finders/method_finder.rb +120 -34
  20. data/lib/aquarium/finders/type_finder.rb +2 -5
  21. data/lib/aquarium/utils.rb +1 -0
  22. data/lib/aquarium/utils/array_utils.rb +11 -3
  23. data/lib/aquarium/utils/options_utils.rb +74 -0
  24. data/lib/aquarium/utils/type_utils.rb +25 -11
  25. data/lib/aquarium/version.rb +1 -1
  26. data/spec/aquarium/aspects/advice_chain_node_spec.rb +1 -1
  27. data/spec/aquarium/aspects/advice_spec.rb +1 -1
  28. data/spec/aquarium/aspects/aspect_invocation_spec.rb +179 -145
  29. data/spec/aquarium/aspects/aspect_spec.rb +1 -1
  30. data/spec/aquarium/aspects/aspect_with_nested_types_spec.rb +1 -1
  31. data/spec/aquarium/aspects/aspect_with_subtypes_spec.rb +1 -1
  32. data/spec/aquarium/aspects/concurrent_aspects_spec.rb +1 -1
  33. data/spec/aquarium/aspects/concurrent_aspects_with_objects_and_types_spec.rb +1 -1
  34. data/spec/aquarium/aspects/default_objects_handler_spec.rb +147 -0
  35. data/spec/aquarium/aspects/dsl/aspect_dsl_spec.rb +72 -121
  36. data/spec/aquarium/aspects/join_point_spec.rb +1 -1
  37. data/spec/aquarium/aspects/pointcut_and_composition_spec.rb +1 -1
  38. data/spec/aquarium/aspects/pointcut_or_composition_spec.rb +48 -47
  39. data/spec/aquarium/aspects/pointcut_spec.rb +727 -410
  40. data/spec/aquarium/extensions/hash_spec.rb +1 -1
  41. data/spec/aquarium/extensions/regex_spec.rb +1 -1
  42. data/spec/aquarium/extensions/set_spec.rb +1 -1
  43. data/spec/aquarium/extensions/string_spec.rb +1 -1
  44. data/spec/aquarium/extensions/symbol_spec.rb +1 -1
  45. data/spec/aquarium/extras/design_by_contract_spec.rb +1 -1
  46. data/spec/aquarium/finders/finder_result_spec.rb +1 -1
  47. data/spec/aquarium/finders/method_finder_spec.rb +49 -16
  48. data/spec/aquarium/finders/type_finder_spec.rb +1 -1
  49. data/spec/aquarium/finders/type_finder_with_descendents_and_ancestors_spec.rb +16 -1
  50. data/spec/aquarium/utils/array_utils_spec.rb +31 -6
  51. data/spec/aquarium/utils/hash_utils_spec.rb +1 -1
  52. data/spec/aquarium/utils/html_escaper_spec.rb +1 -1
  53. data/spec/aquarium/utils/logic_error_spec.rb +1 -1
  54. data/spec/aquarium/utils/method_utils_spec.rb +1 -1
  55. data/spec/aquarium/utils/name_utils_spec.rb +1 -1
  56. data/spec/aquarium/utils/nil_object_spec.rb +1 -1
  57. data/spec/aquarium/utils/set_utils_spec.rb +1 -1
  58. data/spec/aquarium/utils/type_utils_spec.rb +1 -1
  59. metadata +9 -7
@@ -1,5 +1,5 @@
1
1
 
2
- require File.dirname(__FILE__) + '/../spec_helper.rb'
2
+ require File.dirname(__FILE__) + '/../spec_helper'
3
3
  require File.dirname(__FILE__) + '/../spec_example_classes'
4
4
  require 'aquarium/aspects'
5
5
 
@@ -1,5 +1,5 @@
1
1
 
2
- require File.dirname(__FILE__) + '/../spec_helper.rb'
2
+ require File.dirname(__FILE__) + '/../spec_helper'
3
3
  require File.dirname(__FILE__) + '/../spec_example_classes'
4
4
  require 'aquarium/aspects'
5
5
 
@@ -1,5 +1,5 @@
1
1
 
2
- require File.dirname(__FILE__) + '/../spec_helper.rb'
2
+ require File.dirname(__FILE__) + '/../spec_helper'
3
3
  require File.dirname(__FILE__) + '/../spec_example_classes'
4
4
  require 'aquarium/aspects'
5
5
 
@@ -1,6 +1,6 @@
1
1
  # Specifically tests behavior when two or more advices apply to the same join point(s).
2
2
 
3
- require File.dirname(__FILE__) + '/../spec_helper.rb'
3
+ require File.dirname(__FILE__) + '/../spec_helper'
4
4
  require File.dirname(__FILE__) + '/../spec_example_classes'
5
5
  require File.dirname(__FILE__) + '/concurrently_accessed'
6
6
  require 'aquarium/aspects'
@@ -1,7 +1,7 @@
1
1
  # Specifically tests behavior when two or more advices apply to the same join points,
2
2
  # where one advice is for the type and the other is for an object of the type.
3
3
 
4
- require File.dirname(__FILE__) + '/../spec_helper.rb'
4
+ require File.dirname(__FILE__) + '/../spec_helper'
5
5
  require File.dirname(__FILE__) + '/../spec_example_classes'
6
6
  require File.dirname(__FILE__) + '/concurrently_accessed'
7
7
  require 'aquarium/aspects'
@@ -0,0 +1,147 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+ require 'aquarium/aspects/default_objects_handler'
3
+
4
+ module Aquarium
5
+ class DefaultObjectsClass
6
+ include Aquarium::Aspects::DefaultObjectsHandler
7
+
8
+ attr_reader :specification
9
+
10
+ def initialize hash = {}
11
+ @specification = hash
12
+ end
13
+ end
14
+ end
15
+
16
+ describe Aquarium::Aspects::DefaultObjectsHandler, "#default_objects_given" do
17
+ it "should return an empty array if the specification contains no :default_object or :default_objects key." do
18
+ Aquarium::DefaultObjectsClass.new.default_objects_given.should == []
19
+ end
20
+
21
+ it "should return an array of objects that were specified with the :default_object key." do
22
+ defaults = ["1", "2"]
23
+ doc = Aquarium::DefaultObjectsClass.new :default_object => defaults
24
+ doc.default_objects_given.should == defaults
25
+ end
26
+
27
+ it "should return an array of objects that were specified with the :default_objects key." do
28
+ defaults = ["1", "2"]
29
+ doc = Aquarium::DefaultObjectsClass.new :default_objects => defaults
30
+ doc.default_objects_given.should == defaults
31
+ end
32
+
33
+ it "should return an array containing a single object if a single objects was specified with the :default_object key." do
34
+ default = "1"
35
+ doc = Aquarium::DefaultObjectsClass.new :default_object => default
36
+ doc.default_objects_given.should == [default]
37
+ end
38
+
39
+ it "should return an array containing a single object if a single objects was specified with the :default_objects key." do
40
+ default = "1"
41
+ doc = Aquarium::DefaultObjectsClass.new :default_objects => default
42
+ doc.default_objects_given.should == [default]
43
+ end
44
+ end
45
+
46
+ describe Aquarium::Aspects::DefaultObjectsHandler, "#default_objects_given?" do
47
+ it "should return false if the specification contains no :default_object or :default_objects key." do
48
+ Aquarium::DefaultObjectsClass.new.default_objects_given?.should be_false
49
+ end
50
+
51
+ it "should return true if one or more objects were specified with the :default_object key." do
52
+ defaults = ["1", "2"]
53
+ doc = Aquarium::DefaultObjectsClass.new :default_object => defaults
54
+ doc.default_objects_given?.should be_true
55
+ end
56
+
57
+ it "should return true if one or more objects were specified with the :default_objects key." do
58
+ defaults = ["1", "2"]
59
+ doc = Aquarium::DefaultObjectsClass.new :default_objects => defaults
60
+ doc.default_objects_given?.should be_true
61
+ end
62
+
63
+ it "should return true if a single objects was specified with the :default_object key." do
64
+ default = "1"
65
+ doc = Aquarium::DefaultObjectsClass.new :default_object => default
66
+ doc.default_objects_given?.should be_true
67
+ end
68
+
69
+ it "should return true if a single objects was specified with the :default_objects key." do
70
+ default = "1"
71
+ doc = Aquarium::DefaultObjectsClass.new :default_objects => default
72
+ doc.default_objects_given?.should be_true
73
+ end
74
+ end
75
+
76
+ describe Aquarium::Aspects::DefaultObjectsHandler, "#use_default_objects_if_defined" do
77
+ it "should not change the specification if no :default_object or :default_objects were defined." do
78
+ doc = Aquarium::DefaultObjectsClass.new
79
+ doc.use_default_objects_if_defined
80
+ doc.specification.should == {}
81
+ end
82
+
83
+ it "should set the :objects in the specification to an array of objects if :default_object was defined with an array of objects." do
84
+ defaults = ["1", "2"]
85
+ doc = Aquarium::DefaultObjectsClass.new :default_object => defaults
86
+ doc.use_default_objects_if_defined
87
+ doc.specification.should == {:default_object => defaults, :objects => defaults}
88
+ end
89
+
90
+ it "should set the :objects in the specification to an array of objects if :default_objects was defined with an array of objects." do
91
+ defaults = ["1", "2"]
92
+ doc = Aquarium::DefaultObjectsClass.new :default_objects => defaults
93
+ doc.use_default_objects_if_defined
94
+ doc.specification.should == {:default_objects => defaults, :objects => defaults}
95
+ end
96
+
97
+ it "should set the :objects in the specification to an array with one object if :default_object was defined with one object." do
98
+ default = "1"
99
+ doc = Aquarium::DefaultObjectsClass.new :default_object => default
100
+ doc.use_default_objects_if_defined
101
+ doc.specification.should == {:default_object => default, :objects => [default]}
102
+ end
103
+
104
+ it "should set the :objects in the specification to an array with one object if :default_objects was defined with one object." do
105
+ default = "1"
106
+ doc = Aquarium::DefaultObjectsClass.new :default_objects => default
107
+ doc.use_default_objects_if_defined
108
+ doc.specification.should == {:default_objects => default, :objects => [default]}
109
+ end
110
+
111
+ it "should set the :types in the specification to an array of types if :default_object was defined with an array of types." do
112
+ defaults = [String, Aquarium::DefaultObjectsClass]
113
+ doc = Aquarium::DefaultObjectsClass.new :default_object => defaults
114
+ doc.use_default_objects_if_defined
115
+ doc.specification.should == {:default_object => defaults, :types => defaults}
116
+ end
117
+
118
+ it "should set the :types in the specification to an array of types if :default_objects was defined with an array of types." do
119
+ defaults = [String, Aquarium::DefaultObjectsClass]
120
+ doc = Aquarium::DefaultObjectsClass.new :default_objects => defaults
121
+ doc.use_default_objects_if_defined
122
+ doc.specification.should == {:default_objects => defaults, :types => defaults}
123
+ end
124
+
125
+ it "should set the :types in the specification to an array with one type if :default_object was defined with one type." do
126
+ default = String
127
+ doc = Aquarium::DefaultObjectsClass.new :default_object => default
128
+ doc.use_default_objects_if_defined
129
+ doc.specification.should == {:default_object => default, :types => [default]}
130
+ end
131
+
132
+ it "should set the :types in the specification to an array with one type if :default_objects was defined with one type." do
133
+ default = String
134
+ doc = Aquarium::DefaultObjectsClass.new :default_objects => default
135
+ doc.use_default_objects_if_defined
136
+ doc.specification.should == {:default_objects => default, :types => [default]}
137
+ end
138
+
139
+ it "should set the :objects and :types in the specification to arrays of the corresponding objects and types if :default_objects was defined with objects and types." do
140
+ defaults = [String, Aquarium::DefaultObjectsClass, "1", "2"]
141
+ doc = Aquarium::DefaultObjectsClass.new :default_objects => defaults
142
+ doc.use_default_objects_if_defined
143
+ doc.specification.should == {:default_objects => defaults, :types => [String, Aquarium::DefaultObjectsClass], :objects => ["1", "2"]}
144
+ end
145
+
146
+ end
147
+
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../../spec_helper.rb'
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
2
  require File.dirname(__FILE__) + '/../../spec_example_classes'
3
3
  require 'aquarium/aspects/dsl/aspect_dsl'
4
4
 
@@ -16,8 +16,8 @@ describe "DSL method #before" do
16
16
  end
17
17
 
18
18
  it "should be equivalent to advise :before." do
19
- @aspects << DSLClass.advise(:before, :noop, :pointcut => {:type => Watchful, :methods => :public_watchful_method}, &@advice)
20
- @aspects << DSLClass.before( :noop, :pointcut => {:type => Watchful, :methods => :public_watchful_method}, &@advice)
19
+ @aspects << DSLClass.advise(:before, :noop, :pointcut => {:calls_to => :public_watchful_method, :in_type => Watchful}, &@advice)
20
+ @aspects << DSLClass.before( :noop, :pointcut => {:calls_to => :public_watchful_method, :in_type => Watchful}, &@advice)
21
21
  @aspects[1].should == @aspects[0]
22
22
  end
23
23
  end
@@ -32,8 +32,8 @@ describe "DSL method #after" do
32
32
  end
33
33
 
34
34
  it "should be equivalent to advise :after." do
35
- @aspects << DSLClass.advise(:after, :noop, :pointcut => {:type => Watchful, :methods => :public_watchful_method}, &@advice)
36
- @aspects << DSLClass.after( :noop, :pointcut => {:type => Watchful, :methods => :public_watchful_method}, &@advice)
35
+ @aspects << DSLClass.advise(:after, :noop, :pointcut => {:calls_to => :public_watchful_method, :in_type => Watchful}, &@advice)
36
+ @aspects << DSLClass.after( :noop, :pointcut => {:calls_to => :public_watchful_method, :in_type => Watchful}, &@advice)
37
37
  @aspects[1].should == @aspects[0]
38
38
  end
39
39
  end
@@ -49,8 +49,8 @@ describe "DSL method #after_raising_within_or_returning_from" do
49
49
  end
50
50
 
51
51
  it "should be equivalent to advise :after." do
52
- @aspects << DSLClass.after( :noop, :pointcut => {:type => Watchful, :methods => :public_watchful_method}, &@advice)
53
- @aspects << DSLClass.after_raising_within_or_returning_from(:noop, :pointcut => {:type => Watchful, :methods => :public_watchful_method}, &@advice)
52
+ @aspects << DSLClass.after( :noop, :pointcut => {:calls_to => :public_watchful_method, :in_type => Watchful}, &@advice)
53
+ @aspects << DSLClass.after_raising_within_or_returning_from(:noop, :pointcut => {:calls_to => :public_watchful_method, :in_type => Watchful}, &@advice)
54
54
  @aspects[1].should == @aspects[0]
55
55
  end
56
56
  end
@@ -66,8 +66,8 @@ describe "DSL method #after_returning" do
66
66
  end
67
67
 
68
68
  it "should be equivalent to advise :after_returning." do
69
- @aspects << DSLClass.advise(:after_returning, :noop, :pointcut => {:type => Watchful, :methods => :public_watchful_method}, &@advice)
70
- @aspects << DSLClass.after_returning( :noop, :pointcut => {:type => Watchful, :methods => :public_watchful_method}, &@advice)
69
+ @aspects << DSLClass.advise(:after_returning, :noop, :pointcut => {:calls_to => :public_watchful_method, :in_type => Watchful}, &@advice)
70
+ @aspects << DSLClass.after_returning( :noop, :pointcut => {:calls_to => :public_watchful_method, :in_type => Watchful}, &@advice)
71
71
  @aspects[1].should == @aspects[0]
72
72
  end
73
73
  end
@@ -83,8 +83,8 @@ describe "DSL method #after_returning_from" do
83
83
  end
84
84
 
85
85
  it "should be equivalent to advise :after_returning." do
86
- @aspects << DSLClass.advise(:after_returning, :noop, :pointcut => {:type => Watchful, :methods => :public_watchful_method}, &@advice)
87
- @aspects << DSLClass.after_returning_from( :noop, :pointcut => {:type => Watchful, :methods => :public_watchful_method}, &@advice)
86
+ @aspects << DSLClass.advise(:after_returning, :noop, :pointcut => {:calls_to => :public_watchful_method, :in_type => Watchful}, &@advice)
87
+ @aspects << DSLClass.after_returning_from( :noop, :pointcut => {:calls_to => :public_watchful_method, :in_type => Watchful}, &@advice)
88
88
  @aspects[1].should == @aspects[0]
89
89
  end
90
90
  end
@@ -103,8 +103,8 @@ describe "DSL method #after_raising" do
103
103
  class ThrowsUp
104
104
  def tosses_cookies *args; raise Exception.new(args.inspect); end
105
105
  end
106
- @aspects << DSLClass.advise(:after_raising, :noop, :pointcut => {:type => ThrowsUp, :methods => :tosses_cookies}, &@advice)
107
- @aspects << DSLClass.after_raising( :noop, :pointcut => {:type => ThrowsUp, :methods => :tosses_cookies}, &@advice)
106
+ @aspects << DSLClass.advise(:after_raising, :noop, :pointcut => {:sending_messages_to => :tosses_cookies, :in_type => ThrowsUp}, &@advice)
107
+ @aspects << DSLClass.after_raising( :noop, :pointcut => {:sending_messages_to => :tosses_cookies, :in_type => ThrowsUp}, &@advice)
108
108
  @aspects[1].should == @aspects[0]
109
109
  end
110
110
  end
@@ -123,8 +123,8 @@ describe "DSL method #after_raising_within" do
123
123
  class ThrowsUp
124
124
  def tosses_cookies *args; raise Exception.new(args.inspect); end
125
125
  end
126
- @aspects << DSLClass.advise(:after_raising, :noop, :pointcut => {:type => ThrowsUp, :methods => :tosses_cookies}, &@advice)
127
- @aspects << DSLClass.after_raising_within( :noop, :pointcut => {:type => ThrowsUp, :methods => :tosses_cookies}, &@advice)
126
+ @aspects << DSLClass.advise(:after_raising, :noop, :pointcut => {:sending_messages_to => :tosses_cookies, :in_type => ThrowsUp}, &@advice)
127
+ @aspects << DSLClass.after_raising_within( :noop, :pointcut => {:sending_messages_to => :tosses_cookies, :in_type => ThrowsUp}, &@advice)
128
128
  @aspects[1].should == @aspects[0]
129
129
  end
130
130
  end
@@ -140,8 +140,8 @@ describe "DSL method #before_and_after" do
140
140
  end
141
141
 
142
142
  it "should be equivalent to advise :before, :after." do
143
- @aspects << DSLClass.advise(:before, :after, :noop, :pointcut => {:type => Watchful, :methods => :public_watchful_method}, &@advice)
144
- @aspects << DSLClass.before_and_after(:noop, :pointcut => {:type => Watchful, :methods => :public_watchful_method}, &@advice)
143
+ @aspects << DSLClass.advise(:before, :after, :noop, :pointcut => {:calls_to => :public_watchful_method, :in_type => Watchful}, &@advice)
144
+ @aspects << DSLClass.before_and_after( :noop, :pointcut => {:calls_to => :public_watchful_method, :in_type => Watchful}, &@advice)
145
145
  @aspects[1].should == @aspects[0]
146
146
  end
147
147
  end
@@ -157,8 +157,8 @@ describe "DSL method #before_and_after_raising_within_or_returning_from" do
157
157
  end
158
158
 
159
159
  it "should be equivalent to advise :before and advise :after." do
160
- @aspects << DSLClass.advise(:before, :after, :noop, :pointcut => {:type => Watchful, :methods => :public_watchful_method}, &@advice)
161
- @aspects << DSLClass.before_and_after_raising_within_or_returning_from(:noop, :pointcut => {:type => Watchful, :methods => :public_watchful_method}, &@advice)
160
+ @aspects << DSLClass.advise(:before, :after, :noop, :pointcut => {:calls_to => :public_watchful_method, :in_type => Watchful}, &@advice)
161
+ @aspects << DSLClass.before_and_after_raising_within_or_returning_from(:noop, :pointcut => {:calls_to => :public_watchful_method, :in_type => Watchful}, &@advice)
162
162
  @aspects[1].should == @aspects[0]
163
163
  end
164
164
  end
@@ -174,8 +174,8 @@ describe "DSL method #before_and_after_returning" do
174
174
  end
175
175
 
176
176
  it "should be equivalent to advise :before and advise :after_returning." do
177
- @aspects << DSLClass.advise(:before, :after_returning, :noop, :pointcut => {:type => Watchful, :methods => :public_watchful_method}, &@advice)
178
- @aspects << DSLClass.before_and_after_returning( :noop, :pointcut => {:type => Watchful, :methods => :public_watchful_method}, &@advice)
177
+ @aspects << DSLClass.advise(:before, :after_returning, :noop, :pointcut => {:calls_to => :public_watchful_method, :in_type => Watchful}, &@advice)
178
+ @aspects << DSLClass.before_and_after_returning( :noop, :pointcut => {:calls_to => :public_watchful_method, :in_type => Watchful}, &@advice)
179
179
  @aspects[1].should == @aspects[0]
180
180
  end
181
181
  end
@@ -191,8 +191,8 @@ describe "DSL method #before_and_after_returning_from" do
191
191
  end
192
192
 
193
193
  it "should be equivalent to advise :before and advise :after_returning." do
194
- @aspects << DSLClass.advise(:before, :after_returning, :noop, :pointcut => {:type => Watchful, :methods => :public_watchful_method}, &@advice)
195
- @aspects << DSLClass.before_and_after_returning_from(:noop, :pointcut => {:type => Watchful, :methods => :public_watchful_method}, &@advice)
194
+ @aspects << DSLClass.advise(:before, :after_returning, :noop, :pointcut => {:calls_to => :public_watchful_method, :in_type => Watchful}, &@advice)
195
+ @aspects << DSLClass.before_and_after_returning_from( :noop, :pointcut => {:calls_to => :public_watchful_method, :in_type => Watchful}, &@advice)
196
196
  @aspects[1].should == @aspects[0]
197
197
  end
198
198
  end
@@ -208,8 +208,8 @@ describe "DSL method #before_and_after_raising" do
208
208
  end
209
209
 
210
210
  it "should be equivalent to advise :before and advise :after_raising." do
211
- @aspects << DSLClass.advise(:before, :after_raising, :noop, :pointcut => {:type => Watchful, :methods => :public_watchful_method}, &@advice)
212
- @aspects << DSLClass.before_and_after_raising(:noop, :pointcut => {:type => Watchful, :methods => :public_watchful_method}, &@advice)
211
+ @aspects << DSLClass.advise(:before, :after_raising, :noop, :pointcut => {:calls_to => :public_watchful_method, :in_type => Watchful}, &@advice)
212
+ @aspects << DSLClass.before_and_after_raising( :noop, :pointcut => {:calls_to => :public_watchful_method, :in_type => Watchful}, &@advice)
213
213
  @aspects[1].should == @aspects[0]
214
214
  end
215
215
  end
@@ -225,8 +225,8 @@ describe "DSL method #around" do
225
225
  end
226
226
 
227
227
  it "should be equivalent to advise :around." do
228
- @aspects << DSLClass.advise(:around, :noop, :pointcut => {:type => Watchful, :methods => :public_watchful_method}, &@advice)
229
- @aspects << DSLClass.around( :noop, :pointcut => {:type => Watchful, :methods => :public_watchful_method}, &@advice)
228
+ @aspects << DSLClass.advise(:around, :noop, :pointcut => {:calls_to => :public_watchful_method, :in_type => Watchful}, &@advice)
229
+ @aspects << DSLClass.around( :noop, :pointcut => {:calls_to => :public_watchful_method, :in_type => Watchful}, &@advice)
230
230
  @aspects[1].should == @aspects[0]
231
231
  end
232
232
  end
@@ -243,11 +243,11 @@ describe "DSL method #advise, when determining the \"self\" to advise," do
243
243
  class Watchful1
244
244
  include Aquarium::Aspects::DSL::AspectDSL
245
245
  @@watchful = Watchful1.new
246
- @@aspect = after(:object => @@watchful, :method => :public_watchful_method) {|jp, obj, *args|}
246
+ @@aspect = after(:invoking => :public_watchful_method, :on_object => @@watchful) {|jp, obj, *args|}
247
247
  def self.watchful; @@watchful; end
248
248
  def self.aspect; @@aspect; end
249
249
  end
250
- @aspects << DSLClass.after(:object => Watchful1.watchful, :method => :public_watchful_method) {|jp, obj, *args|}
250
+ @aspects << Watchful1.after(:invoking => :public_watchful_method, :on_object => Watchful1.watchful) {|jp, obj, *args|}
251
251
  @aspects << Watchful1.aspect
252
252
  @aspects[1].join_points_matched.should == @aspects[0].join_points_matched
253
253
  @aspects[1].pointcuts.should == @aspects[0].pointcuts
@@ -256,10 +256,10 @@ describe "DSL method #advise, when determining the \"self\" to advise," do
256
256
  it "should ignore the default object \"self\" when a :type is specified." do
257
257
  class Watchful2
258
258
  include Aquarium::Aspects::DSL::AspectDSL
259
- @@aspect = after(:type => Watchful2, :method => :public_watchful_method) {|jp, obj, *args|}
259
+ @@aspect = after(:calls_to => :public_watchful_method, :in_type => Watchful2) {|jp, obj, *args|}
260
260
  def self.aspect; @@aspect; end
261
261
  end
262
- @aspects << DSLClass.after(:type => Watchful2, :method => :public_watchful_method) {|jp, obj, *args|}
262
+ @aspects << Watchful2.after(:calls_to => :public_watchful_method, :in_type => Watchful2) {|jp, obj, *args|}
263
263
  @aspects << Watchful2.aspect
264
264
  @aspects[1].join_points_matched.should == @aspects[0].join_points_matched
265
265
  @aspects[1].pointcuts.should == @aspects[0].pointcuts
@@ -282,7 +282,7 @@ describe "DSL method #advise, when determining the type or object to advise," do
282
282
  end
283
283
 
284
284
  it "should infer the type as \"self\" when no :object, :type, or :pointcut is specified." do
285
- @aspects << DSLClass.after(:type => WatchfulSelf, :method => :public_watchful_method) {|jp, obj, *args|}
285
+ @aspects << WatchfulSelf.after(:calls_to => :public_watchful_method, :in_type => WatchfulSelf) {|jp, obj, *args|}
286
286
  class WatchfulSelf
287
287
  @@aspect = after(:method => :public_watchful_method) {|jp, obj, *args|}
288
288
  end
@@ -294,10 +294,9 @@ describe "DSL method #advise, when determining the type or object to advise," do
294
294
  it "should infer the object as \"self\" when no :object, :type, or :pointcut is specified." do
295
295
  watchful_self = WatchfulSelf.new
296
296
  watchful_self.extend Aquarium::Aspects::DSL::AspectDSL
297
- @aspects << DSLClass.advise(:after, :pointcut => {:object => watchful_self, :method => :public_watchful_method}) {|jp, obj, *args|}
297
+ @aspects << WatchfulSelf.advise(:after, :pointcut => {:invoking => :public_watchful_method, :on_object => watchful_self}) {|jp, obj, *args|}
298
298
  @aspects << watchful_self.after(:method => :public_watchful_method) {|jp, obj, *args|}
299
299
  @aspects[1].join_points_matched.should == @aspects[0].join_points_matched
300
- @aspects[1].pointcuts.should == @aspects[0].pointcuts
301
300
  end
302
301
 
303
302
  it "should infer no types or objects if a :pointcut => {...} parameter is used and it does not specify a type or object." do
@@ -357,7 +356,7 @@ describe "DSL method #advise, when determining instance or class methods to advi
357
356
  def public_watchful_method *args; end
358
357
  end
359
358
  advice_called = 0
360
- WatchfulExampleWithSeparateAdviseCall2.advise :before, :type => WatchfulExampleWithSeparateAdviseCall2, :methods => /public_watchful_method/, :method_options =>[:instance] do |jp, obj, *args|
359
+ WatchfulExampleWithSeparateAdviseCall2.advise :before, :sending_messages_to => /public_watchful_method/, :on_types => WatchfulExampleWithSeparateAdviseCall2, :restricting_methods_to =>[:instance_methods] do |jp, obj, *args|
361
360
  advice_called += 1
362
361
  end
363
362
  WatchfulExampleWithSeparateAdviseCall2.class_public_watchful_method :a1, :a2
@@ -375,7 +374,7 @@ describe "DSL method #advise, when determining instance or class methods to advi
375
374
  def public_watchful_method *args; end
376
375
  end
377
376
  advice_called = 0
378
- WatchfulExampleWithSeparateAdviseCall3.advise :before, :methods => /public_watchful_method/, :method_options =>[:class] do |jp, obj, *args|
377
+ WatchfulExampleWithSeparateAdviseCall3.advise :before, :calling => /public_watchful_method/, :restricting_methods_to =>[:class_methods] do |jp, obj, *args|
379
378
  advice_called += 1
380
379
  end
381
380
  WatchfulExampleWithSeparateAdviseCall3.class_public_watchful_method :a1, :a2
@@ -428,102 +427,54 @@ describe "DSL methods for the advice kind, when determining instance or class me
428
427
  end
429
428
 
430
429
  describe "Synonyms for :types" do
431
- before :each do
432
- @advice = proc {|jp, obj, *args| "advice"}
433
- @aspects = [DSLClass.after(:noop, :types => Watchful, :methods => :public_watchful_method, &@advice)]
434
- end
435
- after :each do
436
- @aspects.each {|a| a.unadvise}
437
- end
438
-
439
- it ":type is a synonym for :types" do
440
- @aspects << DSLClass.after(:noop, :type => Watchful, :methods => :public_watchful_method, &@advice)
441
- @aspects[1].should == @aspects[0]
442
- end
443
-
444
- it ":within_types is a synonym for :types" do
445
- @aspects << DSLClass.after(:noop, :within_type => Watchful, :methods => :public_watchful_method, &@advice)
446
- @aspects[1].should == @aspects[0]
447
- end
448
-
449
- it ":within_types is a synonym for :types" do
450
- @aspects << DSLClass.after(:noop, :within_types => Watchful, :methods => :public_watchful_method, &@advice)
451
- @aspects[1].should == @aspects[0]
430
+ Aquarium::Aspects::Aspect::CANONICAL_OPTIONS["types"].each do |key|
431
+ it "should accept :#{key} as a synonym for :types." do
432
+ advice = proc {|jp, obj, *args| "advice"}
433
+ aspect1 = DSLClass.after :noop, :calls_to => :public_watchful_method, :types => Watchful, &advice
434
+ aspect2 = DSLClass.after :noop, :calls_to => :public_watchful_method, key.intern => Watchful, &advice
435
+ aspect2.should == aspect1
436
+ aspect1.unadvise
437
+ aspect2.unadvise
438
+ end
452
439
  end
453
440
  end
454
441
 
455
442
  describe "Synonyms for :objects" do
456
- before :each do
457
- @advice = proc {|jp, obj, *args| "advice"}
458
- @aspects = [DSLClass.after(:noop, :objects => @watchful, :methods => :public_watchful_method, &@advice)]
459
- end
460
- after :each do
461
- @aspects.each {|a| a.unadvise}
462
- end
463
-
464
- it ":object is a synonym for :objects" do
465
- @aspects << DSLClass.after(:noop, :object => @watchful, :methods => :public_watchful_method, &@advice)
466
- @aspects[1].should == @aspects[0]
467
- end
468
-
469
- it ":within_objects is a synonym for :objects" do
470
- @aspects << DSLClass.after(:noop, :within_object => @watchful, :methods => :public_watchful_method, &@advice)
471
- @aspects[1].should == @aspects[0]
472
- end
473
-
474
- it ":within_objects is a synonym for :objects" do
475
- @aspects << DSLClass.after(:noop, :within_objects => @watchful, :methods => :public_watchful_method, &@advice)
476
- @aspects[1].should == @aspects[0]
443
+ Aquarium::Aspects::Aspect::CANONICAL_OPTIONS["objects"].each do |key|
444
+ it "should accept :#{key} as a synonym for :objects." do
445
+ advice = proc {|jp, obj, *args| "advice"}
446
+ aspect1 = DSLClass.after :noop, :calls_to => :public_watchful_method, :objects => @watchful, &advice
447
+ aspect2 = DSLClass.after :noop, :calls_to => :public_watchful_method, key.intern => @watchful, &advice
448
+ aspect2.should == aspect1
449
+ aspect1.unadvise
450
+ aspect2.unadvise
451
+ end
477
452
  end
478
453
  end
479
454
 
480
455
  describe "Synonyms for :methods" do
481
- before :each do
482
- @advice = proc {|jp, obj, *args| "advice"}
483
- @aspects = [DSLClass.after(:noop, :objects => @watchful, :methods => :public_watchful_method, &@advice)]
484
- end
485
- after :each do
486
- @aspects.each {|a| a.unadvise}
487
- end
488
-
489
- it ":method is a synonym for :methods" do
490
- @aspects << DSLClass.after(:noop, :object => @watchful, :method => :public_watchful_method, &@advice)
491
- @aspects[1].should == @aspects[0]
492
- end
493
-
494
- it ":within_methods is a synonym for :methods" do
495
- @aspects << DSLClass.after(:noop, :within_object => @watchful, :within_methods => :public_watchful_method, &@advice)
496
- @aspects[1].should == @aspects[0]
497
- end
498
-
499
- it ":within_methods is a synonym for :methods" do
500
- @aspects << DSLClass.after(:noop, :within_objects => @watchful, :within_method => :public_watchful_method, &@advice)
501
- @aspects[1].should == @aspects[0]
456
+ Aquarium::Aspects::Aspect::CANONICAL_OPTIONS["methods"].each do |key|
457
+ it "should accept :#{key} as a synonym for :methods." do
458
+ advice = proc {|jp, obj, *args| "advice"}
459
+ aspect1 = DSLClass.after :noop, :methods => :public_watchful_method, :in_types => Watchful, &advice
460
+ aspect2 = DSLClass.after :noop, key.intern => :public_watchful_method, :in_types => Watchful, &advice
461
+ aspect2.should == aspect1
462
+ aspect1.unadvise
463
+ aspect2.unadvise
464
+ end
502
465
  end
503
466
  end
504
467
 
505
- describe "Synonyms for :pointcut" do
506
- before :each do
507
- @advice = proc {|jp, obj, *args| "advice"}
508
- @aspects = [DSLClass.after(:noop, :pointcut => {:objects => @watchful, :methods => :public_watchful_method}, &@advice)]
509
- end
510
- after :each do
511
- @aspects.each {|a| a.unadvise}
512
- end
513
-
514
- it ":pointcuts is a synonym for :pointcut" do
515
- @aspects << DSLClass.after(:noop, :pointcuts => {:objects => @watchful, :methods => :public_watchful_method}, &@advice)
516
- @aspects[1].should == @aspects[0]
517
- end
518
-
519
- it "should accept :within_pointcuts as a synonym for :pointcut." do
520
- @aspects << DSLClass.after(:noop, :within_pointcuts => {:objects => @watchful, :methods => :public_watchful_method}, &@advice)
521
- @aspects[1].should == @aspects[0]
522
- end
523
-
524
- it "should accept :within_pointcut as a synonym for :pointcut." do
525
- @aspects << DSLClass.after(:noop, :within_pointcut => {:objects => @watchful, :methods => :public_watchful_method}, &@advice)
526
- @aspects[1].should == @aspects[0]
468
+ describe "Synonyms for :pointcuts" do
469
+ Aquarium::Aspects::Aspect::CANONICAL_OPTIONS["pointcuts"].each do |key|
470
+ it "should accept :#{key} as a synonym for :pointcuts." do
471
+ advice = proc {|jp, obj, *args| "advice"}
472
+ aspect1 = DSLClass.after :noop, :pointcuts => {:calls_to => :public_watchful_method, :within_objects => @watchful}, &advice
473
+ aspect2 = DSLClass.after :noop, key.intern => {:calls_to => :public_watchful_method, :within_objects => @watchful}, &advice
474
+ aspect2.should == aspect1
475
+ aspect1.unadvise
476
+ aspect2.unadvise
477
+ end
527
478
  end
528
479
  end
529
480