wrap 0.4.3 → 0.5.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.
Files changed (4) hide show
  1. data/lib/wrap.rb +30 -30
  2. data/test/wrap_test.rb +34 -0
  3. data/wrap.gemspec +1 -1
  4. metadata +4 -4
@@ -5,7 +5,7 @@
5
5
  ##
6
6
  #
7
7
  class << Wrap
8
- Version = '0.4.3' unless defined?(Version)
8
+ Version = '0.5.0' unless defined?(Version)
9
9
 
10
10
  def version
11
11
  Version
@@ -16,31 +16,13 @@
16
16
  'map' => [ 'map' , ' >= 4.7.1' ]
17
17
  }
18
18
  end
19
-
20
- def libdir(*args, &block)
21
- @libdir ||= File.expand_path(__FILE__).sub(/\.rb$/,'')
22
- args.empty? ? @libdir : File.join(@libdir, *args)
23
- ensure
24
- if block
25
- begin
26
- $LOAD_PATH.unshift(@libdir)
27
- block.call()
28
- ensure
29
- $LOAD_PATH.shift()
30
- end
31
- end
32
- end
33
-
34
- def load(*libs)
35
- libs = libs.join(' ').scan(/[^\s+]+/)
36
- Wrap.libdir{ libs.each{|lib| Kernel.load(lib) } }
37
- end
38
19
  end
39
20
 
40
21
  ##
41
22
  #
42
23
  begin
43
24
  require 'rubygems'
25
+ Wrap.dependencies.each{|name, dependency| gem(*dependency)}
44
26
  rescue LoadError
45
27
  nil
46
28
  end
@@ -82,15 +64,8 @@
82
64
  end
83
65
 
84
66
  ClassMethods = proc do
85
- def wrap(name, *args, &block)
86
- define_method(name){} unless method_defined?(name)
87
-
88
- wrap!(name)
89
- end
90
-
91
67
  def method_added(name)
92
68
  return super if wrapping?
93
-
94
69
  begin
95
70
  super
96
71
  ensure
@@ -98,18 +73,43 @@
98
73
  end
99
74
  end
100
75
 
76
+ def include(other)
77
+ super
78
+ ensure
79
+ other.instance_methods.each do |name|
80
+ if wrapped?(name)
81
+ begin
82
+ remove_method(name)
83
+ rescue NameError
84
+ nil
85
+ end
86
+ rewrap!(name)
87
+ end
88
+ end
89
+ end
90
+
91
+ def wrap(name, *args, &block)
92
+ define_method(name){} unless method_defined?(name)
93
+ wrap!(name)
94
+ end
95
+
101
96
  def wrapped?(name)
102
97
  method_defined?("wrapped_#{ name }")
103
98
  end
104
99
 
105
100
  def wrap!(name)
101
+ name = name.to_s
102
+ method = instance_method(name)
103
+
106
104
  wrapping! name do
107
105
  name = name.to_s
108
106
  wrapped_name = "wrapped_#{ name }"
109
107
 
110
- method = instance_method(name)
111
-
112
- remove_method(wrapped_name) if method_defined?(wrapped_name)
108
+ begin
109
+ remove_method(wrapped_name)
110
+ rescue NameError
111
+ nil
112
+ end
113
113
 
114
114
  alias_method(wrapped_name, name)
115
115
 
@@ -207,6 +207,40 @@ Testing Wrap do
207
207
  end
208
208
  end
209
209
 
210
+ ##
211
+ #
212
+ testing 'that methods added via module inclusion preserve wrapping too' do
213
+ c =
214
+ assert do
215
+ wrapped_class do
216
+ define_method(:foo){ accum.push(:original); accum }
217
+
218
+ wrap :foo
219
+
220
+ before(:foo){ accum.push(:before) }
221
+ after(:foo){ accum.push(:after) }
222
+ end
223
+ end
224
+
225
+ assert do
226
+ o = c.new
227
+ o.foo()
228
+ assert o.accum === [:before, :original, :after]
229
+ end
230
+
231
+ m =
232
+ Module.new do
233
+ define_method(:foo){ accum.push(:mixin); accum }
234
+ end
235
+
236
+ c.send(:include, m)
237
+
238
+ assert do
239
+ o = c.new
240
+ o.foo()
241
+ assert o.accum === [:before, :mixin, :after]
242
+ end
243
+ end
210
244
 
211
245
  private
212
246
  def wrapped_class(&block)
@@ -3,7 +3,7 @@
3
3
 
4
4
  Gem::Specification::new do |spec|
5
5
  spec.name = "wrap"
6
- spec.version = "0.4.3"
6
+ spec.version = "0.5.0"
7
7
  spec.platform = Gem::Platform::RUBY
8
8
  spec.summary = "wrap"
9
9
  spec.description = "description: wrap kicks the ass"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wrap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.5.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-11-28 00:00:00.000000000 Z
12
+ date: 2011-12-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: map
16
- requirement: &70328097412480 !ruby/object:Gem::Requirement
16
+ requirement: &70362008679240 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: 4.7.1
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70328097412480
24
+ version_requirements: *70362008679240
25
25
  description: ! 'description: wrap kicks the ass'
26
26
  email: ara.t.howard@gmail.com
27
27
  executables: []