aspect4r 0.7.1 → 0.8.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.
data/Rakefile CHANGED
@@ -6,7 +6,7 @@ begin
6
6
  Jeweler::Tasks.new do |gem|
7
7
  gem.name = "aspect4r"
8
8
  gem.summary = %Q{Aspect Oriented Programming for ruby}
9
- gem.description = %Q{AOP for ruby - use before_method, after_method and around_method to trim your fat methods and reduce code duplication}
9
+ gem.description = %Q{AOP for ruby - use before, after and around to trim your fat methods and reduce code duplication}
10
10
  gem.email = "gcao99@gmail.com"
11
11
  gem.homepage = "http://github.com/gcao/aspect4r"
12
12
  gem.authors = ["Guoliang Cao"]
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.7.1
1
+ 0.8.0
data/aspect4r.gemspec CHANGED
@@ -5,12 +5,12 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{aspect4r}
8
- s.version = "0.7.1"
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 = %q{2010-06-08}
13
- s.description = %q{AOP for ruby - use before_method, after_method and around_method to trim your fat methods and reduce code duplication}
12
+ s.date = %q{2010-06-10}
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 = [
16
16
  "LICENSE",
@@ -44,6 +44,11 @@ Gem::Specification.new do |s|
44
44
  "lib/aspect4r/model/advices_for_method.rb",
45
45
  "lib/aspect4r/model/aspect_data.rb",
46
46
  "lib/aspect4r/return_this.rb",
47
+ "spec/aspect4r/advice_group_spec.rb",
48
+ "spec/aspect4r/advice_on_class_method_spec.rb",
49
+ "spec/aspect4r/advice_spec.rb",
50
+ "spec/aspect4r/advice_test_spec.rb",
51
+ "spec/aspect4r/advices_for_method_spec.rb",
47
52
  "spec/aspect4r/after_spec.rb",
48
53
  "spec/aspect4r/around_spec.rb",
49
54
  "spec/aspect4r/before_spec.rb",
@@ -69,7 +74,12 @@ Gem::Specification.new do |s|
69
74
  s.rubygems_version = %q{1.3.7}
70
75
  s.summary = %q{Aspect Oriented Programming for ruby}
71
76
  s.test_files = [
72
- "spec/aspect4r/after_spec.rb",
77
+ "spec/aspect4r/advice_group_spec.rb",
78
+ "spec/aspect4r/advice_on_class_method_spec.rb",
79
+ "spec/aspect4r/advice_spec.rb",
80
+ "spec/aspect4r/advice_test_spec.rb",
81
+ "spec/aspect4r/advices_for_method_spec.rb",
82
+ "spec/aspect4r/after_spec.rb",
73
83
  "spec/aspect4r/around_spec.rb",
74
84
  "spec/aspect4r/before_spec.rb",
75
85
  "spec/aspect4r/class_inheritance_spec.rb",
data/lib/aspect4r/base.rb CHANGED
@@ -25,7 +25,16 @@ module Aspect4r
25
25
 
26
26
  module ClassMethods
27
27
  def a4r_data
28
- @a4r_data ||= Aspect4r::Model::AspectData.new
28
+ @a4r_data ||= Aspect4r::Model::AspectData.new(self)
29
+ end
30
+
31
+ def a4r_group
32
+ a4r_data.change_group
33
+
34
+ if block_given?
35
+ yield
36
+ a4r_data.change_group
37
+ end
29
38
  end
30
39
  end
31
40
  end
@@ -4,12 +4,7 @@ class Class
4
4
 
5
5
  return if @a4r_data.nil? or @a4r_data.empty?
6
6
 
7
- a4r_data = Aspect4r::Model::AspectData.new
8
-
9
- # @a4r_data.each do |key, value|
10
- # a4r_data[key] = (value.clone rescue value)
11
- # end
12
-
7
+ a4r_data = Aspect4r::Model::AspectData.new(child)
13
8
  a4r_data.methods_with_advices.merge(@a4r_data.methods_with_advices)
14
9
 
15
10
  child.instance_variable_set('@a4r_data', a4r_data)
@@ -1,6 +1,6 @@
1
1
  class Module
2
2
  def included_with_a4r(base)
3
- included_without_a4r(child) if respond_to?(:included_without_a4r)
3
+ included_without_a4r(base)
4
4
 
5
5
  return if @a4r_data.nil? or @a4r_data.empty?
6
6
 
@@ -14,12 +14,12 @@ class Module
14
14
  alias included included_with_a4r
15
15
 
16
16
  def method_added_with_a4r(method)
17
- method_added_without_a4r(child) if respond_to?(:method_added_without_a4r)
17
+ method_added_without_a4r(method)
18
18
 
19
19
  return if method.to_s =~ /a4r/
20
20
 
21
21
  # save unbound method and create new method
22
- if not Aspect4r::Helper.creating_method? and @a4r_data and method_advices = @a4r_data[method]
22
+ if @a4r_data and method_advices = @a4r_data[method] and not Aspect4r::Helper.creating_method?
23
23
  method_advices.wrapped_method = instance_method(method)
24
24
  Aspect4r::Helper.create_method self, method
25
25
  end
@@ -27,4 +27,22 @@ class Module
27
27
 
28
28
  alias method_added_without_a4r method_added
29
29
  alias method_added method_added_with_a4r
30
+
31
+ def singleton_method_added_with_a4r(method)
32
+ singleton_method_added_without_a4r(method)
33
+
34
+ return if method.to_s =~ /a4r/
35
+
36
+ # save unbound method and create new method
37
+ eigen_class = Aspect4r::Helper.eigen_class(self)
38
+ my_advices = eigen_class.instance_variable_get(:@a4r_data)
39
+
40
+ if my_advices and method_advices = my_advices[method] and not Aspect4r::Helper.creating_method?
41
+ method_advices.wrapped_method = eigen_class.instance_method(method)
42
+ Aspect4r::Helper.create_method eigen_class, method
43
+ end
44
+ end
45
+
46
+ alias singleton_method_added_without_a4r singleton_method_added
47
+ alias singleton_method_added singleton_method_added_with_a4r
30
48
  end
@@ -13,10 +13,18 @@ module Aspect4r
13
13
  @creating_method
14
14
  end
15
15
 
16
+ def self.eigen_class klass_or_module
17
+ klass_or_module.module_eval do
18
+ class << self
19
+ self
20
+ end
21
+ end
22
+ end
23
+
16
24
  # Store original method in aspect data and refer to it whenever recreating method
17
25
  def self.process_advice meta_data, klass_or_module, *methods, &block
18
26
  methods.flatten!
19
-
27
+
20
28
  options = meta_data.default_options.clone
21
29
  options.merge!(methods.pop) if methods.last.is_a? Hash
22
30
  options.merge!(meta_data.mandatory_options)
@@ -33,8 +41,9 @@ module Aspect4r
33
41
  method = method.to_sym
34
42
  klass_or_module.a4r_data.methods_with_advices << method
35
43
 
36
- aspect = klass_or_module.a4r_data[method] ||= Aspect4r::Model::AdvicesForMethod.new(method)
37
- aspect.add Aspect4r::Model::Advice.new(meta_data.advice_type, with_method, options)
44
+ a4r_data = klass_or_module.a4r_data
45
+ aspect = a4r_data[method] ||= Aspect4r::Model::AdvicesForMethod.new(method)
46
+ aspect.add Aspect4r::Model::Advice.new(meta_data.advice_type, with_method, a4r_data.group, options)
38
47
 
39
48
  if not aspect.wrapped_method and klass_or_module.instance_methods.include?(method.to_s)
40
49
  aspect.wrapped_method = klass_or_module.instance_method(method)
@@ -57,16 +66,16 @@ module Aspect4r
57
66
  end
58
67
 
59
68
  grouped_advices = []
60
- inner_most = true
69
+ group = nil
70
+ inner_most = true
61
71
 
62
- aspect.advices.each do |advice|
63
- if advice.around? and not grouped_advices.empty?
72
+ aspect.each do |advice|
73
+ if ((group and group != advice.group) or advice.around?) and not grouped_advices.empty?
64
74
  # wrap up advices before current advice
65
75
  create_method_for_before_after_advices klass, method, grouped_advices, inner_most
66
76
 
67
- inner_most = false
68
-
69
77
  grouped_advices = []
78
+ inner_most = false
70
79
  end
71
80
 
72
81
  # handle current advice
@@ -76,6 +85,8 @@ module Aspect4r
76
85
  else
77
86
  grouped_advices << advice
78
87
  end
88
+
89
+ group = advice.group
79
90
  end
80
91
 
81
92
  # create wrap method for before/after advices which are not wrapped inside around advice.
@@ -160,7 +171,7 @@ module Aspect4r
160
171
  CODE
161
172
 
162
173
  def self.create_method_for_before_after_advices klass, method, advices, inner_most
163
- before_advices = advices.select {|advice| advice.before? }
174
+ before_advices = advices.select {|advice| advice.before? or advice.before_filter? }
164
175
  after_advices = advices.select {|advice| advice.after? }
165
176
 
166
177
  code = METHOD_TEMPLATE.result(binding)
@@ -5,24 +5,38 @@ module Aspect4r
5
5
  AFTER = 2
6
6
  AROUND = 3
7
7
 
8
+ attr :group
8
9
  attr_accessor :type, :with_method, :options
9
10
 
10
- def initialize type, with_method, options = {}
11
+ def initialize type, with_method, group, options = {}
11
12
  @type = type
12
13
  @with_method = with_method
14
+ @group = group
13
15
  @options = options
14
16
  end
15
17
 
16
18
  def name
17
19
  options[:name] || with_method
18
20
  end
19
-
20
- %w(before after around).each do |aspect|
21
- class_eval <<-CODE
22
- def #{aspect}?
23
- type == #{aspect.upcase}
24
- end
25
- CODE
21
+
22
+ def before?
23
+ type == BEFORE and not options[:skip_if_false]
24
+ end
25
+
26
+ def before_filter?
27
+ type == BEFORE and options[:skip_if_false]
28
+ end
29
+
30
+ def after?
31
+ type == AFTER
32
+ end
33
+
34
+ def around?
35
+ type == AROUND
36
+ end
37
+
38
+ def invoke obj, *args
39
+ obj.send with_method, *args
26
40
  end
27
41
  end
28
42
  end
@@ -1,6 +1,6 @@
1
1
  module Aspect4r
2
2
  module Model
3
- class AdvicesForMethod
3
+ class AdvicesForMethod < Array
4
4
  attr_reader :method
5
5
  attr_accessor :wrapped_method
6
6
 
@@ -8,37 +8,18 @@ module Aspect4r
8
8
  @method = method
9
9
  end
10
10
 
11
- def advices
12
- @advices ||= []
13
- end
14
-
15
11
  def add new_advice
16
- advices << new_advice unless include?(new_advice)
17
- end
18
-
19
- def empty?
20
- @advices.nil? or @advices.empty?
12
+ self << new_advice unless include?(new_advice)
21
13
  end
22
-
23
- def include? new_advice
24
- advices.detect { |advice| advice.name == new_advice.name }
25
- end
26
-
27
- def merge! another
28
- unless another.nil? or another.empty?
29
- another.advices.each do |advice|
30
- advices.push advice unless include?(advice)
31
- end
32
- end
33
14
 
34
- self
15
+ def include? new_advice
16
+ detect { |advice| advice.name == new_advice.name }
35
17
  end
36
-
37
- def clone
38
- o = self.class.new(method)
39
- o.advices.push *advices unless empty?
40
-
41
- o
18
+
19
+ def [] index
20
+ return super unless index.is_a? String or index.is_a? Symbol
21
+
22
+ detect {|advice| advice.name.to_sym == index.to_sym }
42
23
  end
43
24
  end
44
25
  end
@@ -3,12 +3,20 @@ require 'set'
3
3
  module Aspect4r
4
4
  module Model
5
5
  class AspectData < Hash
6
- def initialize *args
7
- super
6
+ def initialize klass_or_module
7
+ @klass_or_module = klass_or_module
8
8
  end
9
-
10
- def advices
11
- @advices ||= {}
9
+
10
+ def group_index
11
+ @group_index ||= 0
12
+ end
13
+
14
+ def group
15
+ "#{@klass_or_module.hash}:#{group_index}"
16
+ end
17
+
18
+ def change_group
19
+ @group_index = group_index + 1
12
20
  end
13
21
 
14
22
  def methods_with_advices
data/lib/aspect4r.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'aspect4r/before'
2
2
  require 'aspect4r/after'
3
3
  require 'aspect4r/around'
4
+ require 'aspect4r/classic'
4
5
 
5
6
  module Aspect4r
6
7
  def self.included(base)
@@ -0,0 +1,36 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "Group of advices" do
4
+ it "should work" do
5
+ klass = Class.new do
6
+ include Aspect4r
7
+
8
+ attr :value
9
+
10
+ def initialize
11
+ @value = []
12
+ end
13
+
14
+ def test
15
+ @value << "test"
16
+ end
17
+
18
+ a4r_group do
19
+ before :test do
20
+ @value << "before(group1)"
21
+ end
22
+ end
23
+
24
+ a4r_group do
25
+ before :test do
26
+ @value << "before(group2)"
27
+ end
28
+ end
29
+ end
30
+
31
+ o = klass.new
32
+ o.test
33
+
34
+ o.value.should == %w(before(group2) before(group1) test)
35
+ end
36
+ end
@@ -0,0 +1,69 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "Advices on singleton method (also known as class method)" do
4
+ it "class method" do
5
+ class AdvicesOnClassMethod
6
+ class << self
7
+ include Aspect4r
8
+
9
+ def value
10
+ @value ||= []
11
+ end
12
+
13
+ around :test do |proxy|
14
+ value << "around(before)"
15
+ a4r_invoke proxy
16
+ value << "around(after)"
17
+ end
18
+
19
+ before :test do
20
+ value << "before"
21
+ end
22
+
23
+ after :test do
24
+ value << "after"
25
+ end
26
+
27
+ def test
28
+ value << "test"
29
+ end
30
+ end
31
+ end
32
+
33
+ AdvicesOnClassMethod.test
34
+ AdvicesOnClassMethod.value.should == %w(before around(before) test around(after) after)
35
+ end
36
+
37
+ it "module singleton method" do
38
+ module AdvicesOnModuleSingletonMethod
39
+ class << self
40
+ include Aspect4r
41
+
42
+ def value
43
+ @value ||= []
44
+ end
45
+
46
+ around :test do |proxy|
47
+ value << "around(before)"
48
+ a4r_invoke proxy
49
+ value << "around(after)"
50
+ end
51
+
52
+ before :test do
53
+ value << "before"
54
+ end
55
+
56
+ after :test do
57
+ value << "after"
58
+ end
59
+
60
+ def test
61
+ value << "test"
62
+ end
63
+ end
64
+ end
65
+
66
+ AdvicesOnModuleSingletonMethod.test
67
+ AdvicesOnModuleSingletonMethod.value.should == %w(before around(before) test around(after) after)
68
+ end
69
+ end
@@ -0,0 +1,62 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe Aspect4r::Model::Advice do
4
+ it "before? returns true for before advice" do
5
+ advice = Aspect4r::Model::Advice.new Aspect4r::Model::Advice::BEFORE, :advice_method, :group
6
+ advice.before?.should be_true
7
+ end
8
+
9
+ it "before_filter? returns false for before_filter advice" do
10
+ advice = Aspect4r::Model::Advice.new Aspect4r::Model::Advice::BEFORE, :advice_method, :group
11
+ advice.before_filter?.should be_false
12
+ end
13
+
14
+ it "before? returns false for before advice" do
15
+ advice = Aspect4r::Model::Advice.new Aspect4r::Model::Advice::BEFORE, :advice_method, :group, :skip_if_false => true
16
+ advice.before?.should be_false
17
+ end
18
+
19
+ it "before_filter? returns true for before_filter advice" do
20
+ advice = Aspect4r::Model::Advice.new Aspect4r::Model::Advice::BEFORE, :advice_method, :group, :skip_if_false => true
21
+ advice.before_filter?.should be_true
22
+ end
23
+
24
+ it "invoke before advice" do
25
+ advice = Aspect4r::Model::Advice.new Aspect4r::Model::Advice::BEFORE, :advice_method, :group
26
+
27
+ o = Object.new
28
+ o.class.send :define_method, :advice_method do |*args|
29
+ do_something *args
30
+ end
31
+
32
+ o.expects(:do_something).with(1)
33
+
34
+ advice.invoke(o, 1)
35
+ end
36
+
37
+ it "invoke after advice" do
38
+ advice = Aspect4r::Model::Advice.new Aspect4r::Model::Advice::AFTER, :advice_method, :group
39
+
40
+ o = Object.new
41
+ o.class.send :define_method, :advice_method do |result, *args|
42
+ do_something result, *args
43
+ end
44
+
45
+ o.expects(:do_something).with(1)
46
+
47
+ advice.invoke(o, 1)
48
+ end
49
+
50
+ it "invoke around advice" do
51
+ advice = Aspect4r::Model::Advice.new Aspect4r::Model::Advice::AROUND, :advice_method, :group
52
+
53
+ o = Object.new
54
+ o.class.send :define_method, :advice_method do |proxy, *args|
55
+ a4r_invoke proxy, *args
56
+ end
57
+
58
+ o.expects(:a4r_invoke).with(:proxy, 1)
59
+
60
+ advice.invoke(o, :proxy, 1)
61
+ end
62
+ end
@@ -0,0 +1,102 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "Test Advices" do
4
+ before do
5
+ @klass = Class.new do
6
+ include Aspect4r
7
+
8
+ attr :value
9
+
10
+ def initialize
11
+ @value = []
12
+ end
13
+
14
+ around :test do |proxy, input|
15
+ @value << "around(before)"
16
+ a4r_invoke proxy, input
17
+ @value << "around(after)"
18
+ end
19
+
20
+ before :test, :name => 'before_advice' do |input|
21
+ @value << 'before'
22
+ end
23
+
24
+ before_filter :test do |input|
25
+ @value << 'before_filter'
26
+ input >= 0
27
+ end
28
+
29
+ after :test do |result, input|
30
+ @value << "after"
31
+ result * 100
32
+ end
33
+
34
+ def test input
35
+ @value << "test"
36
+ end
37
+ end
38
+ end
39
+
40
+ it "number of advices" do
41
+ @klass.a4r_data[:test].size.should == 4
42
+ end
43
+
44
+ it "around advice" do
45
+ advice = @klass.a4r_data[:test][0]
46
+ advice.around?.should be_true
47
+
48
+ o = @klass.new
49
+ o.expects(:a4r_invoke).with(:proxy, 1)
50
+
51
+ advice.invoke(o, :proxy, 1)
52
+
53
+ o.value.should == %w(around(before) around(after))
54
+ end
55
+
56
+ it "before advice" do
57
+ advice = @klass.a4r_data[:test][1]
58
+ advice.before?.should be_true
59
+
60
+ o = @klass.new
61
+ advice.invoke(o, 1)
62
+
63
+ o.value.should == %w(before)
64
+ end
65
+
66
+ it "before advice retrieved by name" do
67
+ advice = @klass.a4r_data[:test][:before_advice]
68
+ advice.before?.should be_true
69
+
70
+ o = @klass.new
71
+ advice.invoke(o, 1)
72
+
73
+ o.value.should == %w(before)
74
+ end
75
+
76
+ it "before_filter advice returns true if input is not negative" do
77
+ advice = @klass.a4r_data[:test][2]
78
+ advice.before_filter?.should be_true
79
+
80
+ o = @klass.new
81
+ advice.invoke(o, 1).should be_true
82
+
83
+ o.value.should == %w(before_filter)
84
+ end
85
+
86
+ it "before_filter advice returns false if input is negative" do
87
+ advice = @klass.a4r_data[:test][2]
88
+
89
+ o = @klass.new
90
+ advice.invoke(o, -1).should be_false
91
+ end
92
+
93
+ it "after advice" do
94
+ advice = @klass.a4r_data[:test][3]
95
+ advice.after?.should be_true
96
+
97
+ o = @klass.new
98
+ advice.invoke(o, 1, 1).should == 100
99
+
100
+ o.value.should == %w(after)
101
+ end
102
+ end
@@ -0,0 +1,17 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe Aspect4r::Model::AdvicesForMethod do
4
+ it "should be able to get advice by name" do
5
+ advices = Aspect4r::Model::AdvicesForMethod.new(:test)
6
+ advice1 = Aspect4r::Model::Advice.new Aspect4r::Model::Advice::BEFORE, :advice_method, :group, :name => :advice1
7
+ advices.add advice1
8
+ advices[:advice1].should == advice1
9
+ end
10
+
11
+ it "should be able to get advice by name String" do
12
+ advices = Aspect4r::Model::AdvicesForMethod.new(:test)
13
+ advice1 = Aspect4r::Model::Advice.new Aspect4r::Model::Advice::BEFORE, :advice_method, :group, :name => :advice1
14
+ advices.add advice1
15
+ advices['advice1'].should == advice1
16
+ end
17
+ end
@@ -1,6 +1,6 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
2
 
3
- require 'aspect4r/classic'
3
+ require 'aspect4r'
4
4
 
5
5
  describe Aspect4r::Classic do
6
6
  it "should work" do
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: 1
4
+ hash: 63
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 7
9
- - 1
10
- version: 0.7.1
8
+ - 8
9
+ - 0
10
+ version: 0.8.0
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-08 00:00:00 -04:00
18
+ date: 2010-06-10 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -34,7 +34,7 @@ dependencies:
34
34
  version: 1.2.9
35
35
  type: :development
36
36
  version_requirements: *id001
37
- description: AOP for ruby - use before_method, after_method and around_method to trim your fat methods and reduce code duplication
37
+ description: AOP for ruby - use before, after and around to trim your fat methods and reduce code duplication
38
38
  email: gcao99@gmail.com
39
39
  executables: []
40
40
 
@@ -71,6 +71,11 @@ files:
71
71
  - lib/aspect4r/model/advices_for_method.rb
72
72
  - lib/aspect4r/model/aspect_data.rb
73
73
  - lib/aspect4r/return_this.rb
74
+ - spec/aspect4r/advice_group_spec.rb
75
+ - spec/aspect4r/advice_on_class_method_spec.rb
76
+ - spec/aspect4r/advice_spec.rb
77
+ - spec/aspect4r/advice_test_spec.rb
78
+ - spec/aspect4r/advices_for_method_spec.rb
74
79
  - spec/aspect4r/after_spec.rb
75
80
  - spec/aspect4r/around_spec.rb
76
81
  - spec/aspect4r/before_spec.rb
@@ -124,6 +129,11 @@ signing_key:
124
129
  specification_version: 3
125
130
  summary: Aspect Oriented Programming for ruby
126
131
  test_files:
132
+ - spec/aspect4r/advice_group_spec.rb
133
+ - spec/aspect4r/advice_on_class_method_spec.rb
134
+ - spec/aspect4r/advice_spec.rb
135
+ - spec/aspect4r/advice_test_spec.rb
136
+ - spec/aspect4r/advices_for_method_spec.rb
127
137
  - spec/aspect4r/after_spec.rb
128
138
  - spec/aspect4r/around_spec.rb
129
139
  - spec/aspect4r/before_spec.rb