rdp-arguments 0.6.1 → 0.6.2

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.
data/Rakefile CHANGED
@@ -11,6 +11,7 @@ Hoe.plugin :newgem
11
11
  # Generate all the Rake tasks
12
12
  # Run 'rake -T' to see list of generated tasks (from gem root directory)
13
13
  $hoe = Hoe.spec 'rdp-arguments' do
14
+ raise 'broken with 1.3.5 on doze'
14
15
  self.developer 'Macario Ortega', 'macarui@gmail.com'
15
16
  self.rubyforge_name = self.name # TODO this is default value
16
17
  self.extra_deps = [
data/lib/arguments.rb CHANGED
@@ -9,12 +9,17 @@ RUBY_VERSION.to_f >= 1.9 ? require( 'arguments/vm' ) : require( 'arguments/mri'
9
9
  module Arguments
10
10
  VERSION = '0.6.1'
11
11
 
12
- def self.names klass, method
13
- args = ast_for_method(klass, method).assoc(:args)
12
+ def self.names klass, method, am_self
13
+ args = ast_for_method(klass, method, am_self).assoc(:args)
14
14
  args = args[1..-1]
15
15
 
16
- return [] if args.empty? or args.last.is_a?(Symbol)
17
- vals = args.pop[1..-1]
16
+ return [] if args.empty?# or args.last.is_a?(Symbol)
17
+ if args.last.is_a?(Symbol)
18
+ # no optionals, so don't pop them off the list
19
+ vals = []
20
+ else
21
+ vals = args.pop[1..-1]
22
+ end
18
23
 
19
24
  args.collect do |arg|
20
25
  if val = vals.find{ |v| v[1] == arg }
@@ -12,7 +12,7 @@ module Arguments
12
12
  else
13
13
  klass = self
14
14
  end
15
- names = Arguments.names klass, meth
15
+ names = Arguments.names klass, meth, am_self
16
16
  next if names.empty? or names.inject(false) { |bol, pair| bol || /^\*/ === pair.first.to_s }
17
17
  assigns = []
18
18
  names.pop if /^&/ === names[-1][0].to_s
@@ -38,7 +38,6 @@ module Arguments
38
38
  end
39
39
  end
40
40
 
41
-
42
41
  it = <<-RUBY_EVAL, __FILE__, __LINE__
43
42
  #{ "class << self" if am_self }
44
43
  def __#{ meth }_with_keyword_arguments *args, &block
@@ -54,6 +53,16 @@ module Arguments
54
53
  alias #{ meth } __#{ meth }_with_keyword_arguments
55
54
  #{ "end" if am_self }
56
55
  RUBY_EVAL
56
+ if $DEBUG
57
+ code, file, line = *it
58
+ file = "cached_methods/#{meth}"
59
+ line = 1
60
+ Dir.mkdir 'cached_methods' rescue nil
61
+ File.open(file, 'w') do |f|
62
+ f.write code
63
+ end
64
+ it = [code, file, 1]
65
+ end
57
66
  original_klass.class_eval *it
58
67
  end
59
68
  end
data/lib/arguments/mri.rb CHANGED
@@ -2,7 +2,8 @@ gem 'ParseTree', '>= 3.0.3'
2
2
  require 'parse_tree'
3
3
 
4
4
  module Arguments
5
- def self.ast_for_method klass, method
5
+ def self.ast_for_method klass, method, am_self
6
+ # don't care about am_self for 1.8.x
6
7
  ParseTree.translate( klass, method ).assoc(:scope).assoc(:block)
7
8
  end
8
9
  end
data/lib/arguments/vm.rb CHANGED
@@ -12,10 +12,17 @@ module Arguments
12
12
  end
13
13
  end
14
14
 
15
- def self.ast_for_method klass, method
15
+ def self.ast_for_method klass, method, am_self
16
16
  source, line = klass.instance_method(method).source_location
17
17
  str = IO.readlines( source )[ (line-1)..-1 ].join
18
+
18
19
  ast = PermissiveRubyParser.new.parse( str )
19
- ast.assoc( :defn ) or ast
20
+ if ast
21
+ if am_self
22
+ return (ast.assoc( :defs ) or ast)
23
+ else
24
+ return (ast.assoc( :defn ) or ast)
25
+ end
26
+ end
20
27
  end
21
28
  end
@@ -1,5 +1,7 @@
1
- require "#{ dir = File.dirname __FILE__ }/../lib/arguments"
1
+ require 'rubygems'
2
2
  require 'benchmark'
3
+ require "#{ dir = File.dirname __FILE__ }/../lib/arguments"
4
+ require 'spec/autorun'
3
5
 
4
6
  # TODO: Refactor specs for clarity and better coverage
5
7
  describe Arguments do
@@ -7,6 +9,7 @@ describe Arguments do
7
9
  before do
8
10
  Object.send(:remove_const, 'Klass') rescue nil
9
11
  load "#{ dir }/klass.rb"
12
+ load "#{ dir }/klass_big.rb"
10
13
  @instance = Klass.new
11
14
  end
12
15
 
@@ -48,10 +51,41 @@ describe Arguments do
48
51
 
49
52
  it "should allow for class arguments in class methods" do
50
53
  Klass.send( :named_arguments_for, :'self.klass_defaults_with_class')
51
- Klass.klass_defaults_with_class(1, 3).should == 3
52
- Klass.klass_defaults_with_class(:a => 3).should == 3
54
+ Klass.klass_defaults_with_class(1, 4).should == 4
55
+ Klass.klass_defaults_with_class(:a => 4).should == 4
53
56
  Klass.klass_defaults_with_class().should == 3
54
57
  end
58
+
59
+ it "should allow for class arguments in class methods" do
60
+ Klass.send( :named_arguments_for, :'self.klass_method')
61
+ Klass.klass_method(1, 2).should == 3
62
+ Klass.klass_method(:a => 3).should == 3
63
+ Klass.klass_method(1,2,3,5).should == 5
64
+ Klass.klass_method(1,2,3,5, 6).should == 5
65
+ end
66
+
67
+ it "should allow for method within a class' self block to be used with a class name" do
68
+ Klass.send(:named_arguments_for, :'self.klass_method3')
69
+ Klass.klass_method3(1,4).should == 4
70
+ Klass.klass_method3(:a => 1, :b => 4).should == 4
71
+ end
72
+
73
+ it "should parse larger methods" do
74
+ Klass.send( :named_arguments_for, :'self.startCSWithP2PEM')
75
+ Klass.startCSWithP2PEM 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n' # 3
76
+
77
+ Klass.startCSWithP2PEM 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', :dhtClassToUse => 44, :completion_proc => nil # 44
78
+
79
+ Klass.startCSWithP2PEM 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', :dhtClassToUse => 44, :completion_proc => nil, :use_this_shared_logger => nil, :do_not_shutdown_logger => false, :termination_proc => nil # 44
80
+
81
+ end
82
+
83
+ it "should allow for class arguments in class methods defined with like Name.method" do
84
+ Klass.send( :named_arguments_for, :'self.klass_defaults_with_class2')
85
+ Klass.klass_defaults_with_class2(1, 3).should == 3
86
+ Klass.klass_defaults_with_class2(:a => 3).should == 3
87
+ Klass.klass_defaults_with_class2().should == 3
88
+ end
55
89
 
56
90
  it "should allow overriding with nil" do
57
91
  Klass.send( :named_arguments_for, :two )
@@ -109,7 +143,7 @@ describe Arguments do
109
143
  rescue ArgumentError => e
110
144
  e
111
145
  end
112
- error.to_s.should == "`four, five` are not recognized argument keywords"
146
+ error.to_s.should == "`four, five` are not recognized argument keywords" rescue error.to_s.should == "`five, four` are not recognized argument keywords"
113
147
  end
114
148
 
115
149
  it "should not patch methods that accept no args" do
@@ -133,11 +167,18 @@ describe Arguments do
133
167
  @instance.splatted4(1, :b => 2, :args => 1).should == [1, {:b => 2, :args => 1}, []]
134
168
  end
135
169
 
136
- it "should not patch methods with no optionals" do
170
+ it "should patch methods with no optionals" do
137
171
  Klass.send( :named_arguments_for, :no_opts )
138
- @instance.method(:no_opts).arity.should == 3
172
+ @instance.method(:no_opts).arity.should == -1
139
173
  end
140
174
 
175
+ it "should handle named blocks" do
176
+ @instance.with_block3(3, 3).should==3
177
+ Klass.send(:named_args, :with_block3)
178
+ @instance.with_block3(3, nil, 4).should==4
179
+ @instance.with_block3(3).should==3
180
+ end
181
+
141
182
  it "should patch all methods" do
142
183
  Klass.send( :named_args )
143
184
  @instance.two(1, :three => 3).should == [1, 2, 3]
@@ -168,4 +209,6 @@ describe Arguments do
168
209
  end
169
210
  }
170
211
  end
212
+
213
+
171
214
  end
data/spec/klass.rb CHANGED
@@ -27,6 +27,24 @@ class Klass
27
27
  def self.klass_defaults_with_class b = 1, a = @@go
28
28
  a
29
29
  end
30
+
31
+ def Klass.klass_defaults_with_class2 b = 1, a = @@go
32
+ a
33
+ end
34
+
35
+ def Klass.klass_method a = 1, b = 2, c = 3, d = @@go, e = nil
36
+ d
37
+ end
38
+
39
+ class << self
40
+ def klass_method3 a, b = 2
41
+ b
42
+ end
43
+ end
44
+
45
+ def with_block3( value, round_id = nil, this_many_repeats_left = 3, &block)
46
+ this_many_repeats_left
47
+ end
30
48
 
31
49
  def no_args
32
50
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rdp-arguments
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.6.2
5
5
  platform: ruby
6
6
  authors:
7
- - Macario Ortega
7
+ - Macario Ortega, rogerdpack
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-29 00:00:00 -06:00
12
+ date: 2009-11-12 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -69,7 +69,6 @@ files:
69
69
  - Manifest.txt
70
70
  - README.rdoc
71
71
  - Rakefile
72
- - arguments.gemspec
73
72
  - lib/arguments.rb
74
73
  - lib/arguments/class.rb
75
74
  - lib/arguments/mri.rb
data/arguments.gemspec DELETED
@@ -1,42 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- Gem::Specification.new do |s|
4
- s.name = %q{arguments}
5
- s.version = "0.6.1"
6
-
7
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
- s.authors = ["Macario Ortega"]
9
- s.date = %q{2009-10-29}
10
- s.description = %q{You don't have to wait until Ruby 2.0 to get (named|keyword) arguments support.
11
- Arguments has been tested with Ruby 1.8.6 and ruby 1.9.1 and eventually will work with JRuby (if someone is interested in contributing, I guess is possible since merb-action-args works with JRuby)}
12
- s.email = ["macarui@gmail.com"]
13
- s.extra_rdoc_files = ["History.txt", "Manifest.txt"]
14
- s.files = ["History.txt", "Manifest.txt", "README.rdoc", "Rakefile", "arguments.gemspec", "lib/arguments.rb", "lib/arguments/class.rb", "lib/arguments/mri.rb", "lib/arguments/vm.rb", "spec/arguments_spec.rb", "spec/klass.rb", "spec/module.rb"]
15
- s.rdoc_options = ["--main", "README.rdoc"]
16
- s.require_paths = ["lib"]
17
- s.rubyforge_project = %q{arguments}
18
- s.rubygems_version = %q{1.3.5}
19
- s.summary = %q{You don't have to wait until Ruby 2.0 to get (named|keyword) arguments support}
20
-
21
- if s.respond_to? :specification_version then
22
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
23
- s.specification_version = 3
24
-
25
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
26
- s.add_runtime_dependency(%q<ruby_parser>, [">= 2.0.2"])
27
- s.add_runtime_dependency(%q<ParseTree>, [">= 3.0.3"])
28
- s.add_runtime_dependency(%q<ruby2ruby>, ["= 1.1.9"])
29
- s.add_development_dependency(%q<hoe>, [">= 2.3.3"])
30
- else
31
- s.add_dependency(%q<ruby_parser>, [">= 2.0.2"])
32
- s.add_dependency(%q<ParseTree>, [">= 3.0.3"])
33
- s.add_dependency(%q<ruby2ruby>, ["= 1.1.9"])
34
- s.add_dependency(%q<hoe>, [">= 2.3.3"])
35
- end
36
- else
37
- s.add_dependency(%q<ruby_parser>, [">= 2.0.2"])
38
- s.add_dependency(%q<ParseTree>, [">= 3.0.3"])
39
- s.add_dependency(%q<ruby2ruby>, ["= 1.1.9"])
40
- s.add_dependency(%q<hoe>, [">= 2.3.3"])
41
- end
42
- end