named-parameters 0.0.11 → 0.0.12
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/README.md +28 -0
- data/RELEASENOTES +3 -0
- data/VERSION +1 -1
- data/lib/named-parameters/module.rb +38 -6
- data/named-parameters.gemspec +2 -2
- data/spec/named-parameters_spec.rb +20 -0
- metadata +4 -4
data/README.md
CHANGED
@@ -164,6 +164,34 @@ method:
|
|
164
164
|
`declared_parameters` is also available from the class methods of user defined
|
165
165
|
classes.
|
166
166
|
|
167
|
+
Filtering Arguments
|
168
|
+
-------------------
|
169
|
+
Sometimes you'll have a `Hash` object that will have a bunch of keys that may
|
170
|
+
or may not comply to the parameter declaration of a method, but you may to use
|
171
|
+
the same object everywhere without having to figure out what keys are
|
172
|
+
applicable to a method call:
|
173
|
+
|
174
|
+
options = { :x => 1, :y => :z, :a => 'somevalue' }
|
175
|
+
|
176
|
+
has_named_parameters :foo, :required => [ :x ]
|
177
|
+
def foo options = { }
|
178
|
+
options.inspect
|
179
|
+
end
|
180
|
+
|
181
|
+
has_named_parameters :bar, :required => [ :y ], :optional => [ :a ]
|
182
|
+
def bar options = { }
|
183
|
+
options.inspect
|
184
|
+
end
|
185
|
+
|
186
|
+
foo options # => ArgumentError! :y and :a not recognized
|
187
|
+
bar options # => ArgumentError! :x not recognized
|
188
|
+
|
189
|
+
Use the `filter_parameters` method against the options object to make it
|
190
|
+
comply to the declaration:
|
191
|
+
|
192
|
+
foo filter_parameters(options) # => [ :x ]
|
193
|
+
bar filter_parameters(options) # => [ :a, :y ]
|
194
|
+
|
167
195
|
Permissive Mode
|
168
196
|
---------------
|
169
197
|
When a method is declared with `has_named_parameters` that method will only
|
data/RELEASENOTES
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.12
|
@@ -33,14 +33,15 @@ module NamedParameters
|
|
33
33
|
# declared in the the `has_named_parameters` clause, or the list specified
|
34
34
|
# in either the `requires` and `recognizes` clause.
|
35
35
|
#
|
36
|
-
# @
|
36
|
+
# @return [Array<Symbol>] the list of symbols representing the name of the declared
|
37
37
|
# parameters.
|
38
38
|
#
|
39
39
|
def declared_parameters
|
40
40
|
klazz = self.instance_of?(Class) ? self : self.class
|
41
41
|
specs = klazz.send :specs
|
42
42
|
|
43
|
-
|
43
|
+
caller = block_given? ? yield : calling_method # insane-fucker! :-)
|
44
|
+
method = self.instance_of?(Class) ? :"self.#{caller}" : caller
|
44
45
|
spec = specs[klazz.send(:key_for, method)]
|
45
46
|
return [] if spec.nil?
|
46
47
|
|
@@ -50,13 +51,44 @@ module NamedParameters
|
|
50
51
|
[ :required, :optional, :oneof ].map{ |k| spec[k].map(&mapper) }.flatten.sort(&sorter)
|
51
52
|
end
|
52
53
|
|
54
|
+
# Filter out keys from `options` that are not declared as parameter to the
|
55
|
+
# method:
|
56
|
+
#
|
57
|
+
# has_named_parameters :foo, :requires => :x
|
58
|
+
# def foo options = { }
|
59
|
+
# options.inspect
|
60
|
+
# end
|
61
|
+
#
|
62
|
+
# options = { :x => 1, :y => 2, :z => 3 }
|
63
|
+
#
|
64
|
+
# # the following will fail because :y and :z is not recognized/declared
|
65
|
+
# foo options # => ArgumentError!
|
66
|
+
#
|
67
|
+
# # the following will not fail because we've applied the filter
|
68
|
+
# foo filter_parameters(options) # => [ :x ]
|
69
|
+
#
|
70
|
+
# @param [Hash] options the options argument to the method.
|
71
|
+
#
|
72
|
+
# @param [Array<Symbol>] the list of symbols representing the declared
|
73
|
+
# parameters used to filter `options`. Optional, the list returned by
|
74
|
+
# `declared_parameters` is used by default.
|
75
|
+
#
|
76
|
+
# @return [Hash] a `Hash` whose keys are limited to what's declared as
|
77
|
+
# as parameter to the method.
|
78
|
+
#
|
79
|
+
def filter_parameters options, filter = nil
|
80
|
+
caller = calling_method
|
81
|
+
filter ||= declared_parameters{ caller }
|
82
|
+
options.reject{ |key, value| !filter.include?(key) }
|
83
|
+
end
|
84
|
+
|
53
85
|
# returns the name of the current method
|
54
|
-
def current_method
|
86
|
+
def current_method # :nodoc:
|
55
87
|
caller[0][/`([^']*)'/, 1].to_sym
|
56
88
|
end
|
57
89
|
|
58
90
|
# returns the name of the calling method
|
59
|
-
def calling_method
|
91
|
+
def calling_method # :nodoc:
|
60
92
|
caller[1][/`([^']*)'/, 1].to_sym
|
61
93
|
end
|
62
94
|
|
@@ -157,7 +189,7 @@ module NamedParameters
|
|
157
189
|
# has_named_parameters :'self.new', :required => params, :strict
|
158
190
|
# has_named_parameters :initialize, :required => params, :strict
|
159
191
|
#
|
160
|
-
# @param [Array] params the lists of parameters. The list is expected
|
192
|
+
# @param [Array<Symbol>] params the lists of parameters. The list is expected
|
161
193
|
# to be an `Array` of symbols matching the names of the required
|
162
194
|
# parameters.
|
163
195
|
#
|
@@ -174,7 +206,7 @@ module NamedParameters
|
|
174
206
|
# has_named_parameters :'self.new', :optional => params, :strict
|
175
207
|
# has_named_parameters :initialize, :optional => params, :strict
|
176
208
|
#
|
177
|
-
# @param [Array] params the lists of parameters. The list is expected
|
209
|
+
# @param [Array<Symbol>] params the lists of parameters. The list is expected
|
178
210
|
# to be an `Array` of symbols matching the names of the optional
|
179
211
|
# parameters.
|
180
212
|
#
|
data/named-parameters.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{named-parameters}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.12"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Juris Galang"]
|
12
|
-
s.date = %q{2010-11-
|
12
|
+
s.date = %q{2010-11-25}
|
13
13
|
s.description = %q{This gem simulates named-parameters in Ruby.
|
14
14
|
It's a complement to the common Ruby idiom of using Hash args to emulate
|
15
15
|
the use of named parameters. }
|
@@ -226,4 +226,24 @@ describe "NamedParameters" do
|
|
226
226
|
o.parameters.should eql [ :a, :b, :c, :x, :y ]
|
227
227
|
DeclaredParameters.singleton(:w => :w, :a => :a).should eql [ :a, :b, :c, :w, :x, :y, :z ]
|
228
228
|
end
|
229
|
+
|
230
|
+
it "should not return nil when declared_parameters is called on uninstrumented method" do
|
231
|
+
class DeclaredParameters
|
232
|
+
has_named_parameters :'self.boogey',
|
233
|
+
:required => [ :w ],
|
234
|
+
:optional => [ :x, [ :y, 1 ], { :z => 1 } ],
|
235
|
+
:oneof => [ :a, :b, :c ]
|
236
|
+
def self.boogey opts = { }
|
237
|
+
declared_parameters
|
238
|
+
end
|
239
|
+
|
240
|
+
def boogey
|
241
|
+
declared_parameters
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
o = DeclaredParameters.new(:x => :x, :y => :y)
|
246
|
+
o.boogey.should eql []
|
247
|
+
DeclaredParameters.boogey(:w => :w, :a => :a).should eql [ :a, :b, :c, :w, :x, :y, :z ]
|
248
|
+
end
|
229
249
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: named-parameters
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 7
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 12
|
10
|
+
version: 0.0.12
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Juris Galang
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-11-
|
18
|
+
date: 2010-11-25 00:00:00 -08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|