aspector 0.12.3 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -10,7 +10,7 @@ group :development do
10
10
  gem "guard-bundler", "~> 0.1.3"
11
11
  gem "guard-rspec", "~> 0.5.2"
12
12
  gem "guard-shell", "~> 0.1.1"
13
- gem 'rb-fsevent', "~> 0.4.3.1", :platforms => [:mri]
13
+ gem 'rb-fsevent'
14
14
  gem 'growl', "~> 1.0.3"
15
15
 
16
16
  gem 'awesome_print'
@@ -1,8 +1,8 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- awesome_print (1.0.2)
5
- coderay (1.0.7)
4
+ awesome_print (1.1.0)
5
+ coderay (1.0.8)
6
6
  diff-lcs (1.1.3)
7
7
  git (1.2.5)
8
8
  growl (1.0.3)
@@ -19,28 +19,28 @@ GEM
19
19
  bundler (~> 1.0)
20
20
  git (>= 1.2.5)
21
21
  rake
22
- method_source (0.7.1)
23
- pry (0.9.9.6)
22
+ method_source (0.8.1)
23
+ pry (0.9.10)
24
24
  coderay (~> 1.0.5)
25
- method_source (~> 0.7.1)
26
- slop (>= 2.4.4, < 3)
27
- pry (0.9.9.6-java)
25
+ method_source (~> 0.8)
26
+ slop (~> 3.3.1)
27
+ pry (0.9.10-java)
28
28
  coderay (~> 1.0.5)
29
- method_source (~> 0.7.1)
30
- slop (>= 2.4.4, < 3)
29
+ method_source (~> 0.8)
30
+ slop (~> 3.3.1)
31
31
  spoon (~> 0.0)
32
- rake (0.9.2.2)
33
- rb-fsevent (0.4.3.1)
34
- rspec (2.10.0)
35
- rspec-core (~> 2.10.0)
36
- rspec-expectations (~> 2.10.0)
37
- rspec-mocks (~> 2.10.0)
38
- rspec-core (2.10.1)
39
- rspec-expectations (2.10.0)
32
+ rake (10.0.3)
33
+ rb-fsevent (0.9.3)
34
+ rspec (2.12.0)
35
+ rspec-core (~> 2.12.0)
36
+ rspec-expectations (~> 2.12.0)
37
+ rspec-mocks (~> 2.12.0)
38
+ rspec-core (2.12.2)
39
+ rspec-expectations (2.12.1)
40
40
  diff-lcs (~> 1.1.3)
41
- rspec-mocks (2.10.1)
42
- ruby-prof (0.11.2)
43
- slop (2.4.4)
41
+ rspec-mocks (2.12.1)
42
+ ruby-prof (0.11.3)
43
+ slop (3.3.3)
44
44
  spoon (0.0.1)
45
45
  thor (0.14.6)
46
46
 
@@ -57,6 +57,6 @@ DEPENDENCIES
57
57
  guard-shell (~> 0.1.1)
58
58
  jeweler (~> 1.6.4)
59
59
  pry
60
- rb-fsevent (~> 0.4.3.1)
60
+ rb-fsevent
61
61
  rspec
62
62
  ruby-prof
data/Rakefile CHANGED
@@ -33,12 +33,3 @@ end
33
33
 
34
34
  task :default => :spec
35
35
 
36
- require 'rake/rdoctask'
37
- Rake::RDocTask.new do |rdoc|
38
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
39
-
40
- rdoc.rdoc_dir = 'rdoc'
41
- rdoc.title = "aspector #{version}"
42
- rdoc.rdoc_files.include('README*')
43
- rdoc.rdoc_files.include('lib/**/*.rb')
44
- end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.12.3
1
+ 0.13.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "aspector"
8
- s.version = "0.12.3"
8
+ s.version = "0.13.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 = "2012-10-09"
12
+ s.date = "2013-01-04"
13
13
  s.description = ""
14
14
  s.email = "gcao99@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -61,6 +61,7 @@ Gem::Specification.new do |s|
61
61
  "performance-tests/method_invocation_test.rb",
62
62
  "performance-tests/raw_test.rb",
63
63
  "performance-tests/test_helper.rb",
64
+ "run_all_examples.sh",
64
65
  "spec/functional/advices_on_private_methods_spec.rb",
65
66
  "spec/functional/aspect_on_eigen_class_spec.rb",
66
67
  "spec/functional/aspect_on_object_spec.rb",
@@ -82,7 +83,7 @@ Gem::Specification.new do |s|
82
83
  s.homepage = "http://github.com/gcao/aspector"
83
84
  s.licenses = ["MIT"]
84
85
  s.require_paths = ["lib"]
85
- s.rubygems_version = "1.8.18"
86
+ s.rubygems_version = "1.8.24"
86
87
  s.summary = "Aspect Oriented Ruby Programming"
87
88
 
88
89
  if s.respond_to? :specification_version then
@@ -96,7 +97,7 @@ Gem::Specification.new do |s|
96
97
  s.add_development_dependency(%q<guard-bundler>, ["~> 0.1.3"])
97
98
  s.add_development_dependency(%q<guard-rspec>, ["~> 0.5.2"])
98
99
  s.add_development_dependency(%q<guard-shell>, ["~> 0.1.1"])
99
- s.add_development_dependency(%q<rb-fsevent>, ["~> 0.4.3.1"])
100
+ s.add_development_dependency(%q<rb-fsevent>, [">= 0"])
100
101
  s.add_development_dependency(%q<growl>, ["~> 1.0.3"])
101
102
  s.add_development_dependency(%q<awesome_print>, [">= 0"])
102
103
  s.add_development_dependency(%q<pry>, [">= 0"])
@@ -108,7 +109,7 @@ Gem::Specification.new do |s|
108
109
  s.add_dependency(%q<guard-bundler>, ["~> 0.1.3"])
109
110
  s.add_dependency(%q<guard-rspec>, ["~> 0.5.2"])
110
111
  s.add_dependency(%q<guard-shell>, ["~> 0.1.1"])
111
- s.add_dependency(%q<rb-fsevent>, ["~> 0.4.3.1"])
112
+ s.add_dependency(%q<rb-fsevent>, [">= 0"])
112
113
  s.add_dependency(%q<growl>, ["~> 1.0.3"])
113
114
  s.add_dependency(%q<awesome_print>, [">= 0"])
114
115
  s.add_dependency(%q<pry>, [">= 0"])
@@ -121,7 +122,7 @@ Gem::Specification.new do |s|
121
122
  s.add_dependency(%q<guard-bundler>, ["~> 0.1.3"])
122
123
  s.add_dependency(%q<guard-rspec>, ["~> 0.5.2"])
123
124
  s.add_dependency(%q<guard-shell>, ["~> 0.1.1"])
124
- s.add_dependency(%q<rb-fsevent>, ["~> 0.4.3.1"])
125
+ s.add_dependency(%q<rb-fsevent>, [">= 0"])
125
126
  s.add_dependency(%q<growl>, ["~> 1.0.3"])
126
127
  s.add_dependency(%q<awesome_print>, [">= 0"])
127
128
  s.add_dependency(%q<pry>, [">= 0"])
@@ -13,7 +13,7 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
13
13
  require 'aspector'
14
14
 
15
15
  class ActiveRecordHooks < Aspector::Base
16
- logger.level = Aspector::Logger::TRACE
16
+ logger.level = Aspector::Logging::TRACE
17
17
 
18
18
  default :private_methods => true
19
19
 
@@ -46,7 +46,7 @@ require 'aspector'
46
46
  class CacheAspect < Aspector::Base
47
47
  default :ttl => 60
48
48
 
49
- around :aspect_arg => true, :method_arg => true do |aspect, method, proxy, &block|
49
+ around :name => 'cache', :aspect_arg => true, :method_arg => true do |aspect, method, proxy, &block|
50
50
  key = method
51
51
  ttl = aspect.options[:ttl]
52
52
 
@@ -58,6 +58,7 @@ a.sell -10
58
58
 
59
59
  ##############################
60
60
 
61
+ =begin
61
62
  class A
62
63
  include DesignByContract
63
64
 
@@ -68,4 +69,5 @@ class A
68
69
  def buy price
69
70
  end
70
71
  end
72
+ =end
71
73
 
@@ -6,20 +6,32 @@ module Aspector
6
6
  AROUND = 3
7
7
  RAW = 4
8
8
 
9
- attr_reader :type, :method_matcher, :options, :advice_block
9
+ attr_reader :type, :method_matcher, :options, :advice_code, :advice_block
10
10
  attr_accessor :index
11
11
 
12
12
  def initialize parent, type, method_matcher, with_method, options = {}, &block
13
13
  @parent = parent
14
14
  @type = type
15
15
  @method_matcher = method_matcher
16
- @with_method = with_method
16
+
17
+ if with_method.is_a? Symbol
18
+ @with_method = with_method
19
+ else
20
+ @advice_code = with_method
21
+ end
22
+
17
23
  @options = options
18
24
  @advice_block = block
19
25
  end
20
26
 
27
+ def name
28
+ @options[:name] || "advice #{index}"
29
+ end
30
+
21
31
  def with_method
22
- @with_method ||= "aop_#{hash.abs}"
32
+ unless @advice_code
33
+ @with_method ||= "aop_#{hash.abs}"
34
+ end
23
35
  end
24
36
 
25
37
  def match? method, context = nil
@@ -49,10 +61,6 @@ module Aspector
49
61
  type == AROUND
50
62
  end
51
63
 
52
- def invoke obj, *args, &block
53
- obj.send with_method, *args, &block
54
- end
55
-
56
64
  def type_name
57
65
  case @type
58
66
  when BEFORE then @options[:skip_if_false] ? "BEFORE_FILTER" : "BEFORE"
@@ -62,9 +70,13 @@ module Aspector
62
70
  else "UNKNOWN?!"
63
71
  end
64
72
  end
73
+
74
+ def use_deferred_logic? logic
75
+ method_matcher.use_deferred_logic? logic
76
+ end
65
77
 
66
78
  def to_s
67
- s = "<advice " << index.to_s << ">: "
79
+ s = "#{name}: "
68
80
  s << type_name
69
81
  s << " [" << @method_matcher.to_s << "] DO "
70
82
  if @with_method
@@ -3,8 +3,8 @@ module Aspector
3
3
 
4
4
  def apply_to_method method
5
5
  each do |aspect_instance|
6
- next if aspect_instance.aop_options[:old_methods_only]
7
- aspect_instance.aop_apply_to_method method, aspect_instance.aop_advices
6
+ next if aspect_instance.options[:old_methods_only]
7
+ aspect_instance.apply_to_method method
8
8
  end
9
9
  end
10
10
 
@@ -3,211 +3,156 @@ require 'erb'
3
3
  module Aspector
4
4
  class Base
5
5
 
6
- attr :aop_options
7
- alias options aop_options
8
-
9
- attr :aop_target
10
- alias target aop_target
11
-
12
- attr :aop_wrapped_methods
6
+ attr :target
7
+ attr :options
13
8
 
14
9
  def initialize target, options = {}
15
- @aop_target = target
10
+ @target = target
16
11
 
17
- default_options = self.class.aop_default_options
12
+ default_options = self.class.default_options
18
13
  if default_options and not default_options.empty?
19
- @aop_options = default_options.merge(options)
14
+ @options = default_options.merge(options)
20
15
  else
21
- @aop_options = options
22
- end
23
-
24
- # @aop_context is where advices will be applied (i.e. where methods are modified), can be different from target
25
- @aop_context = aop_get_context
26
-
27
- @aop_wrapped_methods = {}
28
-
29
- after_initialize
30
- end
31
-
32
- def aop_enable
33
- class << self
34
- def aop_disabled?; end
35
- end
36
-
37
- aop_disabled?
38
- end
39
- alias enable aop_enable
40
-
41
- def aop_disable
42
- class << self
43
- def aop_disabled?; true; end
16
+ @options = options
44
17
  end
45
18
 
46
- aop_disabled?
47
- end
48
- alias disable aop_disable
49
-
50
- def aop_reset_disabled
51
- class << self
52
- remove_method :aop_disabled?
53
- end
54
-
55
- aop_disabled?
56
- end
57
- alias reset_disabled aop_reset_disabled
58
-
59
- def aop_disabled?
19
+ @wrapped_methods = {}
60
20
  end
61
21
 
62
22
  def disabled?
63
- aop_disabled?
23
+ # Enabled by default
64
24
  end
65
25
 
66
- def aop_logger
67
- return @aop_logger if @aop_logger
26
+ def logger
27
+ return @logger if @logger
68
28
 
69
- @aop_logger = Logging.get_logger(self)
70
- @aop_logger.level = self.class.logger.level
71
- @aop_logger
29
+ @logger = Logging.get_logger(self)
30
+ @logger.level = self.class.logger.level
31
+ @logger
72
32
  end
73
- alias logger aop_logger
74
33
 
75
- def aop_advices
76
- self.class.aop_advices
34
+ def advices
35
+ self.class.advices
77
36
  end
78
- alias advices aop_advices
79
-
80
- def aop_apply
81
- before_apply
82
- aop_invoke_deferred_logics
83
- aop_define_methods_for_advice_blocks
84
- aop_add_to_instances unless @aop_options[:old_methods_only]
85
- aop_apply_to_methods unless @aop_options[:new_methods_only]
86
- aop_add_method_hooks unless @aop_options[:old_methods_only]
87
- after_apply
37
+
38
+ def apply
39
+ invoke_deferred_logics
40
+ define_methods_for_advice_blocks
41
+ add_to_instances unless @options[:old_methods_only]
42
+ apply_to_methods unless @options[:new_methods_only]
43
+ add_method_hooks unless @options[:old_methods_only]
44
+ # TODO: clear deferred logic results if they are not used in any advice
88
45
  end
89
- alias apply aop_apply
90
46
 
91
- def aop_apply_to_methods
92
- advices = aop_advices
47
+ def apply_to_methods
48
+ return if advices.empty?
93
49
 
94
50
  # If method/methods option is set and all are String or Symbol, apply to those only, instead of
95
51
  # iterating through all methods
96
- methods = [@aop_options[:method] || @aop_options[:methods]]
52
+ methods = [@options[:method] || @options[:methods]]
97
53
  methods.compact!
98
54
  methods.flatten!
99
55
 
100
56
  if not methods.empty? and methods.all?{|method| method.is_a? String or method.is_a? Symbol }
101
57
  methods.each do |method|
102
- aop_apply_to_method(method.to_s, advices)
58
+ apply_to_method(method.to_s)
103
59
  end
104
60
 
105
61
  return
106
62
  end
107
63
 
108
- @aop_context.public_instance_methods.each do |method|
109
- aop_apply_to_method(method.to_s, advices, :public)
64
+ context.public_instance_methods.each do |method|
65
+ apply_to_method(method.to_s, :public)
110
66
  end
111
67
 
112
- @aop_context.protected_instance_methods.each do |method|
113
- aop_apply_to_method(method.to_s, advices, :protected)
68
+ context.protected_instance_methods.each do |method|
69
+ apply_to_method(method.to_s, :protected)
114
70
  end
115
71
 
116
- if @aop_options[:private_methods]
117
- @aop_context.private_instance_methods.each do |method|
118
- aop_apply_to_method(method.to_s, advices, :private)
72
+ if @options[:private_methods]
73
+ context.private_instance_methods.each do |method|
74
+ apply_to_method(method.to_s, :private)
119
75
  end
120
76
  end
121
77
  end
122
78
 
123
- def aop_apply_to_method method, advices, scope = nil
124
- advices = aop_filter_advices advices, method
125
- return if advices.empty?
79
+ def apply_to_method method, scope = nil
80
+ filtered_advices = filter_advices advices, method
81
+ return if filtered_advices.empty?
126
82
 
127
- aop_logger.log Logging::DEBUG, 'apply-to-method', method
128
- before_apply_to_method method, advices
83
+ logger.log Logging::DEBUG, 'apply-to-method', method
129
84
 
130
85
  scope ||=
131
- if @aop_context.private_instance_methods.include?(RUBY_VERSION.index('1.9') ? method.to_sym : method.to_s)
86
+ if context.private_instance_methods.include?(RUBY_VERSION.index('1.9') ? method.to_sym : method.to_s)
132
87
  :private
133
- elsif @aop_context.protected_instance_methods.include?(RUBY_VERSION.index('1.9') ? method.to_sym : method.to_s)
88
+ elsif context.protected_instance_methods.include?(RUBY_VERSION.index('1.9') ? method.to_sym : method.to_s)
134
89
  :protected
135
90
  else
136
91
  :public
137
92
  end
138
93
 
139
- aop_recreate_method method, advices, scope
140
-
141
- after_apply_to_method method, advices
94
+ recreate_method method, filtered_advices, scope
142
95
  end
143
96
 
144
- protected
145
-
146
- # Hook method that runs after an aspect is instantiated
147
- def after_initialize
148
- end
149
-
150
- # Hook method that runs before an aspect is applied
151
- def before_apply
152
- end
153
-
154
- # Hook method that runs after an aspect is applied
155
- def after_apply
156
- end
157
-
158
- def before_apply_to_method method, advices
159
- end
97
+ private
160
98
 
161
- def after_apply_to_method method, advices
99
+ def deferred_logic_results logic
100
+ @deferred_logic_results[logic]
162
101
  end
163
102
 
164
- private
165
-
166
- def aop_deferred_logic_results logic
167
- @aop_deferred_logic_results[logic]
103
+ def get_wrapped_method_of method
104
+ @wrapped_methods[method]
168
105
  end
169
106
 
170
- def aop_get_context
171
- return @aop_target if @aop_target.is_a?(Module) and not @aop_options[:class_methods]
107
+ # context is where advices will be applied (i.e. where methods are modified), can be different from target
108
+ def context
109
+ return @target if @target.is_a?(Module) and not @options[:class_methods]
172
110
 
173
- class << @aop_target
111
+ class << @target
174
112
  self
175
113
  end
176
114
  end
177
115
 
178
- def aop_invoke_deferred_logics
179
- return unless (logics = self.class.send :aop_deferred_logics)
116
+ def invoke_deferred_logics
117
+ return unless (logics = self.class.send :_deferred_logics_)
180
118
 
181
- @aop_deferred_logic_results ||= {}
182
119
  logics.each do |logic|
183
- @aop_deferred_logic_results[logic] = logic.apply @aop_context, self
120
+ result = logic.apply context, self
121
+ if advices.detect {|advice| advice.use_deferred_logic? logic }
122
+ @deferred_logic_results ||= {}
123
+ @deferred_logic_results[logic] = result
124
+ end
184
125
  end
185
126
  end
186
127
 
187
- def aop_define_methods_for_advice_blocks
188
- aop_advices.each do |advice|
128
+ def define_methods_for_advice_blocks
129
+ advices.each do |advice|
189
130
  next if advice.raw?
190
131
  next unless advice.advice_block
191
- @aop_context.send :define_method, advice.with_method, advice.advice_block
192
- @aop_context.send :private, advice.with_method
132
+ context.send :define_method, advice.with_method, advice.advice_block
133
+ context.send :private, advice.with_method
193
134
  end
194
135
  end
195
136
 
196
- def aop_add_to_instances
197
- aspect_instances = @aop_context.instance_variable_get(:@aop_instances)
137
+ def add_to_instances
138
+ return if advices.empty?
139
+
140
+ aspect_instances = context.instance_variable_get(:@aop_instances)
198
141
  unless aspect_instances
199
142
  aspect_instances = AspectInstances.new
200
- @aop_context.instance_variable_set(:@aop_instances, aspect_instances)
143
+ context.instance_variable_set(:@aop_instances, aspect_instances)
201
144
  end
202
145
  aspect_instances << self
203
146
  end
204
147
 
205
- def aop_add_method_hooks
206
- if @aop_options[:class_methods]
207
- return unless @aop_target.is_a?(Module)
148
+ def add_method_hooks
149
+ return if advices.empty?
150
+
151
+ if @options[:class_methods]
152
+ return unless @target.is_a?(Module)
208
153
 
209
- eigen_class = class << @aop_target; self; end
210
- orig_singleton_method_added = @aop_target.method(:singleton_method_added)
154
+ eigen_class = class << @target; self; end
155
+ orig_singleton_method_added = @target.method(:singleton_method_added)
211
156
 
212
157
  eigen_class.send :define_method, :singleton_method_added do |method|
213
158
  aop_singleton_method_added(method) do
@@ -215,10 +160,10 @@ module Aspector
215
160
  end
216
161
  end
217
162
  else
218
- eigen_class = class << @aop_target; self; end
163
+ eigen_class = class << @target; self; end
219
164
 
220
- if @aop_target.is_a? Module
221
- orig_method_added = @aop_target.method(:method_added)
165
+ if @target.is_a? Module
166
+ orig_method_added = @target.method(:method_added)
222
167
  else
223
168
  orig_method_added = eigen_class.method(:method_added)
224
169
  end
@@ -231,23 +176,23 @@ module Aspector
231
176
  end
232
177
  end
233
178
 
234
- def aop_filter_advices advices, method
179
+ def filter_advices advices, method
235
180
  advices.select do |advice|
236
181
  advice.match?(method, self)
237
182
  end
238
183
  end
239
184
 
240
- def aop_recreate_method method, advices, scope
241
- @aop_context.instance_variable_set(:@aop_creating_method, true)
185
+ def recreate_method method, advices, scope
186
+ context.instance_variable_set(:@aop_creating_method, true)
242
187
 
243
188
  raw_advices = advices.select {|advice| advice.raw? }
244
189
 
245
190
  if raw_advices.size > 0
246
191
  raw_advices.each do |advice|
247
- if @aop_target.is_a? Module and not @aop_options[:class_methods]
248
- @aop_target.class_exec method, self, &advice.advice_block
192
+ if @target.is_a? Module and not @options[:class_methods]
193
+ @target.class_exec method, self, &advice.advice_block
249
194
  else
250
- @aop_target.instance_exec method, self, &advice.advice_block
195
+ @target.instance_exec method, self, &advice.advice_block
251
196
  end
252
197
  end
253
198
 
@@ -255,11 +200,11 @@ module Aspector
255
200
  end
256
201
 
257
202
  begin
258
- @aop_wrapped_methods[method] = @aop_context.instance_method(method)
203
+ @wrapped_methods[method] = context.instance_method(method)
259
204
  rescue
260
205
  # ignore undefined method error
261
- if @aop_options[:old_methods_only]
262
- aop_logger.log Logging::WARN, 'method-not-found', method
206
+ if @options[:old_methods_only]
207
+ logger.log Logging::WARN, 'method-not-found', method
263
208
  end
264
209
 
265
210
  return
@@ -271,81 +216,87 @@ module Aspector
271
216
 
272
217
  (around_advices.size - 1).downto(1) do |i|
273
218
  advice = around_advices[i]
274
- aop_recreate_method_with_advices method, [], [], advice
219
+ recreate_method_with_advices method, [], [], advice
275
220
  end
276
221
 
277
- aop_recreate_method_with_advices method, before_advices, after_advices, around_advices.first, true
222
+ recreate_method_with_advices method, before_advices, after_advices, around_advices.first, true
278
223
 
279
- @aop_context.send scope, method if scope != :public
224
+ context.send scope, method if scope != :public
280
225
  ensure
281
- @aop_context.send :remove_instance_variable, :@aop_creating_method
226
+ context.send :remove_instance_variable, :@aop_creating_method
282
227
  end
283
228
 
284
- def aop_recreate_method_with_advices method, before_advices, after_advices, around_advice, is_outermost = false
229
+ def recreate_method_with_advices method, before_advices, after_advices, around_advice, is_outermost = false
285
230
  aspect = self
286
231
 
287
232
  code = METHOD_TEMPLATE.result(binding)
288
- aspect.aop_logger.log Logging::DEBUG, 'generate-code', method, code
289
- @aop_context.class_eval code, __FILE__, __LINE__ + 4
233
+ aspect.logger.log Logging::DEBUG, 'generate-code', method, code
234
+ context.class_eval code, __FILE__, __LINE__ + 4
290
235
  end
291
236
 
292
237
  METHOD_TEMPLATE = ERB.new <<-CODE, nil, "%<>"
293
238
 
294
- orig_method = aspect.aop_wrapped_methods['<%= method %>']
239
+ orig_method = aspect.send :get_wrapped_method_of, '<%= method %>'
295
240
  % if around_advice
296
241
  wrapped_method = instance_method(:<%= method %>)
297
242
  % end
298
243
 
299
244
  define_method :<%= method %> do |*args, &block|
300
- % if aop_logger.visible?(Logging::TRACE)
301
- aspect.aop_logger.log <%= Logging::TRACE %>, '<%= method %>', 'enter-generated-method'
245
+ % if logger.visible?(Logging::TRACE)
246
+ aspect.logger.log <%= Logging::TRACE %>, '<%= method %>', 'enter-generated-method'
302
247
  % end
303
248
 
304
- if aspect.aop_disabled?
305
- % if aop_logger.visible?(Logging::TRACE)
306
- aspect.aop_logger.log <%= Logging::TRACE %>, '<%= method %>', 'exit--generated-method'
249
+ if aspect.disabled?
250
+ % if logger.visible?(Logging::TRACE)
251
+ aspect.logger.log <%= Logging::TRACE %>, '<%= method %>', 'exit--generated-method'
307
252
  % end
308
253
  return orig_method.bind(self).call(*args, &block)
309
254
  end
310
255
 
311
256
  % if is_outermost
312
- result = catch(:aop_returns) do
257
+ result = catch(:returns) do
313
258
  % end
314
259
 
315
- % unless before_advices.empty?
316
- # Before advices
317
- % end
318
260
  % before_advices.each do |advice|
319
- % if aop_logger.visible?(Logging::TRACE)
320
- aspect.aop_logger.log <%= Logging::TRACE %>, '<%= method %>', 'before-invoke-advice', '<advice <%= advice.index %>>'
261
+ # Before advice: <%= advice.name %>
262
+ % if logger.visible?(Logging::TRACE)
263
+ aspect.logger.log <%= Logging::TRACE %>, '<%= method %>', 'before-invoke-advice', '<%= advice.name %>'
321
264
  % end
265
+ % if advice.advice_code
266
+ result = (<%= advice.advice_code %>)
267
+ % else
322
268
  result = <%= advice.with_method %> <%
323
269
  if advice.options[:aspect_arg] %>aspect, <% end %><%
324
270
  if advice.options[:method_arg] %>'<%= method %>', <% end
325
271
  %>*args
326
- % if aop_logger.visible?(Logging::TRACE)
327
- aspect.aop_logger.log <%= Logging::TRACE %>, '<%= method %>', 'after--invoke-advice', '<advice <%= advice.index %>>'
272
+ % end
273
+ % if logger.visible?(Logging::TRACE)
274
+ aspect.logger.log <%= Logging::TRACE %>, '<%= method %>', 'after--invoke-advice', '<%= advice.name %>'
328
275
  % end
329
276
  % if advice.options[:skip_if_false]
330
277
  unless result
331
- % if aop_logger.visible?(Logging::TRACE)
332
- aspect.aop_logger.log <%= Logging::TRACE %>, '<%= method %>', 'exit-method-due-to-before-filter', '<advice <%= advice.index %>>'
278
+ % if logger.visible?(Logging::TRACE)
279
+ aspect.logger.log <%= Logging::TRACE %>, '<%= method %>', 'exit-method-due-to-before-filter', '<%= advice.name %>'
333
280
  % end
334
281
  return
335
- end
282
+ end
336
283
  % end
337
284
  % end
338
285
 
339
286
  % if around_advice
340
- # Around advice
341
- % if aop_logger.visible?(Logging::TRACE)
342
- aspect.aop_logger.log <%= Logging::TRACE %>, '<%= method %>', 'before-invoke-advice', '<advice <%= around_advice.index %>>'
287
+ # Around advice: <%= around_advice.name %>
288
+ % if logger.visible?(Logging::TRACE)
289
+ aspect.logger.log <%= Logging::TRACE %>, '<%= method %>', 'before-invoke-advice', '<%= around_advice.name %>'
343
290
  % end
344
- % if aop_logger.visible?(Logging::TRACE)
291
+ % if around_advice.advice_code
292
+ result = (<%= around_advice.advice_code.gsub('INVOKE_PROXY', 'wrapped_method.bind(self).call(*args, &block)') %>)
293
+
294
+ % else
295
+ % if logger.visible?(Logging::TRACE)
345
296
  proxy = lambda do |*args, &block|
346
- aspect.aop_logger.log <%= Logging::TRACE %>, '<%= method %>', 'before-invoke-proxy'
297
+ aspect.logger.log <%= Logging::TRACE %>, '<%= method %>', 'before-invoke-proxy'
347
298
  res = wrapped_method.bind(self).call *args, &block
348
- aspect.aop_logger.log <%= Logging::TRACE %>, '<%= method %>', 'after--invoke-proxy'
299
+ aspect.logger.log <%= Logging::TRACE %>, '<%= method %>', 'after--invoke-proxy'
349
300
  res
350
301
  end
351
302
  result = <%= around_advice.with_method %> <%
@@ -358,29 +309,33 @@ module Aspector
358
309
  if around_advice.options[:method_arg] %>'<%= method %>', <% end
359
310
  %>wrapped_method.bind(self), *args, &block
360
311
  % end
361
- % if aop_logger.visible?(Logging::TRACE)
362
- aspect.aop_logger.log <%= Logging::TRACE %>, '<%= method %>', 'after--invoke-advice', '<advice <%= around_advice.index %>>'
312
+ % end
313
+ % if logger.visible?(Logging::TRACE)
314
+ aspect.logger.log <%= Logging::TRACE %>, '<%= method %>', 'after--invoke-advice', '<%= around_advice.name %>'
363
315
  % end
364
316
 
365
317
  % else
366
318
 
367
319
  # Invoke original method
368
- % if aop_logger.visible?(Logging::TRACE)
369
- aspect.aop_logger.log <%= Logging::TRACE %>, '<%= method %>', 'before-wrapped-method'
320
+ % if logger.visible?(Logging::TRACE)
321
+ aspect.logger.log <%= Logging::TRACE %>, '<%= method %>', 'before-wrapped-method'
370
322
  % end
371
323
  result = orig_method.bind(self).call *args, &block
372
- % if aop_logger.visible?(Logging::TRACE)
373
- aspect.aop_logger.log <%= Logging::TRACE %>, '<%= method %>', 'after--wrapped-method'
324
+ % if logger.visible?(Logging::TRACE)
325
+ aspect.logger.log <%= Logging::TRACE %>, '<%= method %>', 'after--wrapped-method'
374
326
  % end
375
327
 
376
328
  % end
377
329
 
378
330
  % unless after_advices.empty?
379
- # After advices
380
331
  % after_advices.each do |advice|
381
- % if aop_logger.visible?(Logging::TRACE)
382
- aspect.aop_logger.log <%= Logging::TRACE %>, '<%= method %>', 'before-invoke-advice', '<advice <%= advice.index %>>'
332
+ # After advice: <%= advice.name %>
333
+ % if logger.visible?(Logging::TRACE)
334
+ aspect.logger.log <%= Logging::TRACE %>, '<%= method %>', 'before-invoke-advice', '<%= advice.name %>'
383
335
  % end
336
+ % if advice.advice_code
337
+ result = (<%= advice.advice_code %>)
338
+ % else
384
339
  % if advice.options[:result_arg]
385
340
  result = <%= advice.with_method %> <%
386
341
  if advice.options[:aspect_arg] %>aspect, <% end %><%
@@ -393,8 +348,9 @@ module Aspector
393
348
  if advice.options[:method_arg] %>'<%= method %>', <% end
394
349
  %>*args
395
350
  % end
396
- % if aop_logger.visible?(Logging::TRACE)
397
- aspect.aop_logger.log <%= Logging::TRACE %>, '<%= method %>', 'after--invoke-advice', '<advice <%= advice.index %>>'
351
+ % end
352
+ % if logger.visible?(Logging::TRACE)
353
+ aspect.logger.log <%= Logging::TRACE %>, '<%= method %>', 'after--invoke-advice', '<%= advice.name %>'
398
354
  % end
399
355
  % end
400
356
  % end
@@ -405,8 +361,8 @@ module Aspector
405
361
  end # end of catch
406
362
  % end
407
363
 
408
- % if aop_logger.visible?(Logging::TRACE)
409
- aspect.aop_logger.log <%= Logging::TRACE %>, '<%= method %>', 'exit--generated-method'
364
+ % if logger.visible?(Logging::TRACE)
365
+ aspect.logger.log <%= Logging::TRACE %>, '<%= method %>', 'exit--generated-method'
410
366
  % end
411
367
  result
412
368
  end
@@ -3,144 +3,120 @@ module Aspector
3
3
  module ClassMethods
4
4
  ::Aspector::Base.extend(self)
5
5
 
6
- def aop_enable
7
- aop_logger.log Logging::INFO, 'enable-aspect'
8
- send :define_method, :aop_disabled? do
6
+ def enable
7
+ logger.log Logging::INFO, 'enable-aspect'
8
+ send :define_method, :disabled? do
9
9
  end
10
10
 
11
11
  nil
12
12
  end
13
- alias enable aop_enable
14
13
 
15
- def aop_disable
16
- aop_logger.log Logging::INFO, 'disable-aspect'
17
- send :define_method, :aop_disabled? do
14
+ def disable
15
+ logger.log Logging::INFO, 'disable-aspect'
16
+ send :define_method, :disabled? do
18
17
  true
19
18
  end
20
19
 
21
20
  nil
22
21
  end
23
- alias disable aop_disable
24
22
 
25
23
  # if ENV["ASPECTOR_LOGGER"] is set, use it
26
24
  # else try to load logem and use Logem::Logger
27
25
  # else use built in logger
28
- def aop_logger
29
- @aop_logger ||= Logging.get_logger(self)
26
+ def logger
27
+ @logger ||= Logging.get_logger(self)
30
28
  end
31
- alias logger aop_logger
32
29
 
33
- def aop_logger= logger
34
- @aop_logger = logger
30
+ def advices
31
+ @advices ||= []
35
32
  end
36
- alias logger= aop_logger=
37
33
 
38
- def aop_advices
39
- @aop_advices ||= []
34
+ def default_options
35
+ @default_options ||= {}
40
36
  end
41
- alias advices aop_advices
42
37
 
43
- def aop_default_options
44
- @aop_default_options ||= {}
45
- end
46
- alias default_options aop_default_options
47
-
48
- def aop_apply target, *rest
38
+ def apply target, *rest
49
39
  options = rest.last.is_a?(Hash) ? rest.pop : {}
50
40
 
51
41
  targets = rest.unshift target
52
42
  result = targets.map do |target|
53
- aop_logger.log Logging::INFO, 'apply', target, options.inspect
43
+ logger.log Logging::INFO, 'apply', target, options.inspect
54
44
  aspect_instance = new(target, options)
55
- aspect_instance.send :aop_apply
45
+ aspect_instance.send :apply
56
46
  aspect_instance
57
47
  end
58
48
 
59
49
  result.size == 1 ? result.first : result
60
50
  end
61
- alias apply aop_apply
51
+
52
+ private
62
53
 
63
- def aop_default options
64
- if @aop_default_options
65
- @aop_default_options.merge! options
54
+ def default options
55
+ if @default_options
56
+ @default_options.merge! options
66
57
  else
67
- @aop_default_options = options
58
+ @default_options = options
68
59
  end
69
60
  end
70
- alias default aop_default
71
61
 
72
- def aop_before *methods, &block
73
- aop_advices << advice = aop_create_advice(Aspector::AdviceMetadata::BEFORE, self, methods, &block)
74
- advice.index = aop_advices.size
75
- aop_logger.log Logging::INFO, 'define-advice', advice
62
+ def before *methods, &block
63
+ advices << advice = _create_advice_(Aspector::AdviceMetadata::BEFORE, self, methods, &block)
64
+ advice.index = advices.size
65
+ logger.log Logging::INFO, 'define-advice', advice
76
66
  advice
77
67
  end
78
- alias before aop_before
79
68
 
80
- def aop_before_filter *methods, &block
81
- aop_advices << advice = aop_create_advice(Aspector::AdviceMetadata::BEFORE_FILTER, self, methods, &block)
82
- advice.index = aop_advices.size
83
- aop_logger.log Logging::INFO, 'define-advice', advice
69
+ def before_filter *methods, &block
70
+ advices << advice = _create_advice_(Aspector::AdviceMetadata::BEFORE_FILTER, self, methods, &block)
71
+ advice.index = advices.size
72
+ logger.log Logging::INFO, 'define-advice', advice
84
73
  advice
85
74
  end
86
- alias before_filter aop_before_filter
87
75
 
88
- def aop_after *methods, &block
89
- aop_advices << advice = aop_create_advice(Aspector::AdviceMetadata::AFTER, self, methods, &block)
90
- advice.index = aop_advices.size
91
- aop_logger.log Logging::INFO, 'define-advice', advice
76
+ def after *methods, &block
77
+ advices << advice = _create_advice_(Aspector::AdviceMetadata::AFTER, self, methods, &block)
78
+ advice.index = advices.size
79
+ logger.log Logging::INFO, 'define-advice', advice
92
80
  advice
93
81
  end
94
- alias after aop_after
95
82
 
96
- def aop_around *methods, &block
97
- aop_advices << advice = aop_create_advice(Aspector::AdviceMetadata::AROUND, self, methods, &block)
98
- advice.index = aop_advices.size
99
- aop_logger.log Logging::INFO, 'define-advice', advice
83
+ def around *methods, &block
84
+ advices << advice = _create_advice_(Aspector::AdviceMetadata::AROUND, self, methods, &block)
85
+ advice.index = advices.size
86
+ logger.log Logging::INFO, 'define-advice', advice
100
87
  advice
101
88
  end
102
- alias around aop_around
103
89
 
104
- def aop_raw *methods, &block
105
- aop_advices << advice = aop_create_advice(Aspector::AdviceMetadata::RAW, self, methods, &block)
106
- advice.index = aop_advices.size
107
- aop_logger.log Logging::INFO, 'define-advice', advice
90
+ def raw *methods, &block
91
+ advices << advice = _create_advice_(Aspector::AdviceMetadata::RAW, self, methods, &block)
92
+ advice.index = advices.size
93
+ logger.log Logging::INFO, 'define-advice', advice
108
94
  advice
109
95
  end
110
- alias raw aop_raw
111
96
 
112
- def aop_target code = nil, &block
113
- return unless code or block_given?
97
+ def target code = nil, &block
98
+ raise ArgumentError.new('No code or block is passed.') unless code or block_given?
114
99
 
115
100
  logic = DeferredLogic.new(code || block)
116
- aop_deferred_logics << logic
101
+ _deferred_logics_ << logic
117
102
  logic
118
103
  end
119
- alias target aop_target
120
104
 
121
- def aop_options
105
+ def options
122
106
  DeferredOption.new
123
107
  end
124
- alias options aop_options
125
-
126
- private
127
108
 
128
- def aop_deferred_logics
129
- @aop_deferred_logics ||= []
109
+ def _deferred_logics_
110
+ @deferred_logics ||= []
130
111
  end
131
112
 
132
- def aop_create_advice meta_data, klass_or_module, *methods, &block
113
+ def _create_advice_ meta_data, klass_or_module, *methods, &block
133
114
  methods.flatten!
134
115
 
135
116
  options = meta_data.default_options.clone
136
117
  options.merge!(methods.pop) if methods.last.is_a? Hash
137
118
  options.merge!(meta_data.mandatory_options)
138
119
 
139
- # Convert symbols to strings to avoid inconsistencies
140
- methods.size.times do |i|
141
- methods[i] = methods[i].to_s if methods[i].is_a? Symbol
142
- end
143
-
144
120
  if meta_data.advice_type == Aspector::Advice::RAW
145
121
  raise "Bad raw advice - code block is required" unless block_given?
146
122
  with_method = nil
@@ -148,7 +124,12 @@ module Aspector
148
124
  with_method = methods.pop unless block_given?
149
125
  end
150
126
 
151
- methods << aop_options[:method] << aop_options[:methods] if methods.empty?
127
+ # Convert symbols to strings to avoid inconsistencies
128
+ methods.size.times do |i|
129
+ methods[i] = methods[i].to_s if methods[i].is_a? Symbol
130
+ end
131
+
132
+ methods << DeferredOption.new(:method) << DeferredOption.new(:methods) if methods.empty?
152
133
 
153
134
  Aspector::Advice.new(self,
154
135
  meta_data.advice_type,
@@ -2,14 +2,22 @@ module Aspector
2
2
  class DeferredOption
3
3
 
4
4
  attr_reader :key
5
+
6
+ def initialize key = nil
7
+ @key = key
8
+ end
5
9
 
6
10
  def [] key
7
11
  @key = key
8
12
  self
9
13
  end
10
14
 
11
- def inspect
12
- "options[:#{key}]"
15
+ def to_s
16
+ if key
17
+ "options[#{key.inspect}]"
18
+ else
19
+ "options[?]"
20
+ end
13
21
  end
14
22
  end
15
23
  end
@@ -29,7 +29,7 @@ module Aspector
29
29
  def log_prefix level
30
30
  s = "#{Time.now} | Aspector | " << level_to_string(level) << " | "
31
31
  if context.is_a? Aspector::Base
32
- s << context.class.to_s << " | " << context.aop_target.to_s << " | "
32
+ s << context.class.to_s << " | " << context.target.to_s << " | "
33
33
  else
34
34
  s << context.to_s << " | "
35
35
  end
@@ -15,13 +15,13 @@ module Aspector
15
15
  when Symbol
16
16
  item.to_s == method
17
17
  when DeferredLogic
18
- value = aspect.aop_deferred_logic_results(item)
18
+ value = aspect.deferred_logic_results(item)
19
19
  if value
20
20
  new_matcher = MethodMatcher.new(value)
21
21
  new_matcher.match?(method)
22
22
  end
23
23
  when DeferredOption
24
- value = aspect.send(:aop_options)[item.key]
24
+ value = aspect.options[item.key]
25
25
  if value
26
26
  new_matcher = MethodMatcher.new(value)
27
27
  new_matcher.match?(method)
@@ -29,6 +29,12 @@ module Aspector
29
29
  end
30
30
  end
31
31
  end
32
+
33
+ def use_deferred_logic? logic
34
+ @match_data.detect do |item|
35
+ logic == item
36
+ end
37
+ end
32
38
 
33
39
  def to_s
34
40
  @match_data.map {|item| item.inspect }.join ", "
@@ -8,23 +8,23 @@ module Aspector
8
8
 
9
9
  aspect = Aspector(options, &block)
10
10
 
11
- aspect.aop_apply(self) if self.is_a? Module
12
- args.each {|target| aspect.aop_apply(target) }
11
+ aspect.apply(self) if self.is_a? Module
12
+ args.each {|target| aspect.apply(target) }
13
13
 
14
14
  aspect
15
15
  end
16
16
 
17
17
  def Aspector options = {}, &block
18
18
  klass = Class.new(Aspector::Base)
19
- klass.aop_default options
19
+ klass.class_eval { default options }
20
20
  klass.class_eval &block if block_given?
21
21
  klass
22
22
  end
23
23
 
24
- def aop_returns value = nil
25
- throw :aop_returns, value
24
+ def returns value = nil
25
+ throw :returns, value
26
26
  end
27
- alias :returns :aop_returns
27
+ alias :returns :returns
28
28
 
29
29
  end
30
30
  end
@@ -0,0 +1,12 @@
1
+ #!/bin/sh
2
+
3
+ for f in examples/*
4
+ do
5
+ echo
6
+ echo === Running $f ===
7
+ echo
8
+ ruby $f
9
+ echo
10
+ echo
11
+ done
12
+
@@ -20,6 +20,23 @@ describe "Around advices" do
20
20
  obj.value.should == %w"before test after"
21
21
  end
22
22
 
23
+ it "logic in String" do
24
+ klass = create_test_class
25
+
26
+ aspector(klass) do
27
+ around :test, <<-CODE
28
+ value << "before"
29
+ result = INVOKE_PROXY
30
+ value << "after"
31
+ result
32
+ CODE
33
+ end
34
+
35
+ obj = klass.new
36
+ obj.test
37
+ obj.value.should == %w"before test after"
38
+ end
39
+
23
40
  it "logic in block" do
24
41
  klass = create_test_class
25
42
 
@@ -6,11 +6,11 @@ describe "Aspector::Base class methods" do
6
6
  before :test, :do_before
7
7
  end
8
8
 
9
- klass.send(:aop_advices).size.should == 1
10
- advice = klass.send(:aop_advices).first
9
+ klass.send(:advices).size.should == 1
10
+ advice = klass.send(:advices).first
11
11
  advice.before?.should be_true
12
12
  advice.options[:skip_if_false].should_not be_true
13
- advice.with_method.should == 'do_before'
13
+ advice.with_method.should == :do_before
14
14
  end
15
15
 
16
16
  it "before_filter" do
@@ -18,11 +18,11 @@ describe "Aspector::Base class methods" do
18
18
  before_filter :test, :do_before
19
19
  end
20
20
 
21
- klass.send(:aop_advices).size.should == 1
22
- advice = klass.send(:aop_advices).first
21
+ klass.send(:advices).size.should == 1
22
+ advice = klass.send(:advices).first
23
23
  advice.before?.should be_true
24
24
  advice.options[:skip_if_false].should be_true
25
- advice.with_method.should == 'do_before'
25
+ advice.with_method.should == :do_before
26
26
  end
27
27
 
28
28
  end
@@ -6,7 +6,7 @@ describe "Aspector::Base" do
6
6
  default :test => 'value'
7
7
  end
8
8
 
9
- aspect.send(:aop_default_options)[:test].should == 'value'
9
+ aspect.send(:default_options)[:test].should == 'value'
10
10
  end
11
11
 
12
12
  it "#options is used to access options set when aspect is applied" do
@@ -29,6 +29,18 @@ describe "Before advices" do
29
29
  obj.value.should == %w"do_block test"
30
30
  end
31
31
 
32
+ it "logic in String" do
33
+ klass = create_test_class
34
+
35
+ aspector(klass) do
36
+ before :test, "value << 'do_block'"
37
+ end
38
+
39
+ obj = klass.new
40
+ obj.test
41
+ obj.value.should == %w"do_block test"
42
+ end
43
+
32
44
  it "new methods should work" do
33
45
  klass = Class.new do
34
46
  aspector do
@@ -23,7 +23,7 @@ module Aspector
23
23
  matcher = MethodMatcher.new(logic)
24
24
 
25
25
  aspect = mock(Aspector::Base)
26
- aspect.should_receive(:aop_deferred_logic_results).with(logic).once.and_return(/test/)
26
+ aspect.should_receive(:deferred_logic_results).with(logic).once.and_return(/test/)
27
27
 
28
28
  matcher.match?('test', aspect).should_not be_nil
29
29
  end
@@ -33,7 +33,7 @@ module Aspector
33
33
  matcher = MethodMatcher.new(option)
34
34
 
35
35
  aspect = mock(Aspector::Base)
36
- aspect.should_receive(:aop_options).once.and_return({:methods => /test/})
36
+ aspect.should_receive(:options).once.and_return({:methods => /test/})
37
37
 
38
38
  matcher.match?('test', aspect).should_not be_nil
39
39
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aspector
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.3
4
+ version: 0.13.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-09 00:00:00.000000000 Z
12
+ date: 2013-01-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -128,17 +128,17 @@ dependencies:
128
128
  requirement: !ruby/object:Gem::Requirement
129
129
  none: false
130
130
  requirements:
131
- - - ~>
131
+ - - ! '>='
132
132
  - !ruby/object:Gem::Version
133
- version: 0.4.3.1
133
+ version: '0'
134
134
  type: :development
135
135
  prerelease: false
136
136
  version_requirements: !ruby/object:Gem::Requirement
137
137
  none: false
138
138
  requirements:
139
- - - ~>
139
+ - - ! '>='
140
140
  - !ruby/object:Gem::Version
141
- version: 0.4.3.1
141
+ version: '0'
142
142
  - !ruby/object:Gem::Dependency
143
143
  name: growl
144
144
  requirement: !ruby/object:Gem::Requirement
@@ -239,6 +239,7 @@ files:
239
239
  - performance-tests/method_invocation_test.rb
240
240
  - performance-tests/raw_test.rb
241
241
  - performance-tests/test_helper.rb
242
+ - run_all_examples.sh
242
243
  - spec/functional/advices_on_private_methods_spec.rb
243
244
  - spec/functional/aspect_on_eigen_class_spec.rb
244
245
  - spec/functional/aspect_on_object_spec.rb
@@ -271,7 +272,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
271
272
  version: '0'
272
273
  segments:
273
274
  - 0
274
- hash: 117622238641443179
275
+ hash: -866779375770691873
275
276
  required_rubygems_version: !ruby/object:Gem::Requirement
276
277
  none: false
277
278
  requirements:
@@ -280,7 +281,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
280
281
  version: '0'
281
282
  requirements: []
282
283
  rubyforge_project:
283
- rubygems_version: 1.8.18
284
+ rubygems_version: 1.8.24
284
285
  signing_key:
285
286
  specification_version: 3
286
287
  summary: Aspect Oriented Ruby Programming