aspector 0.7.1 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.rvmrc +6 -1
- data/Gemfile +1 -4
- data/Gemfile.lock +8 -24
- data/Rakefile +0 -18
- data/VERSION +1 -1
- data/aspector.gemspec +11 -21
- data/examples/cache_aspect.rb +9 -6
- data/lib/aspector/advice.rb +1 -1
- data/lib/aspector/aspect_instances.rb +1 -1
- data/lib/aspector/base.rb +140 -108
- data/lib/aspector/base_class_methods.rb +37 -26
- data/lib/aspector/method_matcher.rb +2 -2
- data/lib/aspector/module_extension.rb +9 -9
- data/lib/aspector/object_extension.rb +3 -3
- data/lib/aspector.rb +0 -1
- data/spec/functional/aspect_on_eigen_class_spec.rb +8 -2
- data/spec/functional/aspector_spec.rb +32 -1
- data/spec/functional/aspects_combined_spec.rb +8 -2
- data/spec/functional/execution_order_spec.rb +8 -2
- data/spec/unit/after_spec.rb +0 -17
- data/spec/unit/base_class_methods_spec.rb +4 -4
- data/spec/unit/base_spec.rb +1 -1
- data/spec/unit/method_matcher_spec.rb +2 -2
- metadata +90 -200
- data/lib/aspector/context.rb +0 -29
data/.rvmrc
CHANGED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -20,28 +20,15 @@ GEM
|
|
20
20
|
rake
|
21
21
|
rake (0.9.2.2)
|
22
22
|
rb-fsevent (0.4.3.1)
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
ruby_parser
|
30
|
-
rspec (2.3.0)
|
31
|
-
rspec-core (~> 2.3.0)
|
32
|
-
rspec-expectations (~> 2.3.0)
|
33
|
-
rspec-mocks (~> 2.3.0)
|
34
|
-
rspec-core (2.3.1)
|
35
|
-
rspec-expectations (2.3.0)
|
23
|
+
rspec (2.8.0)
|
24
|
+
rspec-core (~> 2.8.0)
|
25
|
+
rspec-expectations (~> 2.8.0)
|
26
|
+
rspec-mocks (~> 2.8.0)
|
27
|
+
rspec-core (2.8.0)
|
28
|
+
rspec-expectations (2.8.0)
|
36
29
|
diff-lcs (~> 1.1.2)
|
37
|
-
rspec-mocks (2.
|
30
|
+
rspec-mocks (2.8.0)
|
38
31
|
ruby-prof (0.10.8)
|
39
|
-
ruby2ruby (1.3.1)
|
40
|
-
ruby_parser (~> 2.0)
|
41
|
-
sexp_processor (~> 3.0)
|
42
|
-
ruby_parser (2.3.1)
|
43
|
-
sexp_processor (~> 3.0)
|
44
|
-
sexp_processor (3.0.10)
|
45
32
|
thor (0.14.6)
|
46
33
|
|
47
34
|
PLATFORMS
|
@@ -56,8 +43,5 @@ DEPENDENCIES
|
|
56
43
|
guard-shell (~> 0.1.1)
|
57
44
|
jeweler (~> 1.6.4)
|
58
45
|
rb-fsevent (~> 0.4.3.1)
|
59
|
-
|
60
|
-
reek (~> 1.2.8)
|
61
|
-
roodi (~> 2.1.0)
|
62
|
-
rspec (~> 2.3.0)
|
46
|
+
rspec
|
63
47
|
ruby-prof
|
data/Rakefile
CHANGED
@@ -31,24 +31,6 @@ RSpec::Core::RakeTask.new(:spec) do |spec|
|
|
31
31
|
spec.pattern = FileList['spec/**/*_spec.rb']
|
32
32
|
end
|
33
33
|
|
34
|
-
RSpec::Core::RakeTask.new(:rcov) do |spec|
|
35
|
-
spec.pattern = 'spec/**/*_spec.rb'
|
36
|
-
spec.rcov = true
|
37
|
-
end
|
38
|
-
|
39
|
-
require 'reek/rake/task'
|
40
|
-
Reek::Rake::Task.new do |t|
|
41
|
-
t.fail_on_error = true
|
42
|
-
t.verbose = false
|
43
|
-
t.source_files = 'lib/**/*.rb'
|
44
|
-
end
|
45
|
-
|
46
|
-
require 'roodi'
|
47
|
-
require 'roodi_task'
|
48
|
-
RoodiTask.new do |t|
|
49
|
-
t.verbose = false
|
50
|
-
end
|
51
|
-
|
52
34
|
task :default => :spec
|
53
35
|
|
54
36
|
require 'rake/rdoctask'
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.8.0
|
data/aspector.gemspec
CHANGED
@@ -4,14 +4,14 @@
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
|
-
s.name =
|
8
|
-
s.version = "0.
|
7
|
+
s.name = "aspector"
|
8
|
+
s.version = "0.8.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Guoliang Cao"]
|
12
|
-
s.date =
|
13
|
-
s.description =
|
14
|
-
s.email =
|
12
|
+
s.date = "2012-02-14"
|
13
|
+
s.description = ""
|
14
|
+
s.email = "gcao99@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE.txt",
|
17
17
|
"README.rdoc"
|
@@ -43,7 +43,6 @@ Gem::Specification.new do |s|
|
|
43
43
|
"lib/aspector/aspect_instances.rb",
|
44
44
|
"lib/aspector/base.rb",
|
45
45
|
"lib/aspector/base_class_methods.rb",
|
46
|
-
"lib/aspector/context.rb",
|
47
46
|
"lib/aspector/deferred_logic.rb",
|
48
47
|
"lib/aspector/deferred_option.rb",
|
49
48
|
"lib/aspector/method_matcher.rb",
|
@@ -72,21 +71,18 @@ Gem::Specification.new do |s|
|
|
72
71
|
"spec/unit/deferred_logic_spec.rb",
|
73
72
|
"spec/unit/method_matcher_spec.rb"
|
74
73
|
]
|
75
|
-
s.homepage =
|
74
|
+
s.homepage = "http://github.com/gcao/aspector"
|
76
75
|
s.licenses = ["MIT"]
|
77
76
|
s.require_paths = ["lib"]
|
78
|
-
s.rubygems_version =
|
79
|
-
s.summary =
|
77
|
+
s.rubygems_version = "1.8.15"
|
78
|
+
s.summary = "Aspect Oriented Ruby Programming"
|
80
79
|
|
81
80
|
if s.respond_to? :specification_version then
|
82
81
|
s.specification_version = 3
|
83
82
|
|
84
83
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
85
|
-
s.add_development_dependency(%q<rspec>, ["
|
84
|
+
s.add_development_dependency(%q<rspec>, [">= 0"])
|
86
85
|
s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
|
87
|
-
s.add_development_dependency(%q<rcov>, [">= 0"])
|
88
|
-
s.add_development_dependency(%q<reek>, ["~> 1.2.8"])
|
89
|
-
s.add_development_dependency(%q<roodi>, ["~> 2.1.0"])
|
90
86
|
s.add_development_dependency(%q<ruby-prof>, [">= 0"])
|
91
87
|
s.add_development_dependency(%q<guard>, ["~> 0.8.4"])
|
92
88
|
s.add_development_dependency(%q<guard-bundler>, ["~> 0.1.3"])
|
@@ -96,11 +92,8 @@ Gem::Specification.new do |s|
|
|
96
92
|
s.add_development_dependency(%q<growl>, ["~> 1.0.3"])
|
97
93
|
s.add_development_dependency(%q<awesome_print>, [">= 0"])
|
98
94
|
else
|
99
|
-
s.add_dependency(%q<rspec>, ["
|
95
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
100
96
|
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
101
|
-
s.add_dependency(%q<rcov>, [">= 0"])
|
102
|
-
s.add_dependency(%q<reek>, ["~> 1.2.8"])
|
103
|
-
s.add_dependency(%q<roodi>, ["~> 2.1.0"])
|
104
97
|
s.add_dependency(%q<ruby-prof>, [">= 0"])
|
105
98
|
s.add_dependency(%q<guard>, ["~> 0.8.4"])
|
106
99
|
s.add_dependency(%q<guard-bundler>, ["~> 0.1.3"])
|
@@ -111,11 +104,8 @@ Gem::Specification.new do |s|
|
|
111
104
|
s.add_dependency(%q<awesome_print>, [">= 0"])
|
112
105
|
end
|
113
106
|
else
|
114
|
-
s.add_dependency(%q<rspec>, ["
|
107
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
115
108
|
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
116
|
-
s.add_dependency(%q<rcov>, [">= 0"])
|
117
|
-
s.add_dependency(%q<reek>, ["~> 1.2.8"])
|
118
|
-
s.add_dependency(%q<roodi>, ["~> 2.1.0"])
|
119
109
|
s.add_dependency(%q<ruby-prof>, [">= 0"])
|
120
110
|
s.add_dependency(%q<guard>, ["~> 0.8.4"])
|
121
111
|
s.add_dependency(%q<guard-bundler>, ["~> 0.1.3"])
|
data/examples/cache_aspect.rb
CHANGED
@@ -46,12 +46,15 @@ require 'aspector'
|
|
46
46
|
class CacheAspect < Aspector::Base
|
47
47
|
default :ttl => 60
|
48
48
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
49
|
+
def after_initialize
|
50
|
+
aspect = self
|
51
|
+
around options[:method], :method_name_arg => true do |method, &block|
|
52
|
+
key = method
|
53
|
+
ttl = aspect.options[:ttl]
|
54
|
+
|
55
|
+
SimpleCache.cache key, ttl do
|
56
|
+
block.call
|
57
|
+
end
|
55
58
|
end
|
56
59
|
end
|
57
60
|
|
data/lib/aspector/advice.rb
CHANGED
data/lib/aspector/base.rb
CHANGED
@@ -3,152 +3,207 @@ require 'erb'
|
|
3
3
|
module Aspector
|
4
4
|
class Base
|
5
5
|
|
6
|
-
attr :
|
6
|
+
attr :aop_options
|
7
|
+
alias :options :aop_options
|
7
8
|
|
8
9
|
def initialize target, options = {}
|
9
|
-
@
|
10
|
+
@aop_target = target
|
10
11
|
|
11
|
-
default_options = self.class.
|
12
|
+
default_options = self.class.aop_default_options
|
12
13
|
if default_options and not default_options.empty?
|
13
|
-
@
|
14
|
+
@aop_options = default_options.merge(options)
|
14
15
|
else
|
15
|
-
@
|
16
|
+
@aop_options = options
|
16
17
|
end
|
17
18
|
|
18
|
-
# @
|
19
|
-
@
|
19
|
+
# @aop_context is where advices will be applied (i.e. where methods are modified), can be different from target
|
20
|
+
@aop_context = aop_get_context
|
20
21
|
|
21
22
|
after_initialize
|
22
23
|
end
|
23
24
|
|
24
|
-
def
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
25
|
+
def aop_advices
|
26
|
+
shared_advices = self.class.aop_advices
|
27
|
+
|
28
|
+
if shared_advices and shared_advices.size > 0
|
29
|
+
if @aop_advices
|
30
|
+
@aop_advices + shared_advices
|
31
|
+
else
|
32
|
+
shared_advices
|
33
|
+
end
|
34
|
+
else
|
35
|
+
@aop_advices or []
|
36
|
+
end
|
37
|
+
end
|
38
|
+
alias :advices :aop_advices
|
39
|
+
|
40
|
+
def aop_apply
|
41
|
+
before_apply
|
42
|
+
aop_invoke_deferred_logics
|
43
|
+
aop_define_methods_for_advice_blocks
|
44
|
+
aop_add_to_instances
|
45
|
+
aop_apply_to_methods
|
30
46
|
after_apply
|
31
47
|
end
|
48
|
+
alias :apply :aop_apply
|
49
|
+
|
50
|
+
protected
|
51
|
+
|
52
|
+
# Hook method that runs after an aspect is instantiated
|
53
|
+
def after_initialize
|
54
|
+
end
|
55
|
+
|
56
|
+
# Hook method that runs before an aspect is applied
|
57
|
+
def before_apply
|
58
|
+
end
|
59
|
+
|
60
|
+
# Hook method that runs after an aspect is applied
|
61
|
+
def after_apply
|
62
|
+
end
|
63
|
+
|
64
|
+
def before_apply_to_method method, advices
|
65
|
+
end
|
66
|
+
|
67
|
+
def after_apply_to_method method, advices
|
68
|
+
end
|
69
|
+
|
70
|
+
def aop_before *methods, &block
|
71
|
+
@aop_advices ||= []
|
72
|
+
@aop_advices << self.class.send(:aop_create_advice, Aspector::AdviceMetadata::BEFORE, self, methods, &block)
|
73
|
+
end
|
74
|
+
alias :before :aop_before
|
75
|
+
|
76
|
+
def aop_before_filter *methods, &block
|
77
|
+
@aop_advices ||= []
|
78
|
+
@aop_advices << self.class.send(:aop_create_advice, Aspector::AdviceMetadata::BEFORE_FILTER, self, methods, &block)
|
79
|
+
end
|
80
|
+
alias :before_filter :aop_before_filter
|
81
|
+
|
82
|
+
def aop_after *methods, &block
|
83
|
+
@aop_advices ||= []
|
84
|
+
@aop_advices << self.class.send(:aop_create_advice, Aspector::AdviceMetadata::AFTER, self, methods, &block)
|
85
|
+
end
|
86
|
+
alias :after :aop_after
|
87
|
+
|
88
|
+
def aop_around *methods, &block
|
89
|
+
@aop_advices ||= []
|
90
|
+
@aop_advices << self.class.send(:aop_create_advice, Aspector::AdviceMetadata::AROUND, self, methods, &block)
|
91
|
+
end
|
92
|
+
alias :around :aop_around
|
32
93
|
|
33
|
-
|
34
|
-
|
94
|
+
private
|
95
|
+
|
96
|
+
def aop_deferred_logic_results logic
|
97
|
+
@aop_deferred_logic_results[logic]
|
35
98
|
end
|
36
99
|
|
37
|
-
def
|
38
|
-
@
|
39
|
-
|
100
|
+
def aop_apply_to_methods
|
101
|
+
@aop_context.public_instance_methods.each do |method|
|
102
|
+
aop_apply_to_method(method.to_s, :public)
|
40
103
|
end
|
41
104
|
|
42
|
-
@
|
43
|
-
|
105
|
+
@aop_context.protected_instance_methods.each do |method|
|
106
|
+
aop_apply_to_method(method.to_s, :protected)
|
44
107
|
end
|
45
108
|
|
46
|
-
if @
|
47
|
-
@
|
48
|
-
|
109
|
+
if @aop_options[:private_methods]
|
110
|
+
@aop_context.private_instance_methods.each do |method|
|
111
|
+
aop_apply_to_method(method.to_s, :private)
|
49
112
|
end
|
50
113
|
end
|
51
114
|
end
|
52
115
|
|
53
|
-
def
|
54
|
-
advices =
|
116
|
+
def aop_apply_to_method method, scope = nil
|
117
|
+
advices = aop_advices_for_method method
|
55
118
|
return if advices.empty?
|
56
119
|
|
57
|
-
|
58
|
-
if @context.private_instance_methods.include?(method.to_s)
|
59
|
-
:private
|
60
|
-
elsif @context.protected_instance_methods.include?(method.to_s)
|
61
|
-
:protected
|
62
|
-
else
|
63
|
-
:public
|
64
|
-
end
|
65
|
-
|
66
|
-
recreate_method method, advices, scope
|
67
|
-
end
|
120
|
+
before_apply_to_method method, advices
|
68
121
|
|
69
|
-
|
122
|
+
scope ||=
|
123
|
+
if @aop_context.private_instance_methods.include?(RUBY_VERSION.index('1.9') ? method.to_sym : method.to_s)
|
124
|
+
:private
|
125
|
+
elsif @aop_context.protected_instance_methods.include?(RUBY_VERSION.index('1.9') ? method.to_sym : method.to_s)
|
126
|
+
:protected
|
127
|
+
else
|
128
|
+
:public
|
129
|
+
end
|
70
130
|
|
71
|
-
|
72
|
-
def after_initialize
|
73
|
-
end
|
131
|
+
aop_recreate_method method, advices, scope
|
74
132
|
|
75
|
-
|
76
|
-
def after_apply
|
133
|
+
after_apply_to_method method, advices
|
77
134
|
end
|
78
135
|
|
79
|
-
|
80
|
-
|
81
|
-
def get_context
|
82
|
-
return @target if @target.is_a?(Module) and not @options[:eigen_class]
|
136
|
+
def aop_get_context
|
137
|
+
return @aop_target if @aop_target.is_a?(Module) and not @aop_options[:eigen_class]
|
83
138
|
|
84
|
-
class << @
|
139
|
+
class << @aop_target
|
85
140
|
self
|
86
141
|
end
|
87
142
|
end
|
88
143
|
|
89
|
-
def
|
90
|
-
return unless self.class.
|
144
|
+
def aop_invoke_deferred_logics
|
145
|
+
return unless (logics = self.class.send :aop_deferred_logics)
|
91
146
|
|
92
|
-
@
|
93
|
-
|
94
|
-
@
|
147
|
+
@aop_deferred_logic_results ||= {}
|
148
|
+
logics.each do |logic|
|
149
|
+
@aop_deferred_logic_results[logic] = logic.apply @aop_context, self
|
95
150
|
end
|
96
151
|
end
|
97
152
|
|
98
|
-
def
|
99
|
-
|
153
|
+
def aop_define_methods_for_advice_blocks
|
154
|
+
aop_advices.each do |advice|
|
100
155
|
next unless advice.advice_block
|
101
|
-
@
|
102
|
-
@
|
156
|
+
@aop_context.send :define_method, advice.with_method, advice.advice_block
|
157
|
+
@aop_context.send :private, advice.with_method
|
103
158
|
end
|
104
159
|
end
|
105
160
|
|
106
|
-
def
|
107
|
-
aspect_instances = @
|
161
|
+
def aop_add_to_instances
|
162
|
+
aspect_instances = @aop_context.instance_variable_get(:@aop_instances)
|
108
163
|
unless aspect_instances
|
109
164
|
aspect_instances = AspectInstances.new
|
110
|
-
@
|
165
|
+
@aop_context.instance_variable_set(:@aop_instances, aspect_instances)
|
111
166
|
end
|
112
167
|
aspect_instances << self
|
113
168
|
end
|
114
169
|
|
115
|
-
def
|
116
|
-
if @
|
117
|
-
return unless @
|
170
|
+
def aop_add_method_hooks
|
171
|
+
if @aop_options[:eigen_class]
|
172
|
+
return unless @aop_target.is_a?(Module)
|
118
173
|
|
119
|
-
eigen_class = class << @
|
120
|
-
orig_singleton_method_added = @
|
174
|
+
eigen_class = class << @aop_target; self; end
|
175
|
+
orig_singleton_method_added = @aop_target.method(:singleton_method_added)
|
121
176
|
|
122
177
|
eigen_class.send :define_method, :singleton_method_added do |method|
|
123
|
-
|
178
|
+
aop_singleton_method_added(method) do
|
124
179
|
orig_singleton_method_added.call(method)
|
125
180
|
end
|
126
181
|
end
|
127
182
|
else
|
128
|
-
eigen_class = class << @
|
183
|
+
eigen_class = class << @aop_target; self; end
|
129
184
|
|
130
|
-
if @
|
131
|
-
orig_method_added = @
|
185
|
+
if @aop_target.is_a? Module
|
186
|
+
orig_method_added = @aop_target.method(:method_added)
|
132
187
|
else
|
133
188
|
orig_method_added = eigen_class.method(:method_added)
|
134
189
|
end
|
135
190
|
|
136
191
|
eigen_class.send :define_method, :method_added do |method|
|
137
|
-
|
192
|
+
aop_method_added(method) do
|
138
193
|
orig_method_added.call(method)
|
139
194
|
end
|
140
195
|
end
|
141
196
|
end
|
142
197
|
end
|
143
198
|
|
144
|
-
def
|
145
|
-
|
199
|
+
def aop_advices_for_method method
|
200
|
+
aop_advices.select do |advice|
|
146
201
|
advice.match?(method, self)
|
147
202
|
end
|
148
203
|
end
|
149
204
|
|
150
|
-
def
|
151
|
-
@
|
205
|
+
def aop_recreate_method method, advices, scope
|
206
|
+
@aop_context.instance_variable_set(:@aop_creating_method, true)
|
152
207
|
|
153
208
|
before_advices = advices.select {|advice| advice.before? }
|
154
209
|
after_advices = advices.select {|advice| advice.after? }
|
@@ -157,21 +212,21 @@ module Aspector
|
|
157
212
|
if around_advices.size > 1
|
158
213
|
(around_advices.size - 1).downto(1) do |i|
|
159
214
|
advice = around_advices[i]
|
160
|
-
|
215
|
+
aop_recreate_method_with_advices method, [], [], advice
|
161
216
|
end
|
162
217
|
end
|
163
218
|
|
164
|
-
|
219
|
+
aop_recreate_method_with_advices method, before_advices, after_advices, around_advices.first
|
165
220
|
|
166
|
-
@
|
221
|
+
@aop_context.send scope, method if scope != :public
|
167
222
|
ensure
|
168
|
-
@
|
223
|
+
@aop_context.instance_variable_set(:@aop_creating_method, nil)
|
169
224
|
end
|
170
225
|
|
171
|
-
def
|
226
|
+
def aop_recreate_method_with_advices method, before_advices, after_advices, around_advice
|
172
227
|
code = METHOD_TEMPLATE.result(binding)
|
173
228
|
#puts code
|
174
|
-
@
|
229
|
+
@aop_context.class_eval code, __FILE__, __LINE__ + 4
|
175
230
|
end
|
176
231
|
|
177
232
|
METHOD_TEMPLATE = ERB.new <<-CODE
|
@@ -181,12 +236,7 @@ module Aspector
|
|
181
236
|
define_method :<%= method %> do |*args, &block|
|
182
237
|
# Before advices
|
183
238
|
<% before_advices.each do |advice|
|
184
|
-
if advice.options[:
|
185
|
-
%>
|
186
|
-
context = Aspector::Context.new(target, <%= self.hash %>, <%= advice.hash %>)
|
187
|
-
context.method_name = '<%= method %>'
|
188
|
-
result = <%= advice.with_method %> context, *args
|
189
|
-
<% elsif advice.options[:method_name_arg] %>
|
239
|
+
if advice.options[:method_name_arg] %>
|
190
240
|
result = <%= advice.with_method %> '<%= method %>', *args
|
191
241
|
<% else %>
|
192
242
|
result = <%= advice.with_method %> *args
|
@@ -200,14 +250,7 @@ module Aspector
|
|
200
250
|
%>
|
201
251
|
|
202
252
|
<% if around_advice
|
203
|
-
if around_advice.options[:
|
204
|
-
%>
|
205
|
-
context = Aspector::Context.new(target, <%= self.hash %>, <%= around_advice.hash %>)
|
206
|
-
context.method_name = '<%= method %>'
|
207
|
-
result = <%= around_advice.with_method %> context, *args do |*args|
|
208
|
-
wrapped_method.bind(self).call *args, &block
|
209
|
-
end
|
210
|
-
<% elsif around_advice.options[:method_name_arg] %>
|
253
|
+
if around_advice.options[:method_name_arg] %>
|
211
254
|
result = <%= around_advice.with_method %> '<%= method %>', *args do |*args|
|
212
255
|
wrapped_method.bind(self).call *args, &block
|
213
256
|
end
|
@@ -225,30 +268,19 @@ module Aspector
|
|
225
268
|
# After advices
|
226
269
|
<% unless after_advices.empty?
|
227
270
|
after_advices.each do |advice|
|
228
|
-
if advice.options[:
|
229
|
-
if advice.options[:result_arg]
|
230
|
-
%>
|
231
|
-
context = Aspector::Context.new(target, <%= self.hash %>, <%= advice.hash %>)
|
232
|
-
context.method_name = '<%= method %>'
|
233
|
-
result = <%= advice.with_method %> context, result, *args
|
234
|
-
<% else %>
|
235
|
-
<%= advice.with_method %> context, *args
|
236
|
-
<% end
|
237
|
-
elsif advice.options[:method_name_arg]
|
271
|
+
if advice.options[:method_name_arg]
|
238
272
|
if advice.options[:result_arg]
|
239
273
|
%>
|
240
274
|
result = <%= advice.with_method %> '<%= method %>', result, *args
|
241
275
|
<% else %>
|
242
276
|
<%= advice.with_method %> '<%= method %>', *args
|
243
277
|
<% end
|
244
|
-
|
245
|
-
if advice.options[:result_arg]
|
278
|
+
elsif advice.options[:result_arg]
|
246
279
|
%>
|
247
280
|
result = <%= advice.with_method %> result, *args
|
248
|
-
<%
|
281
|
+
<% else %>
|
249
282
|
<%= advice.with_method %> *args
|
250
|
-
<%
|
251
|
-
end
|
283
|
+
<% end
|
252
284
|
end
|
253
285
|
%>
|
254
286
|
result
|