database_validations 0.7.2 → 0.7.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +15 -3
- data/lib/database_validations/rspec/uniqueness_validator_matcher.rb +21 -7
- data/lib/database_validations/validations/adapters/postgresql_adapter.rb +1 -1
- data/lib/database_validations/validations/uniqueness_options.rb +9 -2
- data/lib/database_validations/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2236241fbd9c25b9cbe9ffa63f5634659c6ad0ded206324cc7021765049ae116
|
4
|
+
data.tar.gz: ec3e6c0ec0ea21a00455a2035452030977994e99bdb4b4ff45b8405d57e5f0d4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f5691f17f29a775e910150be7415c77a02eb0436e428bf14efa60365f0840574066307b02d0b71de00431dff71f24215e366a68d44f1cf34528efb3570a584ec
|
7
|
+
data.tar.gz: 613e741dc4f48e245f3d6abc9af136fad6ae28d974583e2713ce9af4955d68c97d73fb371444e8fc519bfa428758221680dffc77b48e91a1d9b62103a2291d5a
|
data/README.md
CHANGED
@@ -87,11 +87,11 @@ We want to provide full compatibility with existing `validates_uniqueness_of` va
|
|
87
87
|
| unless | + | + | + |
|
88
88
|
| index_name | + | + | - |
|
89
89
|
| where | + | - | - |
|
90
|
-
| case_sensitive |
|
90
|
+
| case_sensitive | + | - | - |
|
91
91
|
| allow_nil | - | - | - |
|
92
92
|
| allow_blank | - | - | - |
|
93
93
|
|
94
|
-
**Keep in mind**:
|
94
|
+
**Keep in mind**: `if`, `unless` and `case_sensitive` options are used only for `valid?` method.
|
95
95
|
|
96
96
|
```ruby
|
97
97
|
class User < ActiveRecord::Base
|
@@ -104,7 +104,7 @@ user.field = 'another'
|
|
104
104
|
user.valid? # Will not query the database
|
105
105
|
```
|
106
106
|
|
107
|
-
**Backward compatibility**: Even when we don't support `case_sensitive`, `allow_nil` and `allow_blank` options now, the following:
|
107
|
+
**Backward compatibility**: Even when we don't natively support `case_sensitive`, `allow_nil` and `allow_blank` options now, the following:
|
108
108
|
|
109
109
|
```ruby
|
110
110
|
validates_db_uniqueness_of :email
|
@@ -116,6 +116,18 @@ Is the same by default as the following
|
|
116
116
|
validates_uniqueness_of :email, allow_nil: true, allow_blank: false, case_sensitive: true
|
117
117
|
```
|
118
118
|
|
119
|
+
Complete `case_sensitive` replacement example (for `PostgreSQL` only):
|
120
|
+
|
121
|
+
```ruby
|
122
|
+
validates :slug, uniqueness: { case_sensitive: false, scope: :field }
|
123
|
+
```
|
124
|
+
|
125
|
+
Should be replaced by:
|
126
|
+
|
127
|
+
```ruby
|
128
|
+
validates_db_uniqueness_of :slug, index_name: :unique_index_with_field_lower_on_slug, case_sensitive: false
|
129
|
+
```
|
130
|
+
|
119
131
|
Options descriptions:
|
120
132
|
- `scope`: One or more columns by which to limit the scope of the uniqueness constraint.
|
121
133
|
- `message`: Specifies a custom error message (default is: "has already been taken").
|
@@ -7,6 +7,7 @@
|
|
7
7
|
# * `scoped_to(scope)` -- specifies a scope for the validator;
|
8
8
|
# * `with_where(where)` -- specifies a where condition for the validator;
|
9
9
|
# * `with_index(index_name)` -- specifies an index name for the validator;
|
10
|
+
# * `case_insensitive` -- specifies case insensitivity for the validator;
|
10
11
|
#
|
11
12
|
# Example:
|
12
13
|
#
|
@@ -36,6 +37,10 @@ RSpec::Matchers.define :validate_db_uniqueness_of do |field|
|
|
36
37
|
@index_name = index_name
|
37
38
|
end
|
38
39
|
|
40
|
+
chain(:case_insensitive) do
|
41
|
+
@case_sensitive = false
|
42
|
+
end
|
43
|
+
|
39
44
|
match do |object|
|
40
45
|
@validators = []
|
41
46
|
|
@@ -43,15 +48,23 @@ RSpec::Matchers.define :validate_db_uniqueness_of do |field|
|
|
43
48
|
|
44
49
|
DatabaseValidations::Helpers.each_validator(model) do |validator|
|
45
50
|
@validators << {
|
46
|
-
field:
|
47
|
-
scope:
|
48
|
-
where:
|
49
|
-
message:
|
50
|
-
index_name:
|
51
|
+
field: validator.field,
|
52
|
+
scope: validator.scope,
|
53
|
+
where: validator.where_clause,
|
54
|
+
message: validator.message,
|
55
|
+
index_name: validator.index_name,
|
56
|
+
case_sensitive: validator.case_sensitive
|
51
57
|
}
|
52
58
|
end
|
53
59
|
|
54
|
-
@validators.include?(
|
60
|
+
@validators.include?(
|
61
|
+
field: field,
|
62
|
+
scope: Array.wrap(@scope),
|
63
|
+
where: @where,
|
64
|
+
message: @message,
|
65
|
+
index_name: @index_name,
|
66
|
+
case_sensitive: @case_sensitive
|
67
|
+
)
|
55
68
|
end
|
56
69
|
|
57
70
|
description do
|
@@ -60,7 +73,8 @@ RSpec::Matchers.define :validate_db_uniqueness_of do |field|
|
|
60
73
|
desc += "message: '#{@message}'; " if @message
|
61
74
|
desc += "scope: #{@scope}; " if @scope
|
62
75
|
desc += "where: '#{@where}'; " if @where
|
63
|
-
desc += "index_name: '#{index_name}'
|
76
|
+
desc += "index_name: '#{@index_name}'; " if @index_name
|
77
|
+
desc += "be case insensitive." if @case_sensitive === false
|
64
78
|
desc
|
65
79
|
end
|
66
80
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module DatabaseValidations
|
2
2
|
module Adapters
|
3
3
|
class PostgresqlAdapter < BaseAdapter
|
4
|
-
SUPPORTED_OPTIONS = %i[scope message where if unless index_name].freeze
|
4
|
+
SUPPORTED_OPTIONS = %i[scope message where if unless index_name case_sensitive].freeze
|
5
5
|
ADAPTER = :postgresql
|
6
6
|
|
7
7
|
def index_name(error_message)
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module DatabaseValidations
|
2
2
|
class UniquenessOptions
|
3
3
|
CUSTOM_OPTIONS = %i[where index_name].freeze
|
4
|
+
DEFAULT_OPTIONS = {allow_nil: true, case_sensitive: true, allow_blank: false}.freeze
|
4
5
|
|
5
6
|
attr_reader :field
|
6
7
|
|
@@ -24,8 +25,9 @@ module DatabaseValidations
|
|
24
25
|
def validates_uniqueness_options
|
25
26
|
where_clause_str = where_clause
|
26
27
|
|
27
|
-
|
28
|
-
.merge(
|
28
|
+
DEFAULT_OPTIONS
|
29
|
+
.merge(options)
|
30
|
+
.except(*CUSTOM_OPTIONS)
|
29
31
|
.tap { |opts| opts[:conditions] = -> { where(where_clause_str) } if where_clause }
|
30
32
|
end
|
31
33
|
|
@@ -65,6 +67,11 @@ module DatabaseValidations
|
|
65
67
|
@index_name ||= options[:index_name]
|
66
68
|
end
|
67
69
|
|
70
|
+
# @return [Boolean|nil]
|
71
|
+
def case_sensitive
|
72
|
+
@case_sensitive ||= options[:case_sensitive]
|
73
|
+
end
|
74
|
+
|
68
75
|
private
|
69
76
|
|
70
77
|
attr_reader :adapter, :options
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: database_validations
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Evgeniy Demin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-10-
|
11
|
+
date: 2018-10-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|