parametron 0.3.4 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7dcdccf1f3be6a66dcc1d9e908438f12e3455727
4
- data.tar.gz: 18a54b7cbabf0e427e35b889643a9014133d84d4
3
+ metadata.gz: 658e94725bd642f4c1612120ed3a42ade927dc8f
4
+ data.tar.gz: f085908b94b530e83a04af25725175384c3d2f59
5
5
  SHA512:
6
- metadata.gz: beba071b20a06987b53f225baa2c93d6699e6494209002810d036d65de832d88082ed9dcb3081bfc22e68a5bfcc795d2f14e04f86180a493864bbc64226ee8dc
7
- data.tar.gz: a4ab379a513fc033c48f342f254f34b8b67c8b376ba6e2da4628089e3d6ea3e2b0ce915282464fc14043561be27745c9164a703d358f1c7fdb1f01a4c7da865b
6
+ metadata.gz: 291b2da26f3c6dc34611dd90d5410a38b4cc6f6f801b7fabdf5c4ad8b687a2671a57f4113079338a66bdcffd7c4434bc319b059973f63791e5f8f6e20a3acaf0
7
+ data.tar.gz: 49a7b0de9b23fb73a2ac9181689d94c255371f7fdadbc93a39e091e99f323a26f9511161ebe9398ab661c6df8fa1f0021a182399aa3882c5820147c2298c0d93
@@ -1,4 +1,8 @@
1
- 0.3.5 / 2015-12-29
1
+ 0.4.0 / 2015-12-29
2
+ ==================
3
+ * Implement `on_exception` handler
4
+
5
+ 0.3.4 / 2015-12-28
2
6
  ==================
3
7
  * Implement call cast lambda with parameters
4
8
 
data/README.md CHANGED
@@ -130,6 +130,25 @@ it will get |current_value, current_casted_parameters, original_params|
130
130
  This could be handy when you want to have access to other parameters from input hash already
131
131
  casted.
132
132
 
133
+ ## Exceptions
134
+
135
+ Normally `parametron` raise exceptions when mandatory required parameter missed,
136
+ when `cast` expect something other than it gets and so on.
137
+ You could change this behavior if you need adding exception handler:
138
+
139
+
140
+ ```ruby
141
+ params_for(:fetch) do
142
+ required :city, validator: /\w+/
143
+ required :year, validator: /\d{4}/
144
+ on_exception ->(ex) {
145
+ # return something other then exception `ex`
146
+ return false
147
+ }
148
+ end
149
+ ```
150
+
151
+
133
152
 
134
153
  ## Contributing
135
154
 
@@ -29,7 +29,15 @@ module Parametron
29
29
  remove_method(name.to_sym)
30
30
 
31
31
  define_method(name) do |params={}|
32
- new_params = _rename_params!(_cast!(_validate!(_set_defaults!(params))))
32
+ begin
33
+ new_params = _rename_params!(_cast!(_validate!(_set_defaults!(params))))
34
+ rescue => e
35
+ if self.class.params_validator.on_exception_handler
36
+ return self.class.params_validator.on_exception_handler.call(e)
37
+ else
38
+ raise e
39
+ end
40
+ end
33
41
  original.bind(self).call(new_params)
34
42
  end
35
43
  end
@@ -1,12 +1,18 @@
1
1
  class Parametron::ParamsValidator
2
2
 
3
- attr_accessor :required_vals, :optional_vals
3
+ attr_accessor :required_vals, :optional_vals, :on_exception_handler
4
4
 
5
5
  def initialize(opts)
6
6
  @reject_unexpected = opts.fetch(:reject, true)
7
7
  @raise_on_excess = opts.fetch(:strict, false)
8
8
  self.required_vals = []
9
9
  self.optional_vals = []
10
+ self.on_exception_handler = nil
11
+ end
12
+
13
+ def on_exception(lmbd)
14
+ raise ArgumentError.new('on_exception expects lambda or proc') unless lmbd.respond_to? :call
15
+ self.on_exception_handler = lmbd
10
16
  end
11
17
 
12
18
  def optional(name, opts={})
@@ -1,3 +1,3 @@
1
1
  module Parametron
2
- VERSION = "0.3.4"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -21,6 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.required_ruby_version = ">= 1.9"
22
22
 
23
23
  spec.add_development_dependency "bundler", "~> 1.3"
24
+ spec.add_development_dependency "pry"
24
25
  spec.add_development_dependency "rake"
25
26
  spec.add_development_dependency "rspec"
26
27
 
@@ -93,8 +93,6 @@ describe Parametron, "Casting" do
93
93
  end.to raise_error
94
94
  end
95
95
 
96
-
97
-
98
96
  end
99
97
 
100
98
  it 'not raises exception on casting when parameter not required' do
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+
3
+ describe Parametron, "On exception" do
4
+
5
+ it 'accepts on_exception handler' do
6
+ expect do
7
+ class VictimWithOnExceptionHandlerTest
8
+ include Parametron
9
+ params_for(:fetch, strict: true) do
10
+ required :title, validator: /\w+/
11
+ on_exception -> e {}
12
+ end
13
+ def fetch params; params; end
14
+ end
15
+ end.not_to raise_error
16
+ end
17
+
18
+ it 'calls on_exeption handler on exception raised in params' do
19
+ class VictimWithOnExceptionHandler1
20
+ include Parametron
21
+ params_for(:fetch, strict: true) do
22
+ required :title, validator: /\w+/
23
+ on_exception -> e { [false, e] }
24
+ end
25
+ def fetch params; params; end
26
+ end
27
+
28
+ v = VictimWithOnExceptionHandler1.new
29
+ expect do
30
+ v.fetch()
31
+ end.not_to raise_error
32
+
33
+ result = v.fetch()
34
+ expect(result[0]).to eq false
35
+ expect(result[1]).to be_an_instance_of(Parametron::RequiredParamError)
36
+ end
37
+
38
+ end
@@ -1,2 +1,3 @@
1
1
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
2
  require 'parametron'
3
+ require 'pry'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: parametron
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yury Batenko
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: pry
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -74,6 +88,7 @@ files:
74
88
  - lib/parametron/version.rb
75
89
  - parametron.gemspec
76
90
  - spec/casting_spec.rb
91
+ - spec/on_exception_spec.rb
77
92
  - spec/parametron_spec.rb
78
93
  - spec/spec_helper.rb
79
94
  homepage: http://github.com/svenyurgensson/parametron
@@ -102,5 +117,6 @@ specification_version: 4
102
117
  summary: DSL for method arguments validation and casting
103
118
  test_files:
104
119
  - spec/casting_spec.rb
120
+ - spec/on_exception_spec.rb
105
121
  - spec/parametron_spec.rb
106
122
  - spec/spec_helper.rb