lotus-validations 0.3.3 → 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: 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