lotus-validations 0.3.3 → 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: e5d9ec74237f0617a38373fdabc7495a93426129
4
- data.tar.gz: 2bc50b35391c302a6796615abd188b1d83af98b8
3
+ metadata.gz: 3108e0f651b886a399aad4ebd34bbb2a7cfc405f
4
+ data.tar.gz: 4a195aba653bc52553cd6c6c7bd583d5db3ca2e1
5
5
  SHA512:
6
- metadata.gz: 16393d2d7241b5123673685f49317182f45fd01f2b98bfaf4d61c1fe2a9dc3db4768ab89bf630d59733dfc397670257695d4ef29a3e83da89c88730ac7a1241d
7
- data.tar.gz: 141f632e5c63452f617563a786ff7284c906ec8e49b5f3397d04cc07f6bd7bcb925a051164c963860386644f856c87245d55c36dee4e33ba29ff4699ab015214
6
+ metadata.gz: 87ec3a0e492883bc32c64e6b754fb76bdec5080ab96135e70128db885c7aac7e10851d34fb25b7d551ba1b0437e4d131f0e0386fbc4d4191d559e7e7504d672f
7
+ data.tar.gz: 0f1f326609266e52b7626d9d558c8ad70bb7074cf390ff05d4fca97d6751ab5e5288e5c61d3a60f8fab158b5aa2f5b8cca765d6e1ca224493a794bd6aae32e0e
@@ -1,6 +1,13 @@
1
1
  # Lotus::Validations
2
2
  Validations mixin for Ruby objects
3
3
 
4
+ ## v0.4.0 - 2016-01-12
5
+ ## Changed
6
+ - [Hélio Costa e Silva & Luca Guidi] Ignore blank values for format and size validation
7
+
8
+ ### Fixed
9
+ - [Pascal Betz] Ensure acceptance validation to reject blank strings
10
+
4
11
  ## v0.3.3 - 2015-09-30
5
12
  ### Added
6
13
  - [Luca Guidi] Official support for JRuby 9k+
data/LICENSE.md CHANGED
@@ -1,4 +1,4 @@
1
- Copyright © 2014-2015 Luca Guidi
1
+ Copyright © 2014-2016 Luca Guidi
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -67,6 +67,34 @@ person.email # => "me@example.org"
67
67
  person.age # => raises NoMethodError because `:age` wasn't defined as attribute.
68
68
  ```
69
69
 
70
+ #### Blank Values
71
+
72
+ The framework will treat as valid any blank attributes, __without__ `presence`, for both `format` and `size` predicates.
73
+
74
+ ```ruby
75
+ require 'lotus/validations'
76
+
77
+ class Person
78
+ include Lotus::Validations
79
+
80
+ attribute :name, type: String, size: 5..45
81
+ attribute :email, type: String, size: 20..80, format: /@/
82
+ attribute :skills, type: Array, size: 1..3
83
+ attribute :keys, type: Hash, size: 1..3
84
+ end
85
+
86
+ Person.new.valid? # < true
87
+ Person.new(name: '').valid? # < true
88
+ Person.new(skills: '').valid? # < true
89
+ Person.new(skills: ['ruby', 'lotus']).valid? # < true
90
+
91
+ Person.new(skills: []).valid? # < false
92
+ Person.new(keys: {}).valid? # < false
93
+ Person.new(keys: {a: :b}, skills: []).valid? # < false
94
+ ```
95
+
96
+ If you want to _disable_ this behaviour, please, refer to [presence](https://github.com/lotus/validations#presence).
97
+
70
98
  ### Validations
71
99
 
72
100
  If you prefer Lotus::Validations to **only define validations**, but **not attributes**,
@@ -555,4 +583,4 @@ product.price # => 100
555
583
 
556
584
  ## Copyright
557
585
 
558
- Copyright © 2014-2015 Luca Guidi – Released under MIT License
586
+ Copyright © 2014-2016 Luca Guidi – Released under MIT License
@@ -85,7 +85,7 @@ module Lotus
85
85
  # This passes if the value is "truthy", it fails if not.
86
86
  #
87
87
  # Truthy examples: `Object.new`, `1`, `"1"`, `true`.
88
- # Falsey examples: `nil`, `0`, `"0"`, `false`.
88
+ # Falsy examples: `nil`, `0`, `"0"`, `false`, `""`.
89
89
  #
90
90
  # @see Lotus::Validations::ClassMethods#attribute
91
91
  # @see http://www.rubydoc.info/gems/lotus-utils/Lotus/Utils/Kernel#Boolean-class_method
@@ -93,7 +93,9 @@ module Lotus
93
93
  # @since 0.2.0
94
94
  # @api private
95
95
  def acceptance
96
- _validate(__method__) { Lotus::Utils::Kernel.Boolean(@value) }
96
+ _validate(__method__) do
97
+ !blank_value? && Lotus::Utils::Kernel.Boolean(@value)
98
+ end
97
99
  end
98
100
 
99
101
  # Validates format of the value.
@@ -106,7 +108,7 @@ module Lotus
106
108
  # @since 0.2.0
107
109
  # @api private
108
110
  def format
109
- _validate(__method__) {|matcher| @value.to_s.match(matcher) }
111
+ _validate(__method__) {|matcher| @value.to_s.match(matcher) } unless blank_value?
110
112
  end
111
113
 
112
114
  # Validates inclusion of the value in the defined collection.
@@ -171,6 +173,8 @@ module Lotus
171
173
  #
172
174
  # If the quantity is a Range, the size of the value MUST be included.
173
175
  #
176
+ # If the attribute's value is blank, the size will not be considered
177
+ #
174
178
  # The value is an object which implements `#size`.
175
179
  #
176
180
  # @raise [ArgumentError] if the defined quantity isn't a Numeric or a
@@ -181,6 +185,8 @@ module Lotus
181
185
  # @since 0.2.0
182
186
  # @api private
183
187
  def size
188
+ return if blank_value?
189
+
184
190
  _validate(__method__) do |validator|
185
191
  case validator
186
192
  when Numeric, ->(v) { v.respond_to?(:to_int) }
@@ -76,8 +76,8 @@ module Lotus
76
76
  # @param name [#to_sym] the name of the attribute
77
77
  # @param options [Hash] optional set of validations
78
78
  # @option options [Class] :type the Ruby type used to coerce the value
79
- # @option options [TrueClass,FalseClass] :acceptance requires Ruby
80
- # thruthiness of the value
79
+ # @option options [TrueClass,FalseClass] :acceptance requires a non-empty
80
+ # value which coerces to TrueClass
81
81
  # @option options [TrueClass,FalseClass] :confirmation requires the value
82
82
  # to be confirmed twice
83
83
  # @option options [#include?] :exclusion requires the value NOT be
@@ -38,8 +38,18 @@ module Lotus
38
38
  # @since 0.2.2
39
39
  # @api private
40
40
  def _empty_value?
41
+ return false if _enumerable?
41
42
  (@value.respond_to?(:empty?) and @value.empty?)
42
43
  end
44
+
45
+ # Collectable classes should not be considered as blank value
46
+ # even if it's responds _true_ to its own `empty?` method.
47
+ #
48
+ # @since 0.4.0
49
+ # @api private
50
+ def _enumerable?
51
+ @value.respond_to?(:each)
52
+ end
43
53
  end
44
54
  end
45
55
  end
@@ -1,6 +1,6 @@
1
1
  module Lotus
2
2
  module Validations
3
3
  # @since 0.1.0
4
- VERSION = '0.3.3'.freeze
4
+ VERSION = '0.4.0'.freeze
5
5
  end
6
6
  end
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ['lib']
20
20
  spec.required_ruby_version = '>= 2.0.0'
21
21
 
22
- spec.add_dependency 'lotus-utils', '~> 0.5'
22
+ spec.add_dependency 'lotus-utils', '~> 0.6'
23
23
 
24
24
  spec.add_development_dependency 'bundler', '~> 1.6'
25
25
  spec.add_development_dependency 'minitest', '~> 5'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lotus-validations
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luca Guidi
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-09-30 00:00:00.000000000 Z
13
+ date: 2016-01-12 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: lotus-utils
@@ -18,14 +18,14 @@ dependencies:
18
18
  requirements:
19
19
  - - "~>"
20
20
  - !ruby/object:Gem::Version
21
- version: '0.5'
21
+ version: '0.6'
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - "~>"
27
27
  - !ruby/object:Gem::Version
28
- version: '0.5'
28
+ version: '0.6'
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: bundler
31
31
  requirement: !ruby/object:Gem::Requirement
@@ -113,7 +113,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
113
113
  version: '0'
114
114
  requirements: []
115
115
  rubyforge_project:
116
- rubygems_version: 2.4.5.1
116
+ rubygems_version: 2.5.1
117
117
  signing_key:
118
118
  specification_version: 4
119
119
  summary: Validations mixin for Ruby objects