named_parameter 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Named Parameter `v0.0.2`
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
- msg = "expected a Hash but #{@error.argument_name.inspect} received by named method '#{@error.named_method.method.name}'"
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
@@ -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.3"
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-02}
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
- class << self
163
- def no_named_say(phrase)
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.3
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-02 00:00:00.000000000 Z
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: &70006660 !ruby/object:Gem::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: *70006660
24
+ version_requirements: *85151400
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: jeweler
27
- requirement: &70005210 !ruby/object:Gem::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: *70005210
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