ratatouille 1.3.2 → 1.3.4

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,14 @@
1
+ ## 1.3.4
2
+
3
+ ### Updates
4
+
5
+ * :is\_a now available as an option in **ratify** to reduce unnecessary nesting
6
+
7
+ ### Corrections
8
+
9
+ * Fixed logic error while processing missing methods. It will correctly call super on missing\_method if
10
+ we do not catch expected methods
11
+
1
12
  ## 1.3.2
2
13
 
3
14
  ### Updates
data/lib/ratatouille.rb CHANGED
@@ -11,6 +11,8 @@ module Ratatouille
11
11
 
12
12
  # @param [Hash, Array] obj Object to validate
13
13
  # @param [Hash] options
14
+ # @option options [Class] :is_a
15
+ # @option options [String, Symbol] :name
14
16
  # @return [Validatable::Ratifier]
15
17
  def ratify(obj, options={}, &block)
16
18
  Ratatouille::Ratifier.new(obj, options, &block)
@@ -13,12 +13,18 @@ module Ratatouille
13
13
  @ratifiable_object = obj
14
14
  self.name = options[:name]
15
15
 
16
+ @is_a ||= options[:is_a]
17
+
16
18
  case obj
17
19
  when Hash then extend Ratatouille::HashMethods
18
20
  when Array then extend Ratatouille::ArrayMethods
19
21
  end
20
22
 
21
- instance_eval( &block ) if block_given?
23
+ unless @is_a.nil?
24
+ is_a?(@is_a, &block)
25
+ else
26
+ instance_eval( &block ) if block_given?
27
+ end
22
28
 
23
29
  cleanup_errors
24
30
 
@@ -174,16 +180,24 @@ module Ratatouille
174
180
  if @ratifiable_object.respond_to?("#{$1}?")
175
181
  if @ratifiable_object.send("#{$1}?") == true
176
182
  validation_error("is #{$1}")
183
+ return
177
184
  end
178
185
  end
179
186
  when id.to_s =~ /^is_(.*)$/
180
187
  if @ratifiable_object.respond_to?("#{$1}?")
181
188
  if @ratifiable_object.send("#{$1}?") == false
182
189
  validation_error("is not #{$1}")
190
+ return
183
191
  end
184
192
  end
185
193
  else
186
- validation_error("#{id} is not supported for the given object (#{@ratifiable_object.class})")
194
+ begin
195
+ super
196
+ return
197
+ rescue Exception => e
198
+ validation_error("#{id} is not supported for the given object (#{@ratifiable_object.class})")
199
+ return e
200
+ end
187
201
  end
188
202
 
189
203
  instance_eval(&block) if block_given?
@@ -1,4 +1,4 @@
1
1
  module Ratatouille
2
2
  # Gem Version
3
- VERSION = "1.3.2"
3
+ VERSION = "1.3.4"
4
4
  end
@@ -9,6 +9,20 @@ describe Ratatouille::Ratifier do
9
9
  e.should be_valid
10
10
  end
11
11
 
12
+ it "should not progress into block if :is_a validation fails" do
13
+ f = false
14
+ RatifierTest.new({}, :is_a => String) { f = true }
15
+ f.should be_false
16
+
17
+ g = false
18
+ RatifierTest.new({}, :is_a => Hash) { g = true }
19
+ g.should be_true
20
+
21
+ h = false
22
+ RatifierTest.new({}) { h = true }
23
+ h.should be_true
24
+ end
25
+
12
26
  it "errors should contain one key within block of new instance" do
13
27
  x = {}
14
28
  e = RatifierTest.new({}){ x = @errors }
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ratatouille
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 3
9
- - 2
10
- version: 1.3.2
9
+ - 4
10
+ version: 1.3.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ryan Johnson
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-04-23 00:00:00 Z
18
+ date: 2012-04-25 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: rspec