aspect4r 0.8.0 → 0.8.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/VERSION +1 -1
- data/aspect4r.gemspec +4 -3
- data/examples/around_example.rb +1 -1
- data/examples/before_example.rb +0 -29
- data/examples/method_to_advices_example.rb +0 -0
- data/lib/aspect4r/base.rb +19 -0
- data/lib/aspect4r/helper.rb +15 -10
- data/spec/aspect4r/advice_test_spec.rb +9 -0
- metadata +6 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.8.
|
1
|
+
0.8.1
|
data/aspect4r.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{aspect4r}
|
8
|
-
s.version = "0.8.
|
8
|
+
s.version = "0.8.1"
|
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 = %q{2010-06-
|
12
|
+
s.date = %q{2010-06-11}
|
13
13
|
s.description = %q{AOP for ruby - use before, after and around to trim your fat methods and reduce code duplication}
|
14
14
|
s.email = %q{gcao99@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -99,7 +99,8 @@ Gem::Specification.new do |s|
|
|
99
99
|
"examples/after_example.rb",
|
100
100
|
"examples/around_example.rb",
|
101
101
|
"examples/before_example.rb",
|
102
|
-
"examples/combined_example.rb"
|
102
|
+
"examples/combined_example.rb",
|
103
|
+
"examples/method_to_advices_example.rb"
|
103
104
|
]
|
104
105
|
|
105
106
|
if s.respond_to? :specification_version then
|
data/examples/around_example.rb
CHANGED
data/examples/before_example.rb
CHANGED
@@ -31,32 +31,3 @@ A.new.test -1
|
|
31
31
|
# ==== Output ====
|
32
32
|
# before test
|
33
33
|
# check before test
|
34
|
-
|
35
|
-
|
36
|
-
module M
|
37
|
-
include Aspect4r
|
38
|
-
|
39
|
-
before :test do |value|
|
40
|
-
puts 'before test'
|
41
|
-
end
|
42
|
-
|
43
|
-
before_filter :test do |value|
|
44
|
-
puts 'check before test'
|
45
|
-
value >= 0
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
class B
|
50
|
-
def test value
|
51
|
-
puts 'test'
|
52
|
-
end
|
53
|
-
|
54
|
-
include M
|
55
|
-
end
|
56
|
-
|
57
|
-
puts "\nExample 3:"
|
58
|
-
B.new.test 1
|
59
|
-
# ==== Output ====
|
60
|
-
# before test
|
61
|
-
# check before test
|
62
|
-
# test
|
File without changes
|
data/lib/aspect4r/base.rb
CHANGED
@@ -36,6 +36,25 @@ module Aspect4r
|
|
36
36
|
a4r_data.change_group
|
37
37
|
end
|
38
38
|
end
|
39
|
+
|
40
|
+
def a4r_disable_advices_temporarily *methods
|
41
|
+
methods.each do |method|
|
42
|
+
advices = a4r_data[method.to_sym]
|
43
|
+
next if advices.nil? or advices.empty?
|
44
|
+
|
45
|
+
Aspect4r::Helper.define_method self, method, advices.wrapped_method
|
46
|
+
end
|
47
|
+
|
48
|
+
yield
|
49
|
+
ensure
|
50
|
+
methods.each do |method|
|
51
|
+
advices = a4r_data[method.to_sym]
|
52
|
+
|
53
|
+
next if advices.nil? or advices.empty?
|
54
|
+
|
55
|
+
Aspect4r::Helper.create_method self, method
|
56
|
+
end
|
57
|
+
end
|
39
58
|
end
|
40
59
|
end
|
41
60
|
end
|
data/lib/aspect4r/helper.rb
CHANGED
@@ -13,6 +13,13 @@ module Aspect4r
|
|
13
13
|
@creating_method
|
14
14
|
end
|
15
15
|
|
16
|
+
def self.define_method klass_or_module, *args, &block
|
17
|
+
@creating_method = true
|
18
|
+
klass_or_module.send :define_method, *args, &block
|
19
|
+
ensure
|
20
|
+
@creating_method = false
|
21
|
+
end
|
22
|
+
|
16
23
|
def self.eigen_class klass_or_module
|
17
24
|
klass_or_module.module_eval do
|
18
25
|
class << self
|
@@ -37,13 +44,15 @@ module Aspect4r
|
|
37
44
|
with_method = methods.pop
|
38
45
|
end
|
39
46
|
|
47
|
+
a4r_data = klass_or_module.a4r_data
|
48
|
+
advice = Aspect4r::Model::Advice.new(meta_data.advice_type, with_method, a4r_data.group, options)
|
49
|
+
|
40
50
|
methods.each do |method|
|
41
51
|
method = method.to_sym
|
42
52
|
klass_or_module.a4r_data.methods_with_advices << method
|
43
53
|
|
44
|
-
|
45
|
-
aspect
|
46
|
-
aspect.add Aspect4r::Model::Advice.new(meta_data.advice_type, with_method, a4r_data.group, options)
|
54
|
+
aspect = a4r_data[method] ||= Aspect4r::Model::AdvicesForMethod.new(method)
|
55
|
+
aspect.add advice
|
47
56
|
|
48
57
|
if not aspect.wrapped_method and klass_or_module.instance_methods.include?(method.to_s)
|
49
58
|
aspect.wrapped_method = klass_or_module.instance_method(method)
|
@@ -58,12 +67,8 @@ module Aspect4r
|
|
58
67
|
@creating_method = true
|
59
68
|
|
60
69
|
aspect = klass.a4r_data[method.to_sym]
|
61
|
-
|
62
|
-
if aspect.nil? or aspect.empty?
|
63
|
-
# There is no aspect defined.
|
64
|
-
@creating_method = nil
|
65
|
-
return
|
66
|
-
end
|
70
|
+
|
71
|
+
return if aspect.nil? or aspect.empty?
|
67
72
|
|
68
73
|
grouped_advices = []
|
69
74
|
group = nil
|
@@ -93,7 +98,7 @@ module Aspect4r
|
|
93
98
|
unless grouped_advices.empty?
|
94
99
|
create_method_for_before_after_advices klass, method, grouped_advices, inner_most unless grouped_advices.empty?
|
95
100
|
end
|
96
|
-
|
101
|
+
ensure
|
97
102
|
@creating_method = nil
|
98
103
|
end
|
99
104
|
|
@@ -99,4 +99,13 @@ describe "Test Advices" do
|
|
99
99
|
|
100
100
|
o.value.should == %w(after)
|
101
101
|
end
|
102
|
+
|
103
|
+
it "test method without advices" do
|
104
|
+
@klass.a4r_disable_advices_temporarily :test do
|
105
|
+
o = @klass.new
|
106
|
+
o.test 1
|
107
|
+
|
108
|
+
o.value.should == %w(test)
|
109
|
+
end
|
110
|
+
end
|
102
111
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aspect4r
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 61
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 8
|
9
|
-
-
|
10
|
-
version: 0.8.
|
9
|
+
- 1
|
10
|
+
version: 0.8.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Guoliang Cao
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-06-
|
18
|
+
date: 2010-06-11 00:00:00 -04:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -94,6 +94,7 @@ files:
|
|
94
94
|
- test/combined_test.rb
|
95
95
|
- test/method_invocation_test.rb
|
96
96
|
- test/test_helper.rb
|
97
|
+
- examples/method_to_advices_example.rb
|
97
98
|
has_rdoc: true
|
98
99
|
homepage: http://github.com/gcao/aspect4r
|
99
100
|
licenses: []
|
@@ -155,3 +156,4 @@ test_files:
|
|
155
156
|
- examples/around_example.rb
|
156
157
|
- examples/before_example.rb
|
157
158
|
- examples/combined_example.rb
|
159
|
+
- examples/method_to_advices_example.rb
|