parametron 0.3.4 → 0.4.0

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