aspector 0.12.1 → 0.12.2

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.12.1
1
+ 0.12.2
data/aspector.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "aspector"
8
- s.version = "0.12.1"
8
+ s.version = "0.12.2"
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-07-02"
12
+ s.date = "2012-07-03"
13
13
  s.description = ""
14
14
  s.email = "gcao99@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -37,12 +37,18 @@ module Aspector
37
37
  end
38
38
  alias default_options aop_default_options
39
39
 
40
- def aop_apply target, options = {}
41
- aop_logger.log Logger::APPLY, target, options.inspect
40
+ def aop_apply target, *rest
41
+ options = rest.last.is_a?(Hash) ? rest.pop : {}
42
+
43
+ targets = rest.unshift target
44
+ result = targets.map do |target|
45
+ aop_logger.log Logger::APPLY, target, options.inspect
46
+ aspect_instance = new(target, options)
47
+ aspect_instance.send :aop_apply
48
+ aspect_instance
49
+ end
42
50
 
43
- aspect_instance = new(target, options)
44
- aspect_instance.send :aop_apply
45
- aspect_instance
51
+ result.size == 1 ? result.first : result
46
52
  end
47
53
  alias apply aop_apply
48
54
 
@@ -39,6 +39,25 @@ describe "Aspector::Base" do
39
39
  obj.value.should == %w"do_before test"
40
40
  end
41
41
 
42
+ it "#apply to multiple targets at once" do
43
+ klass = create_test_class
44
+ klass2 = create_test_class
45
+
46
+ aspect = Aspector do
47
+ before :test do value << "do_before" end
48
+ end
49
+
50
+ aspect.apply(klass, klass2)
51
+
52
+ obj = klass.new
53
+ obj.test
54
+ obj.value.should == %w"do_before test"
55
+
56
+ obj2 = klass2.new
57
+ obj2.test
58
+ obj2.value.should == %w"do_before test"
59
+ end
60
+
42
61
  it "use #target to add method to target class/module" do
43
62
  klass = create_test_class
44
63
 
@@ -1,6 +1,6 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
2
 
3
- describe "Special chars in method names" do
3
+ describe "special chars in method names" do
4
4
  ['?', '!', '='].each do |char|
5
5
  it "should work with methods whose name contains #{char}" do
6
6
  klass = Class.new do
@@ -16,11 +16,9 @@ describe "Special chars in method names" do
16
16
  value << "do_this"
17
17
  end
18
18
 
19
- class_eval <<-CODE
20
- def test#{char} *args
21
- value << "test"
22
- end
23
- CODE
19
+ define_method "test#{char}" do |*args|
20
+ value << "test"
21
+ end
24
22
  end
25
23
 
26
24
  obj = klass.new
@@ -29,30 +27,6 @@ describe "Special chars in method names" do
29
27
  end
30
28
  end
31
29
 
32
- it "should work with []" do
33
- klass = Class.new do
34
- aspector do
35
- before "[]", :do_this
36
- end
37
-
38
- def value
39
- @value ||= []
40
- end
41
-
42
- def do_this *args
43
- value << "do_this"
44
- end
45
-
46
- def [] *args
47
- value << "test"
48
- end
49
- end
50
-
51
- obj = klass.new
52
- obj[1]
53
- obj.value.should == %w"do_this test"
54
- end
55
-
56
30
  ['+', '-', '*', '/', '~', '|', '%', '&', '^', '<', '>', '[]', '[]='].each do |meth|
57
31
  it "should work with #{meth}" do
58
32
  klass = Class.new do
@@ -81,3 +55,68 @@ describe "Special chars in method names" do
81
55
 
82
56
  end
83
57
 
58
+ describe "special chars in class method names" do
59
+ ['?', '!', '='].each do |char|
60
+ it "should work with methods whose name contains #{char}" do
61
+ Object.send :define_method, :meth_with_special_char do
62
+ "test#{char}"
63
+ end
64
+
65
+ klass = Class.new do
66
+ aspector :class_methods => true do
67
+ before meth_with_special_char, :do_this
68
+ end
69
+
70
+ class << self
71
+ def value
72
+ @value ||= []
73
+ end
74
+
75
+ def do_this *args
76
+ value << "do_this"
77
+ end
78
+
79
+ define_method meth_with_special_char do |*args|
80
+ value << "test"
81
+ end
82
+ end
83
+ end
84
+
85
+ klass.send meth_with_special_char, 1
86
+ klass.value.should == %w"do_this test"
87
+ end
88
+ end
89
+
90
+ ['+', '-', '*', '/', '~', '|', '%', '&', '^', '<', '>', '[]', '[]='].each do |meth|
91
+ it "should work with #{meth}" do
92
+ Object.send :define_method, :meth_with_special_char do
93
+ meth
94
+ end
95
+
96
+ klass = Class.new do
97
+ aspector :class_methods => true do
98
+ before meth_with_special_char, :do_this
99
+ end
100
+
101
+ class << self
102
+ def value
103
+ @value ||= []
104
+ end
105
+
106
+ def do_this *args
107
+ value << "do_this"
108
+ end
109
+
110
+ define_method meth_with_special_char do |*args|
111
+ value << "test"
112
+ end
113
+ end
114
+ end
115
+
116
+ klass.send meth_with_special_char, 1, 2
117
+ klass.value.should == %w"do_this test"
118
+ end
119
+ end
120
+
121
+ end
122
+
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.1
4
+ version: 0.12.2
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-07-02 00:00:00.000000000 Z
12
+ date: 2012-07-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -268,7 +268,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
268
268
  version: '0'
269
269
  segments:
270
270
  - 0
271
- hash: -1261563091961094828
271
+ hash: 2407230077532113164
272
272
  required_rubygems_version: !ruby/object:Gem::Requirement
273
273
  none: false
274
274
  requirements: