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 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