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