wrap 1.1.0 → 1.2.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 +28 -17
  2. data/test/wrap_test.rb +18 -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 = '1.1.0' unless defined?(Version)
8
+ Version = '1.2.0' unless defined?(Version)
9
9
 
10
10
  def version
11
11
  Version
@@ -41,26 +41,37 @@
41
41
  other.send(:class_eval, &InstanceMethods)
42
42
  end
43
43
 
44
- def Wrap.code_for(name)
45
- <<-__
46
- def #{ name }(*args, &block)
47
- if running_callbacks?(#{ name.inspect })
48
- return wrapped_#{ name }(*args, &block)
49
- end
44
+ def Wrap.code_for(name, arity)
45
+ if arity <= 0
46
+ argv = "*argv"
47
+ argv_array = "argv"
48
+ else
49
+ argv = Array.new(arity){|i| "arg#{ i }"}.join(', ')
50
+ argv_array = argv
51
+ end
50
52
 
51
- running_callbacks(#{ name.inspect }) do
52
- catch(:halt) do
53
- return false unless run_callbacks(:before, #{ name.inspect }, args)
53
+ code =
54
+ <<-__
55
+ def #{ name }(#{ argv }, &block)
56
+ args = #{ argv_array }
57
+
58
+ if running_callbacks?(#{ name.inspect })
59
+ return wrapped_#{ name }(*args, &block)
60
+ end
54
61
 
55
- begin
56
- result = wrapped_#{ name }(*args, &block)
57
- ensure
58
- run_callbacks(:after, #{ name.inspect }, [result]) unless $!
62
+ running_callbacks(#{ name.inspect }) do
63
+ catch(:halt) do
64
+ return false unless run_callbacks(:before, #{ name.inspect }, args)
65
+
66
+ begin
67
+ result = wrapped_#{ name }(*args, &block)
68
+ ensure
69
+ run_callbacks(:after, #{ name.inspect }, [result]) unless $!
70
+ end
59
71
  end
60
72
  end
61
73
  end
62
- end
63
- __
74
+ __
64
75
  end
65
76
 
66
77
  ClassMethods = proc do
@@ -130,7 +141,7 @@
130
141
 
131
142
  alias_method(wrapped_name, name)
132
143
 
133
- module_eval(Wrap.code_for(name))
144
+ module_eval(Wrap.code_for(name, method.arity))
134
145
  end
135
146
  end
136
147
 
@@ -327,6 +327,24 @@ Testing Wrap do
327
327
  end
328
328
  end
329
329
 
330
+ ##
331
+ #
332
+ testing 'that wrapping preserves method arity' do
333
+ assert do
334
+ wrapped_class do
335
+ def foo(x, y) [x, y] end
336
+
337
+ assert{ instance_method(:foo).arity == 2 }
338
+ assert{ new.foo(4, 2) == [4, 2] }
339
+
340
+ wrap :foo
341
+
342
+ assert{ instance_method(:foo).arity == 2 }
343
+ assert{ new.foo(4, 2) == [4, 2] }
344
+ end
345
+ end
346
+ end
347
+
330
348
  private
331
349
  def wrapped_class(&block)
332
350
  tc = self
@@ -3,7 +3,7 @@
3
3
 
4
4
  Gem::Specification::new do |spec|
5
5
  spec.name = "wrap"
6
- spec.version = "1.1.0"
6
+ spec.version = "1.2.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: 1.1.0
4
+ version: 1.2.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-12-16 00:00:00.000000000 Z
12
+ date: 2012-02-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: map
16
- requirement: &70155276120700 !ruby/object:Gem::Requirement
16
+ requirement: &70251455330920 !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: *70155276120700
24
+ version_requirements: *70251455330920
25
25
  description: ! 'description: wrap kicks the ass'
26
26
  email: ara.t.howard@gmail.com
27
27
  executables: []