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