named_parameter 0.0.4 → 0.0.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.
- data/README.md +19 -1
- data/Rakefile +1 -1
- data/lib/.named_parameter.rb.swo +0 -0
- data/lib/named_parameter.rb +2 -0
- data/lib/named_parameter/named_above.rb +28 -0
- data/lib/named_parameter/named_inline.rb +21 -0
- data/lib/named_parameter/named_parameter.rb +29 -11
- data/named_parameter.gemspec +17 -11
- data/spec/features/named_above/class_self_named_method_feature_spec.rb +211 -0
- data/spec/features/named_above/individual_named_method_feature_spec.rb +185 -0
- data/spec/features/named_above/singleton_named_method_feature_spec.rb +185 -0
- data/spec/features/named_inline/class_self_named_method_feature_spec.rb +199 -0
- data/spec/features/named_inline/individual_named_method_feature_spec.rb +166 -0
- data/spec/features/named_inline/singleton_named_method_feature_spec.rb +173 -0
- metadata +15 -9
- data/spec/features/class_self_named_method_feature_spec.rb +0 -197
- data/spec/features/individual_named_method_feature_spec.rb +0 -164
- data/spec/features/singleton_named_method_feature_spec.rb +0 -171
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Named Parameter `v0.0.
|
1
|
+
# Named Parameter `v0.0.4`
|
2
2
|
|
3
3
|
## Description
|
4
4
|
That you ever dream with named parameter in Ruby? Well, you doesn't have to pray to
|
@@ -69,6 +69,24 @@ If you like sigleton classes you will love that:
|
|
69
69
|
Point.move_to(y: 30,x: 50)
|
70
70
|
|
71
71
|
|
72
|
+
And that feature too:
|
73
|
+
|
74
|
+
require 'rubygems'
|
75
|
+
require 'named_parameter'
|
76
|
+
|
77
|
+
class Point
|
78
|
+
extend NamedParameter
|
79
|
+
|
80
|
+
class << self
|
81
|
+
named def move_to(x,y,z=0)
|
82
|
+
puts "Moving to [#{x},#{y},#{z}]"
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
Point.move_to(y: 30,x: 50)
|
88
|
+
|
89
|
+
|
72
90
|
## Use in production?
|
73
91
|
**You (maybe)**:"Oh! Magic! I'll use in my production projects!"
|
74
92
|
**Me**: Wait! Before use this in production, you have to know that gem
|
data/Rakefile
CHANGED
@@ -14,7 +14,7 @@ require 'rake'
|
|
14
14
|
require 'jeweler'
|
15
15
|
Jeweler::Tasks.new do |gem|
|
16
16
|
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
17
|
-
gem.version = "0.0.
|
17
|
+
gem.version = "0.0.5"
|
18
18
|
gem.name = "named_parameter"
|
19
19
|
gem.homepage = "http://github.com/hugolnx/named_parameter"
|
20
20
|
gem.license = "MIT"
|
Binary file
|
data/lib/named_parameter.rb
CHANGED
@@ -2,4 +2,6 @@ require 'named_parameter/named_method'
|
|
2
2
|
require 'named_parameter/named_method_transmuter'
|
3
3
|
require 'named_parameter/errors'
|
4
4
|
require 'named_parameter/error'
|
5
|
+
require 'named_parameter/named_above'
|
6
|
+
require 'named_parameter/named_inline'
|
5
7
|
require 'named_parameter/named_parameter'
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module NamedParameter
|
2
|
+
module NamedAbove
|
3
|
+
private
|
4
|
+
def above_named
|
5
|
+
@named_above = true
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.above_singleton_named(klass)
|
9
|
+
klass.instance_variable_set(:@named_above, true)
|
10
|
+
end
|
11
|
+
|
12
|
+
def above_method_added(name)
|
13
|
+
if @named_above
|
14
|
+
@named_above = false
|
15
|
+
method = self.instance_method name
|
16
|
+
NamedMethodTransmuter.transmute method
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def above_singleton_method_added(name)
|
21
|
+
if @named_above
|
22
|
+
@named_above = false
|
23
|
+
method = self.method name
|
24
|
+
NamedMethodTransmuter.transmute method
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module NamedParameter
|
2
|
+
module NamedInline
|
3
|
+
private
|
4
|
+
def inline_named
|
5
|
+
NamedMethodTransmuter.transmute @last_method_added
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.inline_singleton_named(klass)
|
9
|
+
method = klass.instance_variable_get(:@last_method_added)
|
10
|
+
NamedMethodTransmuter.transmute method
|
11
|
+
end
|
12
|
+
|
13
|
+
def inline_method_added(name)
|
14
|
+
@last_method_added = self.instance_method name
|
15
|
+
end
|
16
|
+
|
17
|
+
def inline_singleton_method_added(name)
|
18
|
+
@last_method_added = self.method name
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -1,24 +1,42 @@
|
|
1
1
|
module NamedParameter
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
include NamedAbove
|
3
|
+
include NamedInline
|
4
|
+
|
5
|
+
def named(above=true)
|
6
|
+
if above
|
7
|
+
above_named
|
8
|
+
else
|
9
|
+
inline_named
|
10
|
+
end
|
5
11
|
end
|
6
12
|
|
7
13
|
def self.extended(klass)
|
8
|
-
klass
|
9
|
-
|
10
|
-
|
11
|
-
|
14
|
+
def_singleton_named(klass) do |above|
|
15
|
+
if above
|
16
|
+
NamedAbove.above_singleton_named(klass)
|
17
|
+
else
|
18
|
+
NamedInline.inline_singleton_named(klass)
|
12
19
|
end
|
13
20
|
end
|
14
21
|
end
|
15
22
|
|
16
|
-
def method_added(
|
17
|
-
|
23
|
+
def method_added(name)
|
24
|
+
inline_method_added name
|
25
|
+
above_method_added name
|
18
26
|
end
|
19
27
|
|
20
28
|
|
21
|
-
def singleton_method_added(
|
22
|
-
|
29
|
+
def singleton_method_added(name)
|
30
|
+
inline_singleton_method_added name
|
31
|
+
above_singleton_method_added name
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
def self.def_singleton_named(klass, &block)
|
36
|
+
klass.singleton_class.instance_eval do
|
37
|
+
define_singleton_method :named do |above=true|
|
38
|
+
block.call(above)
|
39
|
+
end
|
40
|
+
end
|
23
41
|
end
|
24
42
|
end
|
data/named_parameter.gemspec
CHANGED
@@ -4,14 +4,14 @@
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
|
-
s.name =
|
8
|
-
s.version = "0.0.
|
7
|
+
s.name = "named_parameter"
|
8
|
+
s.version = "0.0.5"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Hugo Roque (a.k.a HugoLnx)"]
|
12
|
-
s.date =
|
13
|
-
s.description =
|
14
|
-
s.email =
|
12
|
+
s.date = "2012-08-08"
|
13
|
+
s.description = "Allows named parameter in ruby"
|
14
|
+
s.email = "hugolnx@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"README.md"
|
17
17
|
]
|
@@ -19,20 +19,26 @@ Gem::Specification.new do |s|
|
|
19
19
|
"Gemfile",
|
20
20
|
"README.md",
|
21
21
|
"Rakefile",
|
22
|
+
"lib/.named_parameter.rb.swo",
|
22
23
|
"lib/named_parameter.rb",
|
23
24
|
"lib/named_parameter/error.rb",
|
24
25
|
"lib/named_parameter/errors.rb",
|
25
26
|
"lib/named_parameter/errors/not_hash.rb",
|
26
27
|
"lib/named_parameter/errors/required_parameters.rb",
|
27
28
|
"lib/named_parameter/errors/undefined_parameters.rb",
|
29
|
+
"lib/named_parameter/named_above.rb",
|
30
|
+
"lib/named_parameter/named_inline.rb",
|
28
31
|
"lib/named_parameter/named_method.rb",
|
29
32
|
"lib/named_parameter/named_method_transmuter.rb",
|
30
33
|
"lib/named_parameter/named_parameter.rb",
|
31
34
|
"lib/named_parameter/parameters.rb",
|
32
35
|
"named_parameter.gemspec",
|
33
|
-
"spec/features/
|
34
|
-
"spec/features/
|
35
|
-
"spec/features/
|
36
|
+
"spec/features/named_above/class_self_named_method_feature_spec.rb",
|
37
|
+
"spec/features/named_above/individual_named_method_feature_spec.rb",
|
38
|
+
"spec/features/named_above/singleton_named_method_feature_spec.rb",
|
39
|
+
"spec/features/named_inline/class_self_named_method_feature_spec.rb",
|
40
|
+
"spec/features/named_inline/individual_named_method_feature_spec.rb",
|
41
|
+
"spec/features/named_inline/singleton_named_method_feature_spec.rb",
|
36
42
|
"spec/spec_helper.rb",
|
37
43
|
"spec/unit/error_spec.rb",
|
38
44
|
"spec/unit/errors/not_hash_spec.rb",
|
@@ -41,11 +47,11 @@ Gem::Specification.new do |s|
|
|
41
47
|
"spec/unit/named_method_spec.rb",
|
42
48
|
"spec/unit/named_method_transmuter_spec.rb"
|
43
49
|
]
|
44
|
-
s.homepage =
|
50
|
+
s.homepage = "http://github.com/hugolnx/named_parameter"
|
45
51
|
s.licenses = ["MIT"]
|
46
52
|
s.require_paths = ["lib"]
|
47
|
-
s.rubygems_version =
|
48
|
-
s.summary =
|
53
|
+
s.rubygems_version = "1.8.15"
|
54
|
+
s.summary = "Allows named parameter in ruby"
|
49
55
|
|
50
56
|
if s.respond_to? :specification_version then
|
51
57
|
s.specification_version = 3
|
@@ -0,0 +1,211 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "above named" do
|
4
|
+
describe "class << self named method feature" do
|
5
|
+
describe "becomes possible:" do
|
6
|
+
describe 'Named Parameter' do
|
7
|
+
specify %q{
|
8
|
+
class People
|
9
|
+
extend NamedParameter
|
10
|
+
|
11
|
+
class << self
|
12
|
+
named
|
13
|
+
def say(phrase)
|
14
|
+
phrase
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
People.say phrase: "Hi!"
|
20
|
+
# => "Hi!"
|
21
|
+
} do
|
22
|
+
class People
|
23
|
+
extend NamedParameter
|
24
|
+
|
25
|
+
class << self
|
26
|
+
named
|
27
|
+
def say(phrase)
|
28
|
+
phrase
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
phrase = People.say phrase: "Hi!"
|
34
|
+
phrase.should be == "Hi!"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe 'Optional Named Parameter' do
|
39
|
+
specify %q{
|
40
|
+
class People
|
41
|
+
extend NamedParameter
|
42
|
+
|
43
|
+
class << self
|
44
|
+
named
|
45
|
+
def say(phrase="I'm mute")
|
46
|
+
phrase
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
People.say
|
52
|
+
# => "I'm mute"
|
53
|
+
} do
|
54
|
+
class People
|
55
|
+
extend NamedParameter
|
56
|
+
|
57
|
+
class << self
|
58
|
+
named
|
59
|
+
def say(phrase="I'm mute")
|
60
|
+
phrase
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
phrase = People.say
|
66
|
+
phrase.should be == "I'm mute"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe 'Multiple Named Parameter (in any order)' do
|
71
|
+
specify %q{
|
72
|
+
class Point
|
73
|
+
extend NamedParameter
|
74
|
+
|
75
|
+
class << self
|
76
|
+
named
|
77
|
+
def move_to(x,y)
|
78
|
+
[x,y]
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
Point.move_to x: 1,y: 2
|
84
|
+
# => [1,2]
|
85
|
+
|
86
|
+
Point.move_to y: 2, x: 1
|
87
|
+
# => [1,2]
|
88
|
+
} do
|
89
|
+
class Point
|
90
|
+
extend NamedParameter
|
91
|
+
|
92
|
+
class << self
|
93
|
+
named
|
94
|
+
def move_to(x,y)
|
95
|
+
[x,y]
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
position = Point.move_to x: 1,y: 2
|
101
|
+
position.should be == [1,2]
|
102
|
+
|
103
|
+
position = Point.move_to y: 2, x: 1
|
104
|
+
position.should be == [1,2]
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
describe 'ArgumentError when given undefined args' do
|
109
|
+
specify %q{
|
110
|
+
class People
|
111
|
+
extend NamedParameter
|
112
|
+
|
113
|
+
class << self
|
114
|
+
named
|
115
|
+
def say(phrase)
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
People.say phrase: "hi!",undefined: "test"
|
121
|
+
#=> ArgumentError
|
122
|
+
} do
|
123
|
+
class People
|
124
|
+
extend NamedParameter
|
125
|
+
|
126
|
+
class << self
|
127
|
+
named
|
128
|
+
def say(phrase)
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
lambda{People.say(phrase: "hi!",undefined: "hugo")}.should raise_error ArgumentError, /'undefined'[\w\s]*'say'/
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
describe 'ArgumentError when not given required args' do
|
138
|
+
specify %q{
|
139
|
+
class People
|
140
|
+
extend NamedParameter
|
141
|
+
|
142
|
+
class << self
|
143
|
+
named
|
144
|
+
def say(phrase)
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
People.say
|
150
|
+
#=> ArgumentError
|
151
|
+
} do
|
152
|
+
class People
|
153
|
+
extend NamedParameter
|
154
|
+
|
155
|
+
class << self
|
156
|
+
named
|
157
|
+
def say(phrase)
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
lambda {People.say}.should raise_error ArgumentError, /'phrase'[\w\s]*'say'/
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
describe 'ArgumentError when given a non Hash argument' do
|
167
|
+
specify %q{
|
168
|
+
class People
|
169
|
+
extend NamedParameter
|
170
|
+
|
171
|
+
class << self
|
172
|
+
named
|
173
|
+
def say(phrase)
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
People.say
|
179
|
+
#=> ArgumentError
|
180
|
+
} do
|
181
|
+
class People
|
182
|
+
extend NamedParameter
|
183
|
+
|
184
|
+
class << self
|
185
|
+
named
|
186
|
+
def say(phrase)
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
lambda {People.say("non Hash argument")}.should raise_error ArgumentError, /"non Hash argument"[\w\s]*'say'/
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
describe "no named method" do
|
197
|
+
it "can be called with normal parameters" do
|
198
|
+
class People
|
199
|
+
class << self
|
200
|
+
def no_named_say(phrase)
|
201
|
+
phrase
|
202
|
+
end
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
phrase = People.no_named_say "Hi!"
|
207
|
+
phrase.should be == "Hi!"
|
208
|
+
end
|
209
|
+
end
|
210
|
+
end
|
211
|
+
end
|
@@ -0,0 +1,185 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "above named" do
|
4
|
+
describe "individual named method feature" do
|
5
|
+
describe "becomes possible:" do
|
6
|
+
describe 'Named Parameter' do
|
7
|
+
specify %q{
|
8
|
+
class People
|
9
|
+
extend NamedParameter
|
10
|
+
|
11
|
+
named
|
12
|
+
def say(phrase)
|
13
|
+
phrase
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
People.new.say phrase: "Hi!"
|
18
|
+
# => "Hi!"
|
19
|
+
} do
|
20
|
+
class People
|
21
|
+
extend NamedParameter
|
22
|
+
|
23
|
+
named
|
24
|
+
def say(phrase)
|
25
|
+
phrase
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
phrase = People.new.say phrase: "Hi!"
|
30
|
+
phrase.should be == "Hi!"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe 'Optional Named Parameter' do
|
35
|
+
specify %q{
|
36
|
+
class People
|
37
|
+
extend NamedParameter
|
38
|
+
|
39
|
+
named
|
40
|
+
def say(phrase="I'm mute")
|
41
|
+
phrase
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
People.new.say
|
46
|
+
# => "I'm mute"
|
47
|
+
} do
|
48
|
+
class People
|
49
|
+
extend NamedParameter
|
50
|
+
|
51
|
+
named
|
52
|
+
def say(phrase="I'm mute")
|
53
|
+
phrase
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
phrase = People.new.say
|
58
|
+
phrase.should be == "I'm mute"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe 'Multiple Named Parameter (in any order)' do
|
63
|
+
specify %q{
|
64
|
+
class Point
|
65
|
+
extend NamedParameter
|
66
|
+
|
67
|
+
named
|
68
|
+
def move_to(x,y)
|
69
|
+
[x,y]
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
Point.new.move_to x: 1,y: 2
|
74
|
+
# => [1,2]
|
75
|
+
|
76
|
+
Point.new.move_to y: 2, x: 1
|
77
|
+
# => [1,2]
|
78
|
+
} do
|
79
|
+
class Point
|
80
|
+
extend NamedParameter
|
81
|
+
|
82
|
+
named
|
83
|
+
def move_to(x,y)
|
84
|
+
[x,y]
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
position = Point.new.move_to x: 1,y: 2
|
89
|
+
position.should be == [1,2]
|
90
|
+
|
91
|
+
position = Point.new.move_to y: 2, x: 1
|
92
|
+
position.should be == [1,2]
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
describe 'ArgumentError when given undefined args' do
|
97
|
+
specify %q{
|
98
|
+
class People
|
99
|
+
extend NamedParameter
|
100
|
+
|
101
|
+
named
|
102
|
+
def say(phrase)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
People.new.say phrase: "hi!",undefined: "test"
|
107
|
+
#=> ArgumentError
|
108
|
+
} do
|
109
|
+
class People
|
110
|
+
extend NamedParameter
|
111
|
+
|
112
|
+
named
|
113
|
+
def say(phrase)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
lambda{People.new.say(phrase: "hi!",undefined: "hugo")}.should raise_error ArgumentError, /'undefined'[\w\s]*'say'/
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
describe 'ArgumentError when not given required args' do
|
122
|
+
specify %q{
|
123
|
+
class People
|
124
|
+
extend NamedParameter
|
125
|
+
|
126
|
+
named
|
127
|
+
def say(phrase)
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
People.new.say
|
132
|
+
#=> ArgumentError
|
133
|
+
} do
|
134
|
+
class People
|
135
|
+
extend NamedParameter
|
136
|
+
|
137
|
+
named
|
138
|
+
def say(phrase)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
lambda {People.new.say}.should raise_error ArgumentError, /'phrase'[\w\s]*'say'/
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
describe 'ArgumentError when given a non Hash argument' do
|
147
|
+
specify %q{
|
148
|
+
class People
|
149
|
+
extend NamedParameter
|
150
|
+
|
151
|
+
named
|
152
|
+
def say(phrase)
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
People.new.say
|
157
|
+
#=> ArgumentError
|
158
|
+
} do
|
159
|
+
class People
|
160
|
+
extend NamedParameter
|
161
|
+
|
162
|
+
named
|
163
|
+
def say(phrase)
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
lambda {People.new.say("non Hash argument")}.should raise_error ArgumentError, /"non Hash argument"[\w\s]*'say'/
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
describe "no named method" do
|
173
|
+
it "can be called with normal parameters" do
|
174
|
+
class People
|
175
|
+
def no_named_say(phrase)
|
176
|
+
phrase
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
phrase = People.new.no_named_say "Hi!"
|
181
|
+
phrase.should be == "Hi!"
|
182
|
+
end
|
183
|
+
end
|
184
|
+
end
|
185
|
+
end
|