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.
@@ -1,4 +1,4 @@
1
- # Named Parameter `v0.0.1`
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 that's key is the parameter
10
- name. See this example:
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.1"
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
@@ -1,2 +1,3 @@
1
1
  require 'named_parameter/errors/undefined_parameters'
2
2
  require 'named_parameter/errors/required_parameters'
3
+ require 'named_parameter/errors/not_hash'
@@ -15,10 +15,14 @@ module NamedParameter
15
15
 
16
16
  def errors_when_called_with(args={})
17
17
  errors = []
18
- errors += Errors::UndefinedParameters.all_when self,
19
- :called_with => args
20
- errors += Errors::RequiredParameters.all_when self,
21
- :called_with => args
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
 
@@ -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.1"
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}
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.1
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-12 00:00:00 -03:00
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: 270356975
85
+ hash: 215367841
86
86
  segments:
87
87
  - 0
88
88
  version: "0"
@@ -1,9 +0,0 @@
1
- specify ".new(error)" do
2
- described_class.should respond_to(:new)
3
- .with(1)
4
- end
5
-
6
- specify ".match?(method,arg)" do
7
- described_class.should respond_to(:match?)
8
- .with(2)
9
- end
@@ -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