named_parameter 0.0.1 → 0.0.2
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 → 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
|