validates_lengths_from_database 0.4.0 → 0.5.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/Appraisals +0 -4
- data/{CHANGELOG → CHANGELOG.rdoc} +0 -0
- data/Gemfile.lock +5 -2
- data/README.rdoc +4 -1
- data/lib/validates_lengths_from_database.rb +18 -12
- data/lib/validates_lengths_from_database/version.rb +1 -1
- data/spec/db/test.sqlite3 +0 -0
- data/spec/validates_lengths_from_database_spec.rb +63 -0
- data/validates_lengths_from_database-0.4.0.gem +0 -0
- data/validates_lengths_from_database.gemspec +37 -0
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 11cac7bb47bda407a7ef1ed3c928d7a364c9522c
|
4
|
+
data.tar.gz: eb71d89711455e1c869155f98694fc1029a9f68c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e4ebd4890711a54a80410beccff3ac20e7e20ee9ca8626c46c40b553d6b0f9e028d0b6a227f28f763ca6f3c8c1f6eb5b09d83d0a5d70c956c233ed336e533be7
|
7
|
+
data.tar.gz: 2c82869d46cea0bcbdc51485b8b7f2e0c579a3060580eff52c82538d294849110d5bceaa726512a95ac9e11a90b5bfa8b37da87e9ac6519bec4d6c676b31f2aa
|
data/Appraisals
CHANGED
File without changes
|
data/Gemfile.lock
CHANGED
@@ -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.
|
34
|
+
json (1.8.3)
|
35
35
|
minitest (4.7.5)
|
36
36
|
multi_json (1.10.1)
|
37
37
|
pg (0.17.1)
|
@@ -46,7 +46,7 @@ GEM
|
|
46
46
|
rspec-expectations (2.5.0)
|
47
47
|
diff-lcs (~> 1.1.2)
|
48
48
|
rspec-mocks (2.5.0)
|
49
|
-
sqlite3 (1.3.
|
49
|
+
sqlite3 (1.3.11)
|
50
50
|
thor (0.19.1)
|
51
51
|
thread_safe (0.3.4)
|
52
52
|
tzinfo (0.3.42)
|
@@ -65,3 +65,6 @@ DEPENDENCIES
|
|
65
65
|
rspec (~> 2.0)
|
66
66
|
sqlite3 (~> 1.3.4)
|
67
67
|
validates_lengths_from_database!
|
68
|
+
|
69
|
+
BUNDLED WITH
|
70
|
+
1.10.6
|
data/README.rdoc
CHANGED
@@ -9,6 +9,8 @@ This gem introspects your table schema for maximum lengths on string and text fi
|
|
9
9
|
|
10
10
|
== Requirements
|
11
11
|
|
12
|
+
As of v0.5.0, validates_lengths_from_database lazily loads column information and requires Rails 3+. If you are using Rails 2, please use the v0.4.0 release.
|
13
|
+
|
12
14
|
Due to issues maintaining backwards compatibility, as of v0.4.0 validates_lengths_from_database requires ruby 1.9.3 or higher.
|
13
15
|
If you are still using 1.8.7 or 1.9.2, please use the v0.3.0 release.
|
14
16
|
|
@@ -58,5 +60,6 @@ This gem uses appraisal to test with different versions of the dependencies. See
|
|
58
60
|
$ rake test
|
59
61
|
|
60
62
|
# All of the Appraisals:
|
61
|
-
$
|
63
|
+
$ appraisal install
|
64
|
+
$ appraisal rake test
|
62
65
|
|
@@ -11,7 +11,6 @@ module ValidatesLengthsFromDatabase
|
|
11
11
|
def validates_lengths_from_database(options = {})
|
12
12
|
options.symbolize_keys!
|
13
13
|
|
14
|
-
return false unless self.table_exists?
|
15
14
|
options[:only] = Array[options[:only]] if options[:only] && !options[:only].is_a?(Array)
|
16
15
|
options[:except] = Array[options[:except]] if options[:except] && !options[:except].is_a?(Array)
|
17
16
|
options[:limit] ||= {}
|
@@ -19,16 +18,31 @@ module ValidatesLengthsFromDatabase
|
|
19
18
|
if options[:limit] and !options[:limit].is_a?(Hash)
|
20
19
|
options[:limit] = {:string => options[:limit], :text => options[:limit]}
|
21
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
|
+
@@validate_lengths_from_database_options
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
module InstanceMethods
|
34
|
+
def validate_lengths_from_database
|
35
|
+
options = self.class.validate_lengths_from_database_options
|
22
36
|
|
23
37
|
if options[:only]
|
24
38
|
columns_to_validate = options[:only].map(&:to_s)
|
25
39
|
else
|
26
|
-
columns_to_validate = column_names.map(&:to_s)
|
40
|
+
columns_to_validate = self.class.column_names.map(&:to_s)
|
27
41
|
columns_to_validate -= options[:except].map(&:to_s) if options[:except]
|
28
42
|
end
|
29
43
|
|
30
44
|
columns_to_validate.each do |column|
|
31
|
-
column_schema = columns.find {|c| c.name == column }
|
45
|
+
column_schema = self.class.columns.find {|c| c.name == column }
|
32
46
|
next if column_schema.nil?
|
33
47
|
next if ![:string, :text].include?(column_schema.type)
|
34
48
|
next if column_schema.respond_to?(:array) && column_schema.array
|
@@ -36,17 +50,9 @@ module ValidatesLengthsFromDatabase
|
|
36
50
|
column_limit = options[:limit][column_schema.type] || column_schema.limit
|
37
51
|
next unless column_limit
|
38
52
|
|
39
|
-
|
40
|
-
validates_length_of column, :maximum => column_limit, :allow_blank => true
|
41
|
-
end
|
53
|
+
ActiveModel::Validations::LengthValidator.new(:maximum => column_limit, :allow_blank => true, :attributes => [column]).validate(self)
|
42
54
|
end
|
43
|
-
|
44
|
-
nil
|
45
55
|
end
|
46
|
-
|
47
|
-
end
|
48
|
-
|
49
|
-
module InstanceMethods
|
50
56
|
end
|
51
57
|
end
|
52
58
|
|
data/spec/db/test.sqlite3
CHANGED
Binary file
|
@@ -33,6 +33,69 @@ describe ValidatesLengthsFromDatabase do
|
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
+
context "Model without a table yet" do
|
37
|
+
before do
|
38
|
+
class LazyTableArticle < ActiveRecord::Base
|
39
|
+
self.table_name = "articles_lazy"
|
40
|
+
validates_lengths_from_database
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
context "before the table is created" do
|
45
|
+
specify "should fail to create records" do
|
46
|
+
lambda { LazyTableArticle.new }.should raise_error
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context "after the table is created" do
|
51
|
+
before do
|
52
|
+
ActiveRecord::Schema.define do
|
53
|
+
create_table :articles_lazy, :force => false do |t|
|
54
|
+
t.string :string_1, :limit => 5
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
after do
|
60
|
+
ActiveRecord::Schema.define do
|
61
|
+
drop_table :articles_lazy
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
context "an article with long attributes" do
|
66
|
+
before { @article = LazyTableArticle.new(LONG_ATTRIBUTES.slice(:string_1)); @article.valid? }
|
67
|
+
|
68
|
+
specify "should not be valid" do
|
69
|
+
@article.should_not be_valid
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context "an article with short attributes" do
|
74
|
+
before { @article = LazyTableArticle.new(SHORT_ATTRIBUTES.slice(:string_1)); @article.valid? }
|
75
|
+
|
76
|
+
specify "should be valid" do
|
77
|
+
@article.should be_valid
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
context "Model without validates_lengths_from_database" do
|
84
|
+
before do
|
85
|
+
class ArticleValidateAll < ActiveRecord::Base
|
86
|
+
self.table_name = "articles"
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
context "an article with overloaded attributes" do
|
91
|
+
before { @article = ArticleValidateAll.new(LONG_ATTRIBUTES); @article.valid? }
|
92
|
+
|
93
|
+
it "should be valid" do
|
94
|
+
@article.should be_valid
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
36
99
|
context "Model with validates_lengths_from_database" do
|
37
100
|
before do
|
38
101
|
class ArticleValidateAll < ActiveRecord::Base
|
Binary file
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "validates_lengths_from_database/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "validates_lengths_from_database"
|
7
|
+
s.version = ValidatesLengthsFromDatabase::VERSION
|
8
|
+
s.author = "Ben Hughes"
|
9
|
+
s.email = "ben@railsgarden.com"
|
10
|
+
s.homepage = "http://github.com/rubiety/validates_lengths_from_database"
|
11
|
+
s.summary = "Automatic maximum-length validations."
|
12
|
+
s.description = "Introspects your database string field maximum lengths and automatically defines length validations."
|
13
|
+
|
14
|
+
s.files = Dir["{lib,spec,rails}/**/*", "[A-Z]*", "init.rb"]
|
15
|
+
s.require_path = "lib"
|
16
|
+
|
17
|
+
s.rubyforge_project = s.name
|
18
|
+
s.required_rubygems_version = ">= 1.3.4"
|
19
|
+
s.required_ruby_version = ">= 1.9.3"
|
20
|
+
|
21
|
+
s.add_dependency("activerecord", [">= 2.3.2"])
|
22
|
+
s.add_development_dependency("activesupport", [">= 2.3.2"])
|
23
|
+
s.add_development_dependency("rspec", ["~> 2.0"])
|
24
|
+
s.add_development_dependency("sqlite3", ["~> 1.3.4"])
|
25
|
+
s.add_development_dependency("appraisal", ["~> 1.0.2"])
|
26
|
+
s.add_development_dependency("pg", ["~> 0.17.1"])
|
27
|
+
s.add_development_dependency("rdoc", ["~> 3.12"])
|
28
|
+
s.add_development_dependency "rake"
|
29
|
+
|
30
|
+
# I'm not sure why this isn't installed along with activesupport,
|
31
|
+
# but for whatever reason running `bundle install` doesn't install
|
32
|
+
# i18n so I'm adding it here for now.
|
33
|
+
# https://github.com/rails/rails/blob/master/activesupport/activesupport.gemspec#L19 ?
|
34
|
+
s.add_development_dependency("i18n")
|
35
|
+
s.add_development_dependency("iconv", "~> 1.0.4")
|
36
|
+
end
|
37
|
+
|
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.5.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:
|
11
|
+
date: 2016-01-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -158,7 +158,7 @@ extensions: []
|
|
158
158
|
extra_rdoc_files: []
|
159
159
|
files:
|
160
160
|
- Appraisals
|
161
|
-
- CHANGELOG
|
161
|
+
- CHANGELOG.rdoc
|
162
162
|
- Gemfile
|
163
163
|
- Gemfile.lock
|
164
164
|
- LICENSE
|
@@ -174,6 +174,8 @@ files:
|
|
174
174
|
- spec/db/test.sqlite3
|
175
175
|
- spec/spec_helper.rb
|
176
176
|
- spec/validates_lengths_from_database_spec.rb
|
177
|
+
- validates_lengths_from_database-0.4.0.gem
|
178
|
+
- validates_lengths_from_database.gemspec
|
177
179
|
homepage: http://github.com/rubiety/validates_lengths_from_database
|
178
180
|
licenses: []
|
179
181
|
metadata: {}
|
@@ -193,7 +195,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
193
195
|
version: 1.3.4
|
194
196
|
requirements: []
|
195
197
|
rubyforge_project: validates_lengths_from_database
|
196
|
-
rubygems_version: 2.
|
198
|
+
rubygems_version: 2.4.8
|
197
199
|
signing_key:
|
198
200
|
specification_version: 4
|
199
201
|
summary: Automatic maximum-length validations.
|