named_parameter 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/{README → README.md} +12 -3
- data/Rakefile +1 -1
- data/lib/named_parameter/errors/not_hash.rb +28 -0
- data/lib/named_parameter/errors.rb +1 -0
- data/lib/named_parameter/named_method.rb +8 -4
- data/named_parameter.gemspec +6 -6
- data/spec/features/individual_named_method_feature_spec.rb +21 -0
- data/spec/unit/errors/not_hash_spec.rb +121 -0
- data/spec/unit/named_method_spec.rb +7 -0
- metadata +7 -7
- data/spec/interfaces/errors_interface.rb +0 -9
- data/spec/support/interface_helper.rb +0 -17
data/{README → README.md}
RENAMED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Named Parameter `v0.0.
|
1
|
+
# Named Parameter `v0.0.2`
|
2
2
|
|
3
3
|
## Description
|
4
4
|
That you ever dream with named parameter in Ruby? Well, you doesn't have to pray to
|
@@ -6,9 +6,12 @@ Ruby's 2.0 have this, just install this gem and have fun!
|
|
6
6
|
|
7
7
|
## How it works
|
8
8
|
Just extend the module NamedParameter in your class/module and use the method 'named'
|
9
|
-
before define your method, when you call it, use a hash
|
10
|
-
|
9
|
+
before define your method, when you call it, use a hash with parameters name as keys.
|
10
|
+
See this example:
|
11
11
|
|
12
|
+
require 'rubygems'
|
13
|
+
require 'named_parameter'
|
14
|
+
|
12
15
|
class People
|
13
16
|
extend NamedParameter
|
14
17
|
|
@@ -21,6 +24,9 @@ name. See this example:
|
|
21
24
|
|
22
25
|
Or maybe you want to define an optional parameter, no problem!
|
23
26
|
|
27
|
+
require 'rubygems'
|
28
|
+
require 'named_parameter'
|
29
|
+
|
24
30
|
class People
|
25
31
|
extend NamedParameter
|
26
32
|
|
@@ -33,6 +39,9 @@ Or maybe you want to define an optional parameter, no problem!
|
|
33
39
|
|
34
40
|
Multiple arguments? Of course!
|
35
41
|
|
42
|
+
require 'rubygems'
|
43
|
+
require 'named_parameter'
|
44
|
+
|
36
45
|
class Point
|
37
46
|
extend NamedParameter
|
38
47
|
|
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.
|
17
|
+
gem.version = "0.0.2"
|
18
18
|
gem.name = "named_parameter"
|
19
19
|
gem.homepage = "http://github.com/hugolnx/named_parameter"
|
20
20
|
gem.license = "MIT"
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module NamedParameter::Errors
|
2
|
+
class NotHash
|
3
|
+
def self.all_when(named_method,options)
|
4
|
+
args = options[:called_with]
|
5
|
+
if args.is_a? Hash
|
6
|
+
[]
|
7
|
+
else
|
8
|
+
error = NamedParameter::Error.new(named_method,args,caller)
|
9
|
+
[NotHash.new(error)]
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def initialize(error)
|
14
|
+
@error = error
|
15
|
+
end
|
16
|
+
|
17
|
+
def raise_args
|
18
|
+
[error_message,@error.backtrace]
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
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
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -15,10 +15,14 @@ module NamedParameter
|
|
15
15
|
|
16
16
|
def errors_when_called_with(args={})
|
17
17
|
errors = []
|
18
|
-
errors += Errors::
|
19
|
-
|
20
|
-
errors
|
21
|
-
|
18
|
+
errors += Errors::NotHash.all_when self,
|
19
|
+
:called_with => args
|
20
|
+
if errors.empty?
|
21
|
+
errors += Errors::UndefinedParameters.all_when self,
|
22
|
+
:called_with => args
|
23
|
+
errors += Errors::RequiredParameters.all_when self,
|
24
|
+
:called_with => args
|
25
|
+
end
|
22
26
|
errors
|
23
27
|
end
|
24
28
|
|
data/named_parameter.gemspec
CHANGED
@@ -5,24 +5,25 @@
|
|
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.2"
|
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{2011-05-
|
12
|
+
s.date = %q{2011-05-13}
|
13
13
|
s.description = %q{Allows named parameter in ruby}
|
14
14
|
s.email = %q{hugolnx@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
16
|
-
"README"
|
16
|
+
"README.md"
|
17
17
|
]
|
18
18
|
s.files = [
|
19
19
|
"Gemfile",
|
20
|
-
"README",
|
20
|
+
"README.md",
|
21
21
|
"Rakefile",
|
22
22
|
"lib/.named_parameter.rb.swo",
|
23
23
|
"lib/named_parameter.rb",
|
24
24
|
"lib/named_parameter/error.rb",
|
25
25
|
"lib/named_parameter/errors.rb",
|
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",
|
28
29
|
"lib/named_parameter/named_method.rb",
|
@@ -32,10 +33,9 @@ Gem::Specification.new do |s|
|
|
32
33
|
"named_parameter.gemspec",
|
33
34
|
"spec/features/collective_named_methods_feature_spec.rb",
|
34
35
|
"spec/features/individual_named_method_feature_spec.rb",
|
35
|
-
"spec/interfaces/errors_interface.rb",
|
36
36
|
"spec/spec_helper.rb",
|
37
|
-
"spec/support/interface_helper.rb",
|
38
37
|
"spec/unit/error_spec.rb",
|
38
|
+
"spec/unit/errors/not_hash_spec.rb",
|
39
39
|
"spec/unit/errors/required_parameters_spec.rb",
|
40
40
|
"spec/unit/errors/undefined_parameters_spec.rb",
|
41
41
|
"spec/unit/named_method_spec.rb",
|
@@ -126,6 +126,27 @@ describe "individual named method feature" do
|
|
126
126
|
lambda {People.new.say}.should raise_error ArgumentError, /'phrase'[\w\s]*'say'/
|
127
127
|
end
|
128
128
|
end
|
129
|
+
|
130
|
+
describe 'ArgumentError when given a non Hash argument' do
|
131
|
+
specify %q{
|
132
|
+
class People
|
133
|
+
extend NamedParameter
|
134
|
+
named def say(phrase)
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
People.new.say
|
139
|
+
#=> ArgumentError
|
140
|
+
} do
|
141
|
+
class People
|
142
|
+
extend NamedParameter
|
143
|
+
named def say(phrase)
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
lambda {People.new.say("non Hash argument")}.should raise_error ArgumentError, /"non Hash argument"[\w\s]*'say'/
|
148
|
+
end
|
149
|
+
end
|
129
150
|
end
|
130
151
|
|
131
152
|
describe "no named method" do
|
@@ -0,0 +1,121 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module NamedParameter::Errors
|
4
|
+
describe NotHash do
|
5
|
+
describe '#initialize(error)' do
|
6
|
+
describe 'initialize instance variables' do
|
7
|
+
specify '@error its equal to error' do
|
8
|
+
specific_error = NotHash.new :error
|
9
|
+
specific_error.instance_variable_get(:@error).should be == :error
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '#raise_args' do
|
15
|
+
before :each do
|
16
|
+
# prevention from dependencies
|
17
|
+
@error = stub(:error).as_null_object
|
18
|
+
@error.stub_chain('named_method.method.name')
|
19
|
+
end
|
20
|
+
|
21
|
+
let :instance do
|
22
|
+
NotHash.new @error
|
23
|
+
end
|
24
|
+
|
25
|
+
describe 'return' do
|
26
|
+
let :the_return do
|
27
|
+
instance.raise_args
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'is an array of 2 elements' do
|
31
|
+
the_return.should be_an Array
|
32
|
+
the_return.should have(2).elements
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
describe 'first element' do
|
37
|
+
let :first_element do
|
38
|
+
the_return.first
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'is a String of the error message' do
|
42
|
+
first_element.should be_a String
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'include the name of argument envolved in the error' do
|
46
|
+
@error.stub :argument_name => 'arg_name'
|
47
|
+
first_element.should include 'arg_name'
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'include the name of method envolved in the error' do
|
51
|
+
@error.stub_chain('named_method.method.name').and_return('method_name')
|
52
|
+
first_element.should include 'method_name'
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
describe 'second element' do
|
58
|
+
let :second_element do
|
59
|
+
the_return[1]
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'is an Array of backtrace' do
|
63
|
+
backtrace = [:backtrace]
|
64
|
+
@error.stub(:backtrace).and_return(backtrace)
|
65
|
+
second_element.should be == backtrace
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
|
72
|
+
describe 'integrations' do
|
73
|
+
after :each do
|
74
|
+
instance.raise_args
|
75
|
+
end
|
76
|
+
|
77
|
+
specify '@error.argument_name' do
|
78
|
+
@error.should_receive :argument_name
|
79
|
+
end
|
80
|
+
|
81
|
+
specify '@error.named_method' do
|
82
|
+
@error.should_receive :named_method
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
describe '.all_when(named_method,{called_with:arg})' do
|
88
|
+
describe 'return' do
|
89
|
+
before :each do
|
90
|
+
@named_method = stub(:named_method,
|
91
|
+
:parameters => [[:req,:param1]],
|
92
|
+
:required_parameters => [:param1],
|
93
|
+
:have_a_parameter_like? => false)
|
94
|
+
@args = {:arg_name => :value}
|
95
|
+
end
|
96
|
+
|
97
|
+
let :the_return do
|
98
|
+
NotHash.all_when(@named_method,:called_with => @args)
|
99
|
+
end
|
100
|
+
|
101
|
+
it 'is an Array' do
|
102
|
+
the_return.should be_an Array
|
103
|
+
end
|
104
|
+
|
105
|
+
context 'given passed something that not a Hash as argument' do
|
106
|
+
it 'have one element' do
|
107
|
+
@args = "not a hash"
|
108
|
+
the_return.should have(1).element
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
context 'given passed a Hash' do
|
113
|
+
it 'is empty' do
|
114
|
+
@args = {:param1 => 'value1'}
|
115
|
+
the_return.should be_empty
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
@@ -56,6 +56,7 @@ module NamedParameter
|
|
56
56
|
before :each do
|
57
57
|
Errors::RequiredParameters.stub!(:all_when).and_return([])
|
58
58
|
Errors::UndefinedParameters.stub!(:all_when).and_return([])
|
59
|
+
Errors::NotHash.stub!(:all_when).and_return([])
|
59
60
|
method = @instance.method(:method1)
|
60
61
|
@named_method = NamedMethod.new(method)
|
61
62
|
end
|
@@ -72,6 +73,12 @@ module NamedParameter
|
|
72
73
|
.and_return([])
|
73
74
|
@named_method.errors_when_called_with(:args)
|
74
75
|
end
|
76
|
+
|
77
|
+
it "Errors::NotHash.all_when(method,{called_with:args})" do
|
78
|
+
Errors::NotHash.should_receive(:all_when)
|
79
|
+
.and_return([])
|
80
|
+
@named_method.errors_when_called_with(:args)
|
81
|
+
end
|
75
82
|
end
|
76
83
|
end
|
77
84
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: named_parameter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Hugo Roque (a.k.a HugoLnx)
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-05-
|
13
|
+
date: 2011-05-13 00:00:00 -03:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -42,15 +42,16 @@ executables: []
|
|
42
42
|
extensions: []
|
43
43
|
|
44
44
|
extra_rdoc_files:
|
45
|
-
- README
|
45
|
+
- README.md
|
46
46
|
files:
|
47
47
|
- Gemfile
|
48
|
-
- README
|
48
|
+
- README.md
|
49
49
|
- Rakefile
|
50
50
|
- lib/.named_parameter.rb.swo
|
51
51
|
- lib/named_parameter.rb
|
52
52
|
- lib/named_parameter/error.rb
|
53
53
|
- lib/named_parameter/errors.rb
|
54
|
+
- lib/named_parameter/errors/not_hash.rb
|
54
55
|
- lib/named_parameter/errors/required_parameters.rb
|
55
56
|
- lib/named_parameter/errors/undefined_parameters.rb
|
56
57
|
- lib/named_parameter/named_method.rb
|
@@ -60,10 +61,9 @@ files:
|
|
60
61
|
- named_parameter.gemspec
|
61
62
|
- spec/features/collective_named_methods_feature_spec.rb
|
62
63
|
- spec/features/individual_named_method_feature_spec.rb
|
63
|
-
- spec/interfaces/errors_interface.rb
|
64
64
|
- spec/spec_helper.rb
|
65
|
-
- spec/support/interface_helper.rb
|
66
65
|
- spec/unit/error_spec.rb
|
66
|
+
- spec/unit/errors/not_hash_spec.rb
|
67
67
|
- spec/unit/errors/required_parameters_spec.rb
|
68
68
|
- spec/unit/errors/undefined_parameters_spec.rb
|
69
69
|
- spec/unit/named_method_spec.rb
|
@@ -82,7 +82,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
82
82
|
requirements:
|
83
83
|
- - ">="
|
84
84
|
- !ruby/object:Gem::Version
|
85
|
-
hash:
|
85
|
+
hash: 215367841
|
86
86
|
segments:
|
87
87
|
- 0
|
88
88
|
version: "0"
|
@@ -1,17 +0,0 @@
|
|
1
|
-
here = File.dirname(__FILE__)
|
2
|
-
|
3
|
-
interfaces_paths = Dir[File.join(here,'../interfaces/*_interface.rb')]
|
4
|
-
|
5
|
-
interfaces_paths.each do |interface_path|
|
6
|
-
interface_filename = File.basename(interface_path)[/^[^.]+/]
|
7
|
-
method_name = "respect_#{interface_filename}"
|
8
|
-
context_description = method_name.gsub(/_./){|a| a.sub('_',' ').upcase}
|
9
|
-
|
10
|
-
RSpec::Core::ExampleGroup.singleton_class.instance_eval do
|
11
|
-
define_method method_name do
|
12
|
-
context context_description do
|
13
|
-
eval File.read(interface_path)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|