parameters_extra 0.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.
@@ -0,0 +1,2 @@
1
+ pkg
2
+ .bundle
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source :gemcutter
2
+
3
+ # Specify your gem's dependencies in optitron.gemspec
4
+ gemspec
@@ -0,0 +1,35 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ parameters_extra (0.2.0)
5
+ ruby2ruby (~> 1.2.4)
6
+ ruby_parser (~> 2.0)
7
+ sexp_processor (~> 3.0.4)
8
+
9
+ GEM
10
+ remote: http://rubygems.org/
11
+ specs:
12
+ callsite (0.0.4)
13
+ minitest (2.0.2)
14
+ phocus (1.1)
15
+ rake (0.8.7)
16
+ ruby2ruby (1.2.5)
17
+ ruby_parser (~> 2.0)
18
+ sexp_processor (~> 3.0)
19
+ ruby_parser (2.0.5)
20
+ sexp_processor (~> 3.0)
21
+ sexp_processor (3.0.5)
22
+
23
+ PLATFORMS
24
+ ruby
25
+
26
+ DEPENDENCIES
27
+ bundler (~> 1.0.0)
28
+ callsite (~> 0.0.4)
29
+ minitest
30
+ parameters_extra!
31
+ phocus
32
+ rake
33
+ ruby2ruby (~> 1.2.4)
34
+ ruby_parser (~> 2.0)
35
+ sexp_processor (~> 3.0.4)
@@ -0,0 +1,45 @@
1
+ # ParametersExtra
2
+
3
+ ## Purpose
4
+
5
+ You've got a method, but want to know more about the arguments? `#arity` and `#parameters` (if available) are useful,
6
+ but not nearly enough. You need something better. Like, the default arguments. *ParametersExtra* makes this simple. It operates
7
+ on a source file to supply the more details argument information by parsing the code itself.
8
+
9
+ ## Usage
10
+
11
+ Pretend you have a file `your_ruby_file.rb`:
12
+
13
+ class MyClass
14
+ def initialize
15
+ @default_value = 'hello'
16
+ end
17
+
18
+ def something(one, two = 'two', three = @default_value, *more, &block)
19
+ end
20
+ end
21
+
22
+ To look at the arguments to something and you're in Ruby 1.9 (please see https://twitter.com/igrigorik/status/19461463110320128), just require it normally:
23
+
24
+ require 'your_ruby_file'
25
+ MyClass.instance_method(:something).args
26
+
27
+ Otherwise, do the following:
28
+
29
+ ParametersExtra.load('your_ruby_file') # <-- this also requires the file
30
+ MyClass.instance_method(:something).args
31
+
32
+ This will return an `ArgList` object. You can then look at the names & types.
33
+
34
+ MyClass.instance_method(:something).args.names
35
+ # => [:one, :two, :three, :more, :block]
36
+
37
+ MyClass.instance_method(:something).args.types
38
+ # => [:required, :optional, :optional, :splat, :block]
39
+
40
+ If you want to get the value of a default argument, you'll need a context in which to evaluate it, namely,
41
+ an instance of the class from which the method derives.
42
+
43
+ obj = MyClass.new
44
+ obj.method(:something).args.last.default_value
45
+ # => 'hello'
@@ -0,0 +1,21 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+
4
+ desc "Run tests"
5
+ task :test do
6
+ $: << '.'
7
+ $: << 'lib'
8
+ require 'parameters_extra'
9
+ require 'test/helper'
10
+ Dir['test/**/test_*.rb'].each { |test| require test }
11
+ end
12
+
13
+ require 'rake/rdoctask'
14
+ desc "Generate documentation"
15
+ Rake::RDocTask.new do |rd|
16
+ rd.main = "README.rdoc"
17
+ rd.rdoc_files.include("README.rdoc", "lib/**/*.rb")
18
+ rd.rdoc_dir = 'rdoc'
19
+ end
20
+
21
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,52 @@
1
+ require 'set'
2
+ require 'ruby2ruby'
3
+ require 'ruby_parser'
4
+ require 'sexp_processor'
5
+
6
+ require 'parameters_extra/method_mixins'
7
+ require 'parameters_extra/args'
8
+ require 'parameters_extra/processor'
9
+ require 'parameters_extra/version'
10
+ require 'parameters_extra/method_registry'
11
+
12
+ module ParametersExtra
13
+ ClassMethodRegistry = Hash.new{|h, k| h[k] = MethodRegistry.new}
14
+ FileRegistry = Set.new
15
+
16
+ def self.load(file, require_file = true)
17
+ require file if require_file
18
+ register file
19
+ end
20
+
21
+ def self.parameters_for_method(method)
22
+ k = class_key(method.owner)
23
+ ClassMethodRegistry[k][method.name.to_sym] if ClassMethodRegistry.key?(k)
24
+ end
25
+
26
+ def self.register(file)
27
+ file = expand_path(file)
28
+ unless FileRegistry.include?(file)
29
+ FileRegistry << file
30
+ parse(file).each { |cls, methods| ClassMethodRegistry[cls].add_methods!(methods) }
31
+ end
32
+ end
33
+
34
+ def self.parse(file, require_file = true)
35
+ parser = RubyParser.new
36
+ sexp = parser.process(File.read(expand_path(file)))
37
+ parameters_extra = Processor.new
38
+ parameters_extra.process(sexp)
39
+ parameters_extra.methods
40
+ end
41
+
42
+ def self.class_key(cls)
43
+ nesting = cls.class_eval("Module.nesting")
44
+ nesting.pop
45
+ nesting.join('::')
46
+ end
47
+
48
+ def self.expand_path(file)
49
+ file = File.expand_path(file)
50
+ File.exist?(file) ? file : "#{file}.rb"
51
+ end
52
+ end
@@ -0,0 +1,66 @@
1
+ module ParametersExtra
2
+ class Args < Array
3
+ class Arg
4
+
5
+ attr_accessor :arg_list
6
+ attr_reader :name, :type
7
+
8
+ def initialize(name, type, default = nil)
9
+ @name, @type, @default = name, type, default
10
+ end
11
+
12
+ def required?
13
+ @type == :required
14
+ end
15
+
16
+ def optional?
17
+ @type == :optional
18
+ end
19
+
20
+ def splat?
21
+ @type == :splat
22
+ end
23
+
24
+ def default?
25
+ !@default.nil?
26
+ end
27
+
28
+ def default_value(*args)
29
+ return nil if @default.nil?
30
+ receiver ||= arg_list.owning_method.receiver
31
+ raise "You must specify a receiver for the defaul value" if receiver.nil?
32
+ raise "You must evaluate defaults in the context of a matching class. #{receiver.class.name} is not a #{arg_list.cls.name}." unless receiver.is_a?(arg_list.cls)
33
+ receiver.instance_eval(@default)
34
+ end
35
+ end
36
+
37
+ attr_accessor :owning_method
38
+
39
+ def initialize(cls)
40
+ @cls = cls
41
+ end
42
+
43
+ def cls
44
+ @cls.inject(Module) {|c, m| c.const_get(m)}
45
+ end
46
+
47
+ def clone
48
+ o = super
49
+ o.each {|arg| arg.arg_list = o}
50
+ o
51
+ end
52
+
53
+ def required_size
54
+ inject(0) {|count, arg| count += arg.required? ? 1 : 0}
55
+ end
56
+ alias_method :required_count, :required_size
57
+
58
+ def names
59
+ map(&:name)
60
+ end
61
+
62
+ def types
63
+ map(&:type)
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,11 @@
1
+ module MethodMixin
2
+ def parameters_extra
3
+ ParametersExtra.register(source_location[0]) if respond_to?(:source_location)
4
+ args = ParametersExtra.parameters_for_method(self).clone
5
+ args.owning_method = self
6
+ args
7
+ end
8
+ end
9
+
10
+ Method.send(:include, MethodMixin)
11
+ UnboundMethod.send(:include, MethodMixin)
@@ -0,0 +1,19 @@
1
+ module ParametersExtra
2
+ class MethodRegistry < Hash
3
+ attr_reader :method_names
4
+
5
+ def initialize
6
+ super
7
+ @method_names = []
8
+ end
9
+
10
+ def add_methods!(methods)
11
+ methods.each do |(method_name, args)|
12
+ unless key?(method_name)
13
+ self[method_name] = args
14
+ method_names << method_name
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,88 @@
1
+ module ParametersExtra
2
+ class Processor < SexpProcessor
3
+
4
+ attr_reader :methods
5
+
6
+ def initialize
7
+ @methods = Hash.new{|h,k| h[k] = []}
8
+ @current_class = []
9
+ super()
10
+ end
11
+
12
+ def process_module(exp)
13
+ exp.shift
14
+ @current_class << exp.first.to_sym
15
+ process(exp)
16
+ @current_class.pop
17
+ exp.clear
18
+ exp
19
+ end
20
+
21
+ def process_class(exp)
22
+ exp.shift
23
+ current_class_size = @current_class.size
24
+ case exp.first
25
+ when Symbol
26
+ @current_class << exp.first.to_sym
27
+ process(exp)
28
+ else
29
+ if exp.first.first == :colon2
30
+ exp.first.shift
31
+ class_exp = exp.shift
32
+ class_exp[0, class_exp.size - 1].each do |const|
33
+ @current_class << const.last
34
+ end
35
+ @current_class << class_exp.last
36
+ else
37
+ raise
38
+ end
39
+ exp.shift
40
+ process(exp.first)
41
+ end
42
+ @current_class.slice!(current_class_size, @current_class.size)
43
+ exp.clear
44
+ exp
45
+ end
46
+
47
+ def process_defn(exp)
48
+ exp.shift
49
+ @current_method = exp.shift
50
+ @ruby2ruby = Ruby2Ruby.new
51
+ process_args(exp.shift)
52
+ exp.shift
53
+ exp
54
+ end
55
+
56
+ def process_args(exp)
57
+ exp.shift
58
+ arg_list = Args.new(@current_class.clone)
59
+ while !exp.empty?
60
+ t = exp.shift
61
+ case t
62
+ when Symbol
63
+ arg_list << case t.to_s[0]
64
+ when ?* then Args::Arg.new(t.to_s[1, t.to_s.size].to_sym, :splat)
65
+ when ?& then Args::Arg.new(t.to_s[1, t.to_s.size].to_sym, :block)
66
+ else Args::Arg.new(t, :required)
67
+ end
68
+ when Sexp
69
+ case t.shift
70
+ when :block
71
+ while lasgn = t.shift
72
+ lasgn.shift
73
+ name = lasgn.shift
74
+ new_arg = Args::Arg.new(name, :optional, @ruby2ruby.process(lasgn.last))
75
+ arg_list.each_with_index{|arg, idx| arg_list[idx] = new_arg if arg.name == name}
76
+ end
77
+ end
78
+ end
79
+ end
80
+ @methods[current_classname] << [@current_method, arg_list]
81
+ exp
82
+ end
83
+
84
+ def current_classname
85
+ @current_class.map{|c| c.to_s}.join('::')
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,3 @@
1
+ module ParametersExtra
2
+ VERSION = '0.2.0'
3
+ end
@@ -0,0 +1,30 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "parameters_extra/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "parameters_extra"
7
+ s.version = ParametersExtra::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Joshua Hull"]
10
+ s.email = ["joshbuddy@gmail.com"]
11
+ s.homepage = "https://github.com/joshbuddy/parameters_extra"
12
+ s.summary = "Get back more detailed information about the parameters for a method"
13
+ s.description = "Get back more detailed information about the parameters for a method."
14
+
15
+ s.rubyforge_project = "parameters_extra"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+
22
+ s.add_dependency "ruby_parser", "~> 2.0"
23
+ s.add_dependency "ruby2ruby", "~> 1.2.4"
24
+ s.add_dependency "sexp_processor", "~> 3.0.4"
25
+ s.add_development_dependency "callsite", "~> 0.0.4"
26
+ s.add_development_dependency "bundler", "~> 1.0.0"
27
+ s.add_development_dependency "rake"
28
+ s.add_development_dependency "phocus"
29
+ s.add_development_dependency "minitest"
30
+ end
@@ -0,0 +1,21 @@
1
+ class One
2
+ attr_accessor :two_method
3
+
4
+ def no_args
5
+ end
6
+
7
+ def one_args(one)
8
+ end
9
+
10
+ def two_args(one, two)
11
+ end
12
+
13
+ def splat_args(one, two, *three)
14
+ end
15
+
16
+ def default_args(one, two = 'two')
17
+ end
18
+
19
+ def default_args_with_dependant_value(one, two = two_method)
20
+ end
21
+ end
@@ -0,0 +1,18 @@
1
+ class Two
2
+ def one(hi, there)
3
+ end
4
+ end
5
+
6
+ module TwoModule
7
+ def mod(from, mod)
8
+ end
9
+ end
10
+
11
+ class TwoSubclass < Two
12
+ include TwoModule
13
+ def two(one, more)
14
+ end
15
+
16
+ def one(hi, there, more)
17
+ end
18
+ end
@@ -0,0 +1,4 @@
1
+ class MyClass
2
+ def block(arg, arg2 = 1, *splat, &blk)
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ class Autoloaded
2
+ def some_method
3
+ end
4
+ end
@@ -0,0 +1,17 @@
1
+ class Top
2
+ def one
3
+ end
4
+
5
+ class Middle
6
+ def two
7
+ end
8
+
9
+ def one(two)
10
+ end
11
+
12
+ class End
13
+ def two(three)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,4 @@
1
+ require 'minitest/autorun'
2
+ require 'phocus'
3
+ require 'callsite'
4
+ Callsite.activate_string_methods
@@ -0,0 +1,11 @@
1
+ if Method.instance_method(:source_location)
2
+ class TestAutoload < MiniTest::Unit::TestCase
3
+ def setup
4
+ require ~'fixtures/4'
5
+ end
6
+
7
+ def test_arg_counts
8
+ assert_equal 0, Autoloaded.instance_method(:some_method).parameters_extra.count
9
+ end
10
+ end
11
+ end rescue nil
@@ -0,0 +1,9 @@
1
+ class TestBlock < MiniTest::Unit::TestCase
2
+ def setup
3
+ ParametersExtra.load(~'fixtures/3')
4
+ end
5
+
6
+ def test_block
7
+ assert_equal [:required, :optional, :splat, :block], MyClass.instance_method(:block).parameters_extra.types
8
+ end
9
+ end
@@ -0,0 +1,22 @@
1
+ class TestBoundMethod < MiniTest::Unit::TestCase
2
+ def setup
3
+ ParametersExtra.load(~'fixtures/1')
4
+ end
5
+
6
+ def test_default_args
7
+ one = One.new
8
+ one.two_method = 'happy times'
9
+ two = One.new
10
+ two.two_method = 'more happy times'
11
+ assert_equal 'happy times', one.method(:default_args_with_dependant_value).parameters_extra.last.default_value
12
+ assert_equal 'more happy times', two.method(:default_args_with_dependant_value).parameters_extra.last.default_value
13
+ end
14
+
15
+ def test_binding_method
16
+ method = One.instance_method(:default_args_with_dependant_value)
17
+ one = One.new
18
+ one.two_method = 'happy times'
19
+ assert_equal 'happy times', method.bind(one).parameters_extra.last.default_value
20
+ end
21
+
22
+ end
@@ -0,0 +1,12 @@
1
+ class TestNested < MiniTest::Unit::TestCase
2
+ def setup
3
+ ParametersExtra.load(~'fixtures/5')
4
+ end
5
+
6
+ def test_nested
7
+ assert_equal 0, Top.instance_method(:one).parameters_extra.count
8
+ assert_equal 1, Top::Middle.instance_method(:one).parameters_extra.count
9
+ assert_equal 0, Top::Middle.instance_method(:two).parameters_extra.count
10
+ assert_equal 1, Top::Middle::End.instance_method(:two).parameters_extra.count
11
+ end
12
+ end
@@ -0,0 +1,33 @@
1
+ class TestSimple < MiniTest::Unit::TestCase
2
+ def setup
3
+ ParametersExtra.load(~'fixtures/1')
4
+ end
5
+
6
+ def test_arg_counts
7
+ assert_equal 0, One.instance_method(:no_args).parameters_extra.count
8
+ assert_equal 1, One.instance_method(:one_args).parameters_extra.count
9
+ assert_equal 2, One.instance_method(:two_args).parameters_extra.count
10
+ assert_equal 3, One.instance_method(:splat_args).parameters_extra.count
11
+ assert_equal 2, One.instance_method(:splat_args).parameters_extra.required_count
12
+ assert_equal 2, One.instance_method(:default_args).parameters_extra.count
13
+ assert_equal 1, One.instance_method(:default_args).parameters_extra.required_count
14
+ assert_equal 2, One.instance_method(:default_args_with_dependant_value).parameters_extra.count
15
+ assert_equal 1, One.instance_method(:default_args_with_dependant_value).parameters_extra.required_count
16
+ end
17
+
18
+ def test_arg_types
19
+ assert_equal [], One.instance_method(:no_args).parameters_extra.types
20
+ assert_equal [:required], One.instance_method(:one_args).parameters_extra.types
21
+ assert_equal [:required, :required], One.instance_method(:two_args).parameters_extra.types
22
+ assert_equal [:required, :required, :splat], One.instance_method(:splat_args).parameters_extra.types
23
+ assert_equal [:required, :optional], One.instance_method(:default_args).parameters_extra.types
24
+ assert_equal [:required, :optional], One.instance_method(:default_args_with_dependant_value).parameters_extra.types
25
+ end
26
+
27
+ def test_default_args
28
+ one = One.new
29
+ one.two_method = 'happy times'
30
+ assert_equal 'happy times', One.instance_method(:default_args_with_dependant_value).bind(one).parameters_extra.last.default_value
31
+ end
32
+
33
+ end
@@ -0,0 +1,21 @@
1
+ class TestSubclass < MiniTest::Unit::TestCase
2
+ def setup
3
+ ParametersExtra.load(~'fixtures/2')
4
+ end
5
+
6
+ def test_normal_visibility
7
+ assert_equal [:one, :more], TwoSubclass.instance_method(:two).parameters_extra.names
8
+ end
9
+
10
+ def test_subclass_overridding
11
+ assert_equal [:hi, :there, :more], TwoSubclass.instance_method(:one).parameters_extra.names
12
+ end
13
+
14
+ def test_superclass_visibility
15
+ assert_equal [:hi, :there], Two.instance_method(:one).parameters_extra.names
16
+ end
17
+
18
+ def test_module_visibility
19
+ assert_equal [:from, :mod], TwoSubclass.instance_method(:mod).parameters_extra.names
20
+ end
21
+ end
metadata ADDED
@@ -0,0 +1,222 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: parameters_extra
3
+ version: !ruby/object:Gem::Version
4
+ hash: 23
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
11
+ platform: ruby
12
+ authors:
13
+ - Joshua Hull
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-01-24 00:00:00 -08:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: ruby_parser
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 2
32
+ - 0
33
+ version: "2.0"
34
+ type: :runtime
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: ruby2ruby
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ hash: 23
45
+ segments:
46
+ - 1
47
+ - 2
48
+ - 4
49
+ version: 1.2.4
50
+ type: :runtime
51
+ version_requirements: *id002
52
+ - !ruby/object:Gem::Dependency
53
+ name: sexp_processor
54
+ prerelease: false
55
+ requirement: &id003 !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ~>
59
+ - !ruby/object:Gem::Version
60
+ hash: 15
61
+ segments:
62
+ - 3
63
+ - 0
64
+ - 4
65
+ version: 3.0.4
66
+ type: :runtime
67
+ version_requirements: *id003
68
+ - !ruby/object:Gem::Dependency
69
+ name: callsite
70
+ prerelease: false
71
+ requirement: &id004 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ hash: 23
77
+ segments:
78
+ - 0
79
+ - 0
80
+ - 4
81
+ version: 0.0.4
82
+ type: :development
83
+ version_requirements: *id004
84
+ - !ruby/object:Gem::Dependency
85
+ name: bundler
86
+ prerelease: false
87
+ requirement: &id005 !ruby/object:Gem::Requirement
88
+ none: false
89
+ requirements:
90
+ - - ~>
91
+ - !ruby/object:Gem::Version
92
+ hash: 23
93
+ segments:
94
+ - 1
95
+ - 0
96
+ - 0
97
+ version: 1.0.0
98
+ type: :development
99
+ version_requirements: *id005
100
+ - !ruby/object:Gem::Dependency
101
+ name: rake
102
+ prerelease: false
103
+ requirement: &id006 !ruby/object:Gem::Requirement
104
+ none: false
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ hash: 3
109
+ segments:
110
+ - 0
111
+ version: "0"
112
+ type: :development
113
+ version_requirements: *id006
114
+ - !ruby/object:Gem::Dependency
115
+ name: phocus
116
+ prerelease: false
117
+ requirement: &id007 !ruby/object:Gem::Requirement
118
+ none: false
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ hash: 3
123
+ segments:
124
+ - 0
125
+ version: "0"
126
+ type: :development
127
+ version_requirements: *id007
128
+ - !ruby/object:Gem::Dependency
129
+ name: minitest
130
+ prerelease: false
131
+ requirement: &id008 !ruby/object:Gem::Requirement
132
+ none: false
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ hash: 3
137
+ segments:
138
+ - 0
139
+ version: "0"
140
+ type: :development
141
+ version_requirements: *id008
142
+ description: Get back more detailed information about the parameters for a method.
143
+ email:
144
+ - joshbuddy@gmail.com
145
+ executables: []
146
+
147
+ extensions: []
148
+
149
+ extra_rdoc_files: []
150
+
151
+ files:
152
+ - .gitignore
153
+ - Gemfile
154
+ - Gemfile.lock
155
+ - README.markdown
156
+ - Rakefile
157
+ - lib/parameters_extra.rb
158
+ - lib/parameters_extra/args.rb
159
+ - lib/parameters_extra/method_mixins.rb
160
+ - lib/parameters_extra/method_registry.rb
161
+ - lib/parameters_extra/processor.rb
162
+ - lib/parameters_extra/version.rb
163
+ - parameters_extra.gemspec
164
+ - test/fixtures/1.rb
165
+ - test/fixtures/2.rb
166
+ - test/fixtures/3.rb
167
+ - test/fixtures/4.rb
168
+ - test/fixtures/5.rb
169
+ - test/helper.rb
170
+ - test/test_autoload.rb
171
+ - test/test_block.rb
172
+ - test/test_bound_method.rb
173
+ - test/test_nested.rb
174
+ - test/test_simple.rb
175
+ - test/test_subclass.rb
176
+ has_rdoc: true
177
+ homepage: https://github.com/joshbuddy/parameters_extra
178
+ licenses: []
179
+
180
+ post_install_message:
181
+ rdoc_options: []
182
+
183
+ require_paths:
184
+ - lib
185
+ required_ruby_version: !ruby/object:Gem::Requirement
186
+ none: false
187
+ requirements:
188
+ - - ">="
189
+ - !ruby/object:Gem::Version
190
+ hash: 3
191
+ segments:
192
+ - 0
193
+ version: "0"
194
+ required_rubygems_version: !ruby/object:Gem::Requirement
195
+ none: false
196
+ requirements:
197
+ - - ">="
198
+ - !ruby/object:Gem::Version
199
+ hash: 3
200
+ segments:
201
+ - 0
202
+ version: "0"
203
+ requirements: []
204
+
205
+ rubyforge_project: parameters_extra
206
+ rubygems_version: 1.3.7
207
+ signing_key:
208
+ specification_version: 3
209
+ summary: Get back more detailed information about the parameters for a method
210
+ test_files:
211
+ - test/fixtures/1.rb
212
+ - test/fixtures/2.rb
213
+ - test/fixtures/3.rb
214
+ - test/fixtures/4.rb
215
+ - test/fixtures/5.rb
216
+ - test/helper.rb
217
+ - test/test_autoload.rb
218
+ - test/test_block.rb
219
+ - test/test_bound_method.rb
220
+ - test/test_nested.rb
221
+ - test/test_simple.rb
222
+ - test/test_subclass.rb