rogerdpack-arguments 0.4.7.4 → 0.4.7.5

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.
@@ -3,7 +3,16 @@ module NamedArgs
3
3
  methods = instance_methods - Object.methods if methods.empty?
4
4
 
5
5
  methods.each do |meth|
6
- names = Arguments.names self, meth
6
+ if(meth.to_s.include?('.'))
7
+ # they may have passed in a parameter like :klass.method for a class method
8
+ klass, meth = meth.to_s.split('.')
9
+ klass = eval(klass) # from "Klass" to Klass
10
+ klass = (class << klass; self; end)
11
+ names = Arguments.names klass, meth
12
+ else
13
+ names = Arguments.names self, meth
14
+ klass = self
15
+ end
7
16
  next if names.empty? || names.any?{|name| name[0] == :"*args"}
8
17
 
9
18
  assigns = []
@@ -30,7 +39,7 @@ module NamedArgs
30
39
  end
31
40
  end
32
41
 
33
- self.module_eval <<-RUBY_EVAL, __FILE__, __LINE__
42
+ klass.module_eval <<-RUBY_EVAL, __FILE__, __LINE__
34
43
  def __new_#{ meth } *args, &block
35
44
  opts = args.last.kind_of?( Hash ) ? args.pop : {}
36
45
  #{ assigns.join("\n") }
@@ -42,6 +51,7 @@ module NamedArgs
42
51
  RUBY_EVAL
43
52
  end
44
53
  end
54
+
45
55
  alias :named_args_for :named_arguments_for
46
56
  alias :named_args :named_arguments_for
47
57
 
data/lib/arguments/vm.rb CHANGED
@@ -1,7 +1,7 @@
1
1
 
2
2
  module Arguments
3
3
  def self.names klass, method
4
- source, line = klass.instance_method( method ).source_location
4
+ source, line = klass.instance_method( method ).source_location rescue klass.method( method ).source_location
5
5
  return [] unless source and line
6
6
  str = IO.readlines(source)[ line - 1 ]
7
7
  return [] if str.match(/\*\w+/)
@@ -68,6 +68,21 @@ describe Arguments do
68
68
  Klass.asr(0, 1, 2, :curve => 3).should == [0,1,2,3]
69
69
  end
70
70
 
71
+ it "should work with class methods" do
72
+ Klass.send( :named_arguments_for, :"Klass.class_method")
73
+ Klass.class_method(:a => 1).should == 1
74
+ end
75
+
76
+ it "should work with class methods called like :self.method_name" do
77
+ Klass.send( :named_arguments_for, :"self.class_method2")
78
+ Klass.class_method2(:a => 1).should == 1
79
+ end
80
+
81
+ it "should work with class methods passed in by string instead of symboL" do
82
+ Klass.send( :named_arguments_for, "self.class_method3")
83
+ Klass.class_method3(:a => 1).should == 1
84
+ end
85
+
71
86
  it "should not patch methods that accept no args" do
72
87
  # Arguments.should_not_receive(:names)
73
88
  Klass.send( :named_arguments_for, :no_args )
data/spec/klass.rb CHANGED
@@ -48,6 +48,18 @@ class Klass
48
48
  [attackTime, sustainLevel, releaseTime, curve]
49
49
  end
50
50
  named_arguments_for :asr
51
+
52
+ def class_method(a)
53
+ a
54
+ end
55
+
56
+ def class_method2(a)
57
+ a
58
+ end
59
+
60
+ def class_method3(a)
61
+ a
62
+ end
51
63
  end
52
64
 
53
65
  def == other
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rogerdpack-arguments
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.7.4
4
+ version: 0.4.7.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Macario Ortega