named_parameter 0.0.3 → 0.0.4
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 +18 -1
- data/lib/named_parameter/errors/not_hash.rb +1 -3
- data/lib/named_parameter/named_parameter.rb +9 -0
- data/named_parameter.gemspec +3 -3
- data/spec/features/class_self_named_method_feature_spec.rb +197 -0
- data/spec/features/singleton_named_method_feature_spec.rb +2 -4
- metadata +7 -7
- data/spec/features/collective_named_methods_feature_spec.rb +0 -60
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Named Parameter `v0.0.
|
1
|
+
# Named Parameter `v0.0.3`
|
2
2
|
|
3
3
|
## Description
|
4
4
|
That you ever dream with named parameter in Ruby? Well, you doesn't have to pray to
|
@@ -52,6 +52,23 @@ Multiple arguments? Of course!
|
|
52
52
|
|
53
53
|
Point.new.move_to(y: 30,x: 50)
|
54
54
|
|
55
|
+
|
56
|
+
If you like sigleton classes you will love that:
|
57
|
+
|
58
|
+
require 'rubygems'
|
59
|
+
require 'named_parameter'
|
60
|
+
|
61
|
+
class Point
|
62
|
+
extend NamedParameter
|
63
|
+
|
64
|
+
named def self.move_to(x,y,z=0)
|
65
|
+
puts "Moving to [#{x},#{y},#{z}]"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
Point.move_to(y: 30,x: 50)
|
70
|
+
|
71
|
+
|
55
72
|
## Use in production?
|
56
73
|
**You (maybe)**:"Oh! Magic! I'll use in my production projects!"
|
57
74
|
**Me**: Wait! Before use this in production, you have to know that gem
|
@@ -20,9 +20,7 @@ module NamedParameter::Errors
|
|
20
20
|
|
21
21
|
private
|
22
22
|
def error_message
|
23
|
-
|
24
|
-
p msg
|
25
|
-
msg
|
23
|
+
return "expected a Hash but #{@error.argument_name.inspect} received by named method '#{@error.named_method.method.name}'"
|
26
24
|
end
|
27
25
|
end
|
28
26
|
end
|
@@ -4,6 +4,15 @@ module NamedParameter
|
|
4
4
|
NamedParameter::NamedMethodTransmuter.transmute method
|
5
5
|
end
|
6
6
|
|
7
|
+
def self.extended(klass)
|
8
|
+
klass.singleton_class.instance_eval do
|
9
|
+
define_singleton_method :named do |def_return|
|
10
|
+
method = klass.instance_variable_get(:@last_method_added)
|
11
|
+
NamedParameter::NamedMethodTransmuter.transmute method
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
7
16
|
def method_added(method_name)
|
8
17
|
@last_method_added = self.instance_method(method_name)
|
9
18
|
end
|
data/named_parameter.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{named_parameter}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.4"
|
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 = %q{2012-08-
|
12
|
+
s.date = %q{2012-08-07}
|
13
13
|
s.description = %q{Allows named parameter in ruby}
|
14
14
|
s.email = %q{hugolnx@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -30,9 +30,9 @@ Gem::Specification.new do |s|
|
|
30
30
|
"lib/named_parameter/named_parameter.rb",
|
31
31
|
"lib/named_parameter/parameters.rb",
|
32
32
|
"named_parameter.gemspec",
|
33
|
-
"spec/features/collective_named_methods_feature_spec.rb",
|
34
33
|
"spec/features/individual_named_method_feature_spec.rb",
|
35
34
|
"spec/features/singleton_named_method_feature_spec.rb",
|
35
|
+
"spec/features/class_self_named_method_feature_spec.rb",
|
36
36
|
"spec/spec_helper.rb",
|
37
37
|
"spec/unit/error_spec.rb",
|
38
38
|
"spec/unit/errors/not_hash_spec.rb",
|
@@ -0,0 +1,197 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "singleton named method feature" do
|
4
|
+
describe "becomes possible:" do
|
5
|
+
describe 'Named Parameter' do
|
6
|
+
specify %q{
|
7
|
+
class People
|
8
|
+
extend NamedParameter
|
9
|
+
|
10
|
+
class << self
|
11
|
+
named def say(phrase)
|
12
|
+
phrase
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
People.say phrase: "Hi!"
|
18
|
+
# => "Hi!"
|
19
|
+
} do
|
20
|
+
class People
|
21
|
+
extend NamedParameter
|
22
|
+
|
23
|
+
class << self
|
24
|
+
named def say(phrase)
|
25
|
+
phrase
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
phrase = People.say phrase: "Hi!"
|
31
|
+
phrase.should be == "Hi!"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe 'Optional Named Parameter' do
|
36
|
+
specify %q{
|
37
|
+
class People
|
38
|
+
extend NamedParameter
|
39
|
+
|
40
|
+
class << self
|
41
|
+
named def say(phrase="I'm mute")
|
42
|
+
phrase
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
People.say
|
48
|
+
# => "I'm mute"
|
49
|
+
} do
|
50
|
+
class People
|
51
|
+
extend NamedParameter
|
52
|
+
|
53
|
+
class << self
|
54
|
+
named def say(phrase="I'm mute")
|
55
|
+
phrase
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
phrase = People.say
|
61
|
+
phrase.should be == "I'm mute"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe 'Multiple Named Parameter (in any order)' do
|
66
|
+
specify %q{
|
67
|
+
class Point
|
68
|
+
extend NamedParameter
|
69
|
+
|
70
|
+
class << self
|
71
|
+
named def move_to(x,y)
|
72
|
+
[x,y]
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
Point.move_to x: 1,y: 2
|
78
|
+
# => [1,2]
|
79
|
+
|
80
|
+
Point.move_to y: 2, x: 1
|
81
|
+
# => [1,2]
|
82
|
+
} do
|
83
|
+
class Point
|
84
|
+
extend NamedParameter
|
85
|
+
|
86
|
+
class << self
|
87
|
+
named def move_to(x,y)
|
88
|
+
[x,y]
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
position = Point.move_to x: 1,y: 2
|
94
|
+
position.should be == [1,2]
|
95
|
+
|
96
|
+
position = Point.move_to y: 2, x: 1
|
97
|
+
position.should be == [1,2]
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
describe 'ArgumentError when given undefined args' do
|
102
|
+
specify %q{
|
103
|
+
class People
|
104
|
+
extend NamedParameter
|
105
|
+
|
106
|
+
class << self
|
107
|
+
named def say(phrase)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
People.say phrase: "hi!",undefined: "test"
|
113
|
+
#=> ArgumentError
|
114
|
+
} do
|
115
|
+
class People
|
116
|
+
extend NamedParameter
|
117
|
+
|
118
|
+
class << self
|
119
|
+
named def say(phrase)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
lambda{People.say(phrase: "hi!",undefined: "hugo")}.should raise_error ArgumentError, /'undefined'[\w\s]*'say'/
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
describe 'ArgumentError when not given required args' do
|
129
|
+
specify %q{
|
130
|
+
class People
|
131
|
+
extend NamedParameter
|
132
|
+
|
133
|
+
class << self
|
134
|
+
named def say(phrase)
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
People.say
|
140
|
+
#=> ArgumentError
|
141
|
+
} do
|
142
|
+
class People
|
143
|
+
extend NamedParameter
|
144
|
+
|
145
|
+
class << self
|
146
|
+
named def say(phrase)
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
lambda {People.say}.should raise_error ArgumentError, /'phrase'[\w\s]*'say'/
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
describe 'ArgumentError when given a non Hash argument' do
|
156
|
+
specify %q{
|
157
|
+
class People
|
158
|
+
extend NamedParameter
|
159
|
+
|
160
|
+
class << self
|
161
|
+
named def say(phrase)
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
People.say
|
167
|
+
#=> ArgumentError
|
168
|
+
} do
|
169
|
+
class People
|
170
|
+
extend NamedParameter
|
171
|
+
|
172
|
+
class << self
|
173
|
+
named def say(phrase)
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
lambda {People.say("non Hash argument")}.should raise_error ArgumentError, /"non Hash argument"[\w\s]*'say'/
|
179
|
+
end
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
describe "no named method" do
|
184
|
+
it "can be called with normal parameters" do
|
185
|
+
class People
|
186
|
+
class << self
|
187
|
+
def no_named_say(phrase)
|
188
|
+
phrase
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
phrase = People.no_named_say "Hi!"
|
194
|
+
phrase.should be == "Hi!"
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
@@ -159,10 +159,8 @@ describe "singleton named method feature" do
|
|
159
159
|
describe "no named method" do
|
160
160
|
it "can be called with normal parameters" do
|
161
161
|
class People
|
162
|
-
|
163
|
-
|
164
|
-
phrase
|
165
|
-
end
|
162
|
+
def self.no_named_say(phrase)
|
163
|
+
phrase
|
166
164
|
end
|
167
165
|
end
|
168
166
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: named_parameter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-08-
|
12
|
+
date: 2012-08-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
16
|
-
requirement: &
|
16
|
+
requirement: &85151400 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 1.0.0
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *85151400
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: jeweler
|
27
|
-
requirement: &
|
27
|
+
requirement: &85149780 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
version: 1.6.0
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *85149780
|
36
36
|
description: Allows named parameter in ruby
|
37
37
|
email: hugolnx@gmail.com
|
38
38
|
executables: []
|
@@ -54,9 +54,9 @@ files:
|
|
54
54
|
- lib/named_parameter/named_parameter.rb
|
55
55
|
- lib/named_parameter/parameters.rb
|
56
56
|
- named_parameter.gemspec
|
57
|
-
- spec/features/collective_named_methods_feature_spec.rb
|
58
57
|
- spec/features/individual_named_method_feature_spec.rb
|
59
58
|
- spec/features/singleton_named_method_feature_spec.rb
|
59
|
+
- spec/features/class_self_named_method_feature_spec.rb
|
60
60
|
- spec/spec_helper.rb
|
61
61
|
- spec/unit/error_spec.rb
|
62
62
|
- spec/unit/errors/not_hash_spec.rb
|
@@ -1,60 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe "collective named method feature" do
|
4
|
-
before :each do
|
5
|
-
pending "Collective named methods don't is supported yet"
|
6
|
-
end
|
7
|
-
|
8
|
-
describe "named method" do
|
9
|
-
it "should be called with a hash like parameter" do
|
10
|
-
phrase = @test.say phrase: "Hi!"
|
11
|
-
phrase.should be == "Hi!"
|
12
|
-
end
|
13
|
-
|
14
|
-
describe "parameter" do
|
15
|
-
it "should can be optional" do
|
16
|
-
@test.optional_say.should be == "I'm mute"
|
17
|
-
end
|
18
|
-
|
19
|
-
context "multiple" do
|
20
|
-
it "should can have any order" do
|
21
|
-
@test.move_to(y: 2, x:1).should be == [1,2]
|
22
|
-
end
|
23
|
-
|
24
|
-
it "should can be optional" do
|
25
|
-
@test.three_params_first_optional(y:10,z:20).should be == [:x,10,20]
|
26
|
-
@test.three_params_middle_optional(z:20,x:10).should be == [10,:y,20]
|
27
|
-
@test.three_params_last_optional(x:20,y:10).should be == [20,10,:z]
|
28
|
-
@test.three_params_first_2_optionals(z:10).should be == [:x,:y,10]
|
29
|
-
@test.three_params_last_2_optionals(x:10).should be == [10,:y,:z]
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
context "after reopen class" do
|
34
|
-
it "should be a no named method" do
|
35
|
-
pending :bug
|
36
|
-
@test.after_opened_say("hello").should be == "hello"
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
context "ArgumentError when" do
|
41
|
-
it "called but not defined" do
|
42
|
-
lambda{@test.say(phrase: "hi!",undefined: "hugo")}.should raise_error ArgumentError, /'undefined'[\w\s]*'say'/
|
43
|
-
lambda{@test.say(undefined: "hugo")}.should raise_error ArgumentError
|
44
|
-
end
|
45
|
-
|
46
|
-
it "required but not called" do
|
47
|
-
lambda {@test.say}.should raise_error ArgumentError
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
describe "no named method" do
|
55
|
-
it "should be call with normal parameters" do
|
56
|
-
phrase = @test.no_named_say "Hi!"
|
57
|
-
phrase.should be == "Hi!"
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|