validates_lengths_from_database 0.6.0 → 0.7.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 +4 -4
- data/CHANGELOG.rdoc +6 -0
- data/Gemfile.lock +3 -3
- data/lib/validates_lengths_from_database.rb +1 -73
- data/lib/validates_lengths_from_database/core.rb +70 -0
- data/lib/validates_lengths_from_database/railtie.rb +2 -2
- data/lib/validates_lengths_from_database/version.rb +1 -1
- data/spec/db/test.sqlite3 +0 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ee05414f5d7aef3fb39a4e692b6616259d20db11
|
4
|
+
data.tar.gz: '096b57b2a49d98450f1127f27dfd135c34556d86'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dd35abc81106fe376476a747e78a89aeedaf2828a9aeff2e1f30181a486efc7da88474e5914b82a5df3706bb6f2dd8c0995ea5c05d8a9986ebc234ea40f3cb2c
|
7
|
+
data.tar.gz: d637ae88ae7aa3e2a738e095981270d0228817ab660f8e98214bc0f0bfc23b09e463bb8ab62be5221a6191a9c9504e089d3ceb62d96b23f5d95f9530437a6714
|
data/CHANGELOG.rdoc
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
== v0.7.0 (2017-10-09)
|
2
|
+
|
3
|
+
* Drop hard reliance on rails (can use with just activerecord) - thanks @grosser
|
4
|
+
* Drop requiring of rubygems (unnecessary) - thanks @grosser
|
5
|
+
* Update dependencies to modern, build-able versions
|
6
|
+
|
1
7
|
== v0.6.0 (2017-05-02)
|
2
8
|
|
3
9
|
* Drop support for integer length validations (too many issues)
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
validates_lengths_from_database (0.
|
4
|
+
validates_lengths_from_database (0.6.0)
|
5
5
|
activerecord (>= 3)
|
6
6
|
|
7
7
|
GEM
|
@@ -31,7 +31,7 @@ GEM
|
|
31
31
|
diff-lcs (1.1.2)
|
32
32
|
i18n (0.7.0)
|
33
33
|
iconv (1.0.4)
|
34
|
-
json (1.8.
|
34
|
+
json (1.8.6)
|
35
35
|
minitest (4.7.5)
|
36
36
|
multi_json (1.10.1)
|
37
37
|
pg (0.17.1)
|
@@ -67,4 +67,4 @@ DEPENDENCIES
|
|
67
67
|
validates_lengths_from_database!
|
68
68
|
|
69
69
|
BUNDLED WITH
|
70
|
-
1.
|
70
|
+
1.15.4
|
@@ -1,75 +1,3 @@
|
|
1
|
-
require "rubygems"
|
2
|
-
require "active_record"
|
3
|
-
|
4
|
-
module ValidatesLengthsFromDatabase
|
5
|
-
def self.included(base)
|
6
|
-
base.send(:extend, ClassMethods)
|
7
|
-
base.send(:include, InstanceMethods)
|
8
|
-
end
|
9
|
-
|
10
|
-
module ClassMethods
|
11
|
-
def validates_lengths_from_database(options = {})
|
12
|
-
options.symbolize_keys!
|
13
|
-
|
14
|
-
options[:only] = Array[options[:only]] if options[:only] && !options[:only].is_a?(Array)
|
15
|
-
options[:except] = Array[options[:except]] if options[:except] && !options[:except].is_a?(Array)
|
16
|
-
options[:limit] ||= {}
|
17
|
-
|
18
|
-
if options[:limit] and !options[:limit].is_a?(Hash)
|
19
|
-
options[:limit] = {:string => options[:limit], :text => options[:limit], :decimal => options[:limit], :integer => options[:limit], :float => options[:limit]}
|
20
|
-
end
|
21
|
-
@validate_lengths_from_database_options = options
|
22
|
-
|
23
|
-
validate :validate_lengths_from_database
|
24
|
-
|
25
|
-
nil
|
26
|
-
end
|
27
|
-
|
28
|
-
def validate_lengths_from_database_options
|
29
|
-
if defined? @validate_lengths_from_database_options
|
30
|
-
@validate_lengths_from_database_options
|
31
|
-
else
|
32
|
-
# in case we inherited the validations, copy the options so that we can update it in child
|
33
|
-
# without affecting the parent
|
34
|
-
@validate_lengths_from_database_options = superclass.validate_lengths_from_database_options.inject({}) do |hash, (key, value)|
|
35
|
-
value = value.dup if value.respond_to?(:dup)
|
36
|
-
hash.update(key => value)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
module InstanceMethods
|
43
|
-
def validate_lengths_from_database
|
44
|
-
options = self.class.validate_lengths_from_database_options
|
45
|
-
|
46
|
-
if options[:only]
|
47
|
-
columns_to_validate = options[:only].map(&:to_s)
|
48
|
-
else
|
49
|
-
columns_to_validate = self.class.column_names.map(&:to_s)
|
50
|
-
columns_to_validate -= options[:except].map(&:to_s) if options[:except]
|
51
|
-
end
|
52
|
-
|
53
|
-
columns_to_validate.each do |column|
|
54
|
-
column_schema = self.class.columns.find {|c| c.name == column }
|
55
|
-
next if column_schema.nil?
|
56
|
-
next if column_schema.respond_to?(:array) && column_schema.array
|
57
|
-
next unless [:string, :text, :decimal].include?(column_schema.type)
|
58
|
-
case column_schema.type
|
59
|
-
when :string, :text
|
60
|
-
column_limit = options[:limit][column_schema.type] || column_schema.limit
|
61
|
-
if column_limit
|
62
|
-
ActiveModel::Validations::LengthValidator.new(:maximum => column_limit, :allow_blank => true, :attributes => [column]).validate(self)
|
63
|
-
end
|
64
|
-
when :decimal
|
65
|
-
if column_schema.precision && column_schema.scale
|
66
|
-
max_val = (10 ** column_schema.precision)/(10 ** column_schema.scale)
|
67
|
-
ActiveModel::Validations::NumericalityValidator.new(:less_than => max_val, :allow_blank => true, :attributes => [column]).validate(self)
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
1
|
|
2
|
+
require "validates_lengths_from_database/core"
|
75
3
|
require "validates_lengths_from_database/railtie"
|
@@ -0,0 +1,70 @@
|
|
1
|
+
module ValidatesLengthsFromDatabase
|
2
|
+
def self.included(base)
|
3
|
+
base.send(:extend, ClassMethods)
|
4
|
+
base.send(:include, InstanceMethods)
|
5
|
+
end
|
6
|
+
|
7
|
+
module ClassMethods
|
8
|
+
def validates_lengths_from_database(options = {})
|
9
|
+
options.symbolize_keys!
|
10
|
+
|
11
|
+
options[:only] = Array[options[:only]] if options[:only] && !options[:only].is_a?(Array)
|
12
|
+
options[:except] = Array[options[:except]] if options[:except] && !options[:except].is_a?(Array)
|
13
|
+
options[:limit] ||= {}
|
14
|
+
|
15
|
+
if options[:limit] and !options[:limit].is_a?(Hash)
|
16
|
+
options[:limit] = {:string => options[:limit], :text => options[:limit], :decimal => options[:limit], :integer => options[:limit], :float => options[:limit]}
|
17
|
+
end
|
18
|
+
@validate_lengths_from_database_options = options
|
19
|
+
|
20
|
+
validate :validate_lengths_from_database
|
21
|
+
|
22
|
+
nil
|
23
|
+
end
|
24
|
+
|
25
|
+
def validate_lengths_from_database_options
|
26
|
+
if defined? @validate_lengths_from_database_options
|
27
|
+
@validate_lengths_from_database_options
|
28
|
+
else
|
29
|
+
# in case we inherited the validations, copy the options so that we can update it in child
|
30
|
+
# without affecting the parent
|
31
|
+
@validate_lengths_from_database_options = superclass.validate_lengths_from_database_options.inject({}) do |hash, (key, value)|
|
32
|
+
value = value.dup if value.respond_to?(:dup)
|
33
|
+
hash.update(key => value)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
module InstanceMethods
|
40
|
+
def validate_lengths_from_database
|
41
|
+
options = self.class.validate_lengths_from_database_options
|
42
|
+
|
43
|
+
if options[:only]
|
44
|
+
columns_to_validate = options[:only].map(&:to_s)
|
45
|
+
else
|
46
|
+
columns_to_validate = self.class.column_names.map(&:to_s)
|
47
|
+
columns_to_validate -= options[:except].map(&:to_s) if options[:except]
|
48
|
+
end
|
49
|
+
|
50
|
+
columns_to_validate.each do |column|
|
51
|
+
column_schema = self.class.columns.find {|c| c.name == column }
|
52
|
+
next if column_schema.nil?
|
53
|
+
next if column_schema.respond_to?(:array) && column_schema.array
|
54
|
+
next unless [:string, :text, :decimal].include?(column_schema.type)
|
55
|
+
case column_schema.type
|
56
|
+
when :string, :text
|
57
|
+
column_limit = options[:limit][column_schema.type] || column_schema.limit
|
58
|
+
if column_limit
|
59
|
+
ActiveModel::Validations::LengthValidator.new(:maximum => column_limit, :allow_blank => true, :attributes => [column]).validate(self)
|
60
|
+
end
|
61
|
+
when :decimal
|
62
|
+
if column_schema.precision && column_schema.scale
|
63
|
+
max_val = (10 ** column_schema.precision)/(10 ** column_schema.scale)
|
64
|
+
ActiveModel::Validations::NumericalityValidator.new(:less_than => max_val, :allow_blank => true, :attributes => [column]).validate(self)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module ValidatesLengthsFromDatabase
|
2
2
|
if defined?(Rails::Railtie)
|
3
3
|
require "rails"
|
4
|
-
|
4
|
+
|
5
5
|
class Railtie < Rails::Railtie
|
6
6
|
initializer "validates_lengths_from_database.extend_active_record" do
|
7
7
|
ActiveSupport.on_load(:active_record) do
|
@@ -10,7 +10,7 @@ module ValidatesLengthsFromDatabase
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
class Railtie
|
15
15
|
def self.insert
|
16
16
|
ActiveRecord::Base.send(:include, ValidatesLengthsFromDatabase)
|
data/spec/db/test.sqlite3
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: validates_lengths_from_database
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Hughes
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-10-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -166,6 +166,7 @@ files:
|
|
166
166
|
- Rakefile
|
167
167
|
- init.rb
|
168
168
|
- lib/validates_lengths_from_database.rb
|
169
|
+
- lib/validates_lengths_from_database/core.rb
|
169
170
|
- lib/validates_lengths_from_database/railtie.rb
|
170
171
|
- lib/validates_lengths_from_database/version.rb
|
171
172
|
- rails/init.rb
|