rails-schema-validations 0.8 → 0.9

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.
data/README CHANGED
@@ -1,9 +1,14 @@
1
+ Summary
2
+ =======
1
3
  Add validations to your models automatically based on the schema constraints.
2
4
  Place this one line in your model:
3
5
 
4
6
  validations_from_schema
5
7
 
6
8
 
9
+ Generated Validations
10
+ =====================
11
+
7
12
  | schema type | rails validation | extra |
8
13
  |-------------|---------------------------|---------------------------|
9
14
  | non-null | validates_presence_of | |
@@ -11,7 +16,13 @@ validations_from_schema
11
16
  | integer | validates_numericality_of | :only_integer, :less_than |
12
17
  | float | validates_numericality_of | |
13
18
 
19
+ for boolean non-null it uses validates_inclusion_of :in => [true,false]
20
+
21
+ Options
22
+ =======
23
+ To exclude a column use the `:except => ['excluded']` option.
14
24
 
25
+ Warning
26
+ =======
15
27
  Tested on MySQL.
16
- Does not detect what database is being used.
17
- This gem may have problems on other databases, particularly Sqlite.
28
+ Assume it doesn't work on your database unless you modify the test suite to run against your db and all tests pass
@@ -1,8 +1,11 @@
1
1
  # this will put it in the scope of a model
2
2
  module ActiveRecord::Validations::ClassMethods
3
- def validations_from_schema
3
+ def validations_from_schema options = {}
4
+ except = [*options.delete(:except)].map {|c| c.to_s}
5
+ fail "unexpected arguments" if options.size != 0
6
+
4
7
  self.columns.map do |col|
5
- next if col.primary
8
+ next if col.primary or except.include? col.name
6
9
 
7
10
  case col.type
8
11
  when :integer
@@ -21,7 +24,8 @@ module ActiveRecord::Validations::ClassMethods
21
24
  validates_inclusion_of col.name, :in => [true, false], :allow_nil => col.null
22
25
  end
23
26
  end.compact + content_columns.map do |col|
24
- validates_presence_of col.name unless col.null || col.type == :boolean
27
+ next if col.null or col.type == :boolean or except.include? col.name
28
+ validates_presence_of col.name
25
29
  end
26
30
  end
27
31
  end
@@ -12,6 +12,7 @@ def load_schema
12
12
  %w(string integer float datetime date boolean).each do |kind|
13
13
  t.send(kind, kind)
14
14
  t.send(kind, "#{kind}_notnull", :null => false)
15
+ t.send(kind, "#{kind}_excepted", :null => false)
15
16
  end
16
17
  %w(string integer).each do |kind|
17
18
  t.send(kind, "#{kind}_limit", :limit => 4)
@@ -30,7 +31,8 @@ end
30
31
  load_schema
31
32
 
32
33
  class Model < ActiveRecord::Base
33
- validations_from_schema
34
+ validations_from_schema :except => (
35
+ %w(string integer float date datetime boolean). map {|s| "#{s}_excepted"})
34
36
  end
35
37
 
36
38
  context Model do
@@ -56,6 +58,8 @@ context Model do
56
58
  %w(string integer float date datetime boolean).each do |name|
57
59
  asserts_no_error_on name, nil
58
60
  asserts_error_on "#{name}_notnull", nil
61
+ # ignore
62
+ asserts_no_error_on "#{name}_excepted", nil
59
63
  end
60
64
  %w(string integer).each do |name|
61
65
  asserts_no_error_on "#{name}_limit", nil
@@ -80,5 +84,6 @@ context Model do
80
84
  asserts_no_error_on :boolean_notnull, false
81
85
  asserts_error_on :boolean_notnull, nil
82
86
 
87
+ # ignore
83
88
  asserts_no_error_on :id, nil
84
89
  end
metadata CHANGED
@@ -1,12 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails-schema-validations
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 8
9
- version: "0.8"
8
+ - 9
9
+ version: "0.9"
10
10
  platform: ruby
11
11
  authors:
12
12
  - Greg Weber
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-10-22 00:00:00 -07:00
17
+ date: 2010-10-25 00:00:00 -07:00
18
18
  default_executable:
19
19
  dependencies: []
20
20