named_parameter 0.0.4 → 0.0.5

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.3`
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.2"
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
@@ -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
- def named(def_return)
3
- method = @last_method_added
4
- NamedParameter::NamedMethodTransmuter.transmute method
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.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
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(method_name)
17
- @last_method_added = self.instance_method(method_name)
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(method_name)
22
- @last_method_added = self.method(method_name)
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
@@ -4,14 +4,14 @@
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.name = %q{named_parameter}
8
- s.version = "0.0.4"
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 = %q{2012-08-07}
13
- s.description = %q{Allows named parameter in ruby}
14
- s.email = %q{hugolnx@gmail.com}
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/individual_named_method_feature_spec.rb",
34
- "spec/features/singleton_named_method_feature_spec.rb",
35
- "spec/features/class_self_named_method_feature_spec.rb",
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 = %q{http://github.com/hugolnx/named_parameter}
50
+ s.homepage = "http://github.com/hugolnx/named_parameter"
45
51
  s.licenses = ["MIT"]
46
52
  s.require_paths = ["lib"]
47
- s.rubygems_version = %q{1.6.2}
48
- s.summary = %q{Allows named parameter in ruby}
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