aspectual 0.0.2 → 0.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 791be340bcb932e339d64f0735635b806b0ed860
4
- data.tar.gz: e85f88a62334e97d685f2d626d7d9e7b8a45c8ff
3
+ metadata.gz: 3229da9400effd5026b954ea45865ea5e57e514c
4
+ data.tar.gz: 68bc5c8b63eee406ac02127f9c3c0cc9d6f2c0a9
5
5
  SHA512:
6
- metadata.gz: d20e5e8d7ec23d34f6664626248f49e29276f2cb963383f19579bc6300e8182ce791eccc639d8d8bda12e3929f3aa3210d807504a3c96e3170001da86ccf07dc
7
- data.tar.gz: c5dd639e0b3fa4f1e187fc445ba6682aef248a100bc99453e6e6d61a657c34284e6cf2edd2f9723e9390798ea21bcfd81f329f2a8c37f1f6d34fb729f64da7ef
6
+ metadata.gz: d259200db5b129a02b80b26cd8622ea969a67f5ed2b47451e77d6026e7aabf657a5be86ecd8e21bed7b6e1ba938cc14df0c4a20d2064503f229dc67959b987d6
7
+ data.tar.gz: e2e37da471291d851655249b0a3eda4f063a754f3569e1cf6cddd8fdbe7a094f13f2a8e9225f9ee95e7ef5c00b606c54036666ac8a14df28a2938dde612229dc
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- aspectual (0.0.2)
4
+ aspectual (0.1.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -22,6 +22,6 @@ PLATFORMS
22
22
 
23
23
  DEPENDENCIES
24
24
  aspectual!
25
- bundler (~> 1.3)
25
+ bundler
26
26
  rake
27
27
  rspec
Binary file
data/aspectual.gemspec CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
20
20
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
21
  spec.require_paths = ["lib"]
22
22
 
23
- spec.add_development_dependency "bundler", "~> 1.3"
24
- spec.add_development_dependency "rake"
25
- spec.add_development_dependency "rspec"
23
+ spec.add_development_dependency "bundler", "~> 0"
24
+ spec.add_development_dependency "rake", "~> 0"
25
+ spec.add_development_dependency "rspec", "~> 0"
26
26
  end
@@ -1,3 +1,3 @@
1
1
  module Aspectual
2
- VERSION = '0.0.2'
2
+ VERSION = '0.1.0'
3
3
  end
data/lib/aspectual.rb CHANGED
@@ -6,6 +6,7 @@ module Aspectual
6
6
  # aspects are added to one method, the first declared method will be
7
7
  # added last.
8
8
  @_before_aspects = Array(aspects[:before]).reverse
9
+ @_around_aspects = Array(aspects[:around]).reverse
9
10
  @_after_aspects = Array(aspects[:after])
10
11
  end
11
12
 
@@ -14,7 +15,7 @@ module Aspectual
14
15
  return if @_defining_method
15
16
  if method_defined?(method_symbol)
16
17
 
17
- %w{before after}.each do |position|
18
+ %w{before around after}.each do |position|
18
19
  current_aspects = instance_variable_get("@_#{position}_aspects")
19
20
  if current_aspects
20
21
  current_aspects.each do |aspect|
@@ -39,10 +40,12 @@ module Aspectual
39
40
  without_aspect_method_name = method_symbol.to_s + "_without_#{position}_" + aspect.to_s
40
41
 
41
42
  case position
42
- when "after"
43
- aspect_proc = lambda {|*args| send(without_aspect_method_name, *args); send(aspect, *args)}
44
43
  when "before"
45
44
  aspect_proc = lambda {|*args| send(aspect, *args); send(without_aspect_method_name, *args)}
45
+ when "around"
46
+ aspect_proc = lambda {|*args| send(aspect, *args, &Proc.new{send(without_aspect_method_name, *args)})}
47
+ when "after"
48
+ aspect_proc = lambda {|*args| send(without_aspect_method_name, *args); send(aspect, *args)}
46
49
  end
47
50
 
48
51
  define_method(with_aspect_method_name, aspect_proc)
@@ -49,12 +49,32 @@ describe Aspectual do
49
49
  self
50
50
  end
51
51
 
52
+ def block_test_method_0
53
+ methods_called << "before_block_test_method_0_block"
54
+ yield
55
+ methods_called << "after_block_test_method_0_block"
56
+ self
57
+ end
58
+
59
+ def block_test_method_1
60
+ methods_called << "before_block_test_method_1_block"
61
+ yield
62
+ methods_called << "after_block_test_method_1_block"
63
+ self
64
+ end
65
+
52
66
  aspects before: :single_test_method
53
67
  def single_before_test_method
54
68
  methods_called << "single_before_test_method"
55
69
  self
56
70
  end
57
71
 
72
+ aspects around: :block_test_method_0
73
+ def single_around_test_method
74
+ methods_called << "single_around_test_method"
75
+ self
76
+ end
77
+
58
78
  aspects after: :single_test_method
59
79
  def single_after_test_method
60
80
  methods_called << "single_after_test_method"
@@ -67,6 +87,12 @@ describe Aspectual do
67
87
  self
68
88
  end
69
89
 
90
+ aspects around: [:block_test_method_0, :block_test_method_1]
91
+ def array_around_test_method
92
+ methods_called << "array_around_test_method"
93
+ self
94
+ end
95
+
70
96
  aspects after: [:array_test_method_0, :array_test_method_1]
71
97
  def array_after_test_method
72
98
  methods_called << "array_after_test_method"
@@ -102,7 +128,7 @@ describe Aspectual do
102
128
  describe "before aspects" do
103
129
  it "calls before aspect methods before the called method" do
104
130
  test_instance = TestClass.new.single_before_test_method
105
- expect(test_instance.methods_called).to match_array(%w{
131
+ expect(test_instance.methods_called).to eq(%w{
106
132
  single_test_method
107
133
  single_before_test_method
108
134
  })
@@ -110,7 +136,7 @@ describe Aspectual do
110
136
 
111
137
  it "allows multiple aspects to be declared" do
112
138
  test_instance = TestClass.new.array_before_test_method
113
- expect(test_instance.methods_called).to match_array(%w{
139
+ expect(test_instance.methods_called).to eq(%w{
114
140
  array_test_method_0
115
141
  array_test_method_1
116
142
  array_before_test_method
@@ -121,15 +147,15 @@ describe Aspectual do
121
147
  describe "after aspects" do
122
148
  it "calls before aspect methods before the called method" do
123
149
  test_instance = TestClass.new.single_after_test_method
124
- expect(test_instance.methods_called).to match_array(%w{
125
- single_test_method
150
+ expect(test_instance.methods_called).to eq(%w{
126
151
  single_after_test_method
152
+ single_test_method
127
153
  })
128
154
  end
129
155
 
130
156
  it "allows multiple aspects to be declared" do
131
157
  test_instance = TestClass.new.array_after_test_method
132
- expect(test_instance.methods_called).to match_array(%w{
158
+ expect(test_instance.methods_called).to eq(%w{
133
159
  array_after_test_method
134
160
  array_test_method_0
135
161
  array_test_method_1
@@ -137,10 +163,32 @@ describe Aspectual do
137
163
  end
138
164
  end
139
165
 
166
+ describe "around aspects" do
167
+ it "calls around aspect methods around the called method" do
168
+ test_instance = TestClass.new.single_around_test_method
169
+ expect(test_instance.methods_called).to eq(%w{
170
+ before_block_test_method_0_block
171
+ single_around_test_method
172
+ after_block_test_method_0_block
173
+ })
174
+ end
175
+
176
+ it "allows multiple aspects to be declared" do
177
+ test_instance = TestClass.new.array_around_test_method
178
+ expect(test_instance.methods_called).to eq(%w{
179
+ before_block_test_method_0_block
180
+ before_block_test_method_1_block
181
+ array_around_test_method
182
+ after_block_test_method_1_block
183
+ after_block_test_method_0_block
184
+ })
185
+ end
186
+ end
187
+
140
188
  describe "mixed aspects" do
141
189
  it "calls all the aspect declarations in the correct order" do
142
190
  test_instance = TestClass.new.before_and_after_aspects_test_method
143
- expect(test_instance.methods_called).to match_array(%w{
191
+ expect(test_instance.methods_called).to eq(%w{
144
192
  before_test_method_0
145
193
  before_test_method_1
146
194
  before_and_after_aspects_test_method
metadata CHANGED
@@ -1,55 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aspectual
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Sunderland
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-28 00:00:00.000000000 Z
11
+ date: 2014-12-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.3'
19
+ version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.3'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  description: "\n A simple gem to support minimal Aspect Oriented Programming in
@@ -64,6 +64,7 @@ files:
64
64
  - Gemfile.lock
65
65
  - README.md
66
66
  - aspectual-0.0.1.gem
67
+ - aspectual-0.0.2.gem
67
68
  - aspectual.gemspec
68
69
  - lib/aspectual.rb
69
70
  - lib/aspectual/version.rb
@@ -78,17 +79,17 @@ require_paths:
78
79
  - lib
79
80
  required_ruby_version: !ruby/object:Gem::Requirement
80
81
  requirements:
81
- - - '>='
82
+ - - ">="
82
83
  - !ruby/object:Gem::Version
83
84
  version: '0'
84
85
  required_rubygems_version: !ruby/object:Gem::Requirement
85
86
  requirements:
86
- - - '>='
87
+ - - ">="
87
88
  - !ruby/object:Gem::Version
88
89
  version: '0'
89
90
  requirements: []
90
91
  rubyforge_project:
91
- rubygems_version: 2.0.6
92
+ rubygems_version: 2.4.3
92
93
  signing_key:
93
94
  specification_version: 4
94
95
  summary: A gem to help with AOP.