enforce_schema_rules 0.0.17 → 0.0.20

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.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/README.rdoc +61 -0
  3. data/lib/enforce_schema_rules.rb +11 -8
  4. metadata +16 -15
  5. data/README +0 -81
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a2a1d83f9252628116c2859454e08bf48e11085d
4
- data.tar.gz: 4f5bf1d8b25690b6e9ad5e23f7ac8264130e09e4
3
+ metadata.gz: 5c173ca802197b5ae0e7d9eebbcf1490dc4c9b07
4
+ data.tar.gz: 973c060193c583aaa837e63883d893293bc2fbaa
5
5
  SHA512:
6
- metadata.gz: aaaba5d5afb50945bb160d65b431a6743c6b62f265217492fe1910fc1e098edde211270fedd84148f4517189d8153ae85344ebfe6e9bff6035eb544f9db16ece
7
- data.tar.gz: 4bb07639e23b6cf0afb44496ce4601e6d14e9ed67ffdf52097375b3ce1260e425359ae94d2ee8c578f4640834736117d71d6b86cd4a987218f31b0ebc42d4682
6
+ metadata.gz: da1b3f98f2b17b9572286ff3a4317e1566023d0dcbea359375633a731e8d3f02d8566846c8c3c3f61f264f785aec8b485646593c337f9d3592dcdda174fd45c6
7
+ data.tar.gz: ed6229f742815bd36c603b9c685b59dc2de59533a84fef54a599adf854b8a944d40b4f8ece0fc4587a690b209bc5309be4140ba233567de717742e881eefdefe
@@ -0,0 +1,61 @@
1
+ = Enforce Schema Rules
2
+
3
+ This plugin provides a way to validate your model against database rules
4
+ you've already created in your schema, including column lengths for
5
+ strings, "not null" designations, unique index constraints, and
6
+ ensuring integer input for integer columns.
7
+
8
+ The four methods currently supported are:
9
+
10
+ enforce_column_limits
11
+ enforce_integer_columns
12
+ enforce_not_null
13
+ enforce_unique_indexes
14
+
15
+ You can also just call <tt>enforce_schema_rules</tt> to enforce all the
16
+ above.
17
+
18
+ Accepts the relevant validates_length_of options (i.e. :on and :message)
19
+ and these assume the usual defaults.
20
+
21
+ In addition to the regular options, you can also have an
22
+ <tt>:except</tt> list enumerating the column that you don't want to
23
+ validate.
24
+
25
+ By default, magic columns (_at, _on, _id, id, position, etc) are
26
+ skipped. If you'd like to override that behavior, you can define your
27
+ own <tt>:exclusion_regexp</tt>
28
+
29
+ Examples:
30
+
31
+ class Person < ActiveRecord::Base
32
+ enforce_schema_rules :except => :dhh
33
+ end
34
+
35
+ class Book < ActiveRecord::Base
36
+ enforce_column_limits :message => "exceeds the %d character limit", :on => :update
37
+ enforce_unique_indexes
38
+ enforce_not_null :exclusion_regexp => /$fk_/
39
+ end
40
+
41
+
42
+ == Download
43
+
44
+ Development is done at:
45
+
46
+ http://github.com/twinge/enforce_schema_rules
47
+
48
+ You can install as a gem with:
49
+
50
+ gem install enforce_schema_rules
51
+
52
+ == Bugs & feedback
53
+
54
+ Please send bug reports, patches and feedback to the GitHub project.
55
+
56
+ == Credit
57
+
58
+ The plugin was written by Josh Starcher <josh.starcher@gmail.com>. It
59
+ was updated to Rails 3 by Eric Anderson <eric@pixelwareinc.com>. This
60
+ plugin is basically an extension of David Easley's enforce-limits
61
+ plugin. Michael Schuerig provided contributed a patch and a style lesson.
@@ -18,7 +18,7 @@ module Jls
18
18
  enforce_not_null(options.dup)
19
19
  enforce_unique_indexes(options.dup)
20
20
  end
21
-
21
+
22
22
  # Enforce string column limits
23
23
  def enforce_column_limits(options = {})
24
24
  args = build_validation_args(options, :string, :too_long)
@@ -27,12 +27,15 @@ module Jls
27
27
  validates_each(*args) do |record, attr, value|
28
28
  limit = record.class.columns_hash[attr.to_s].limit
29
29
  if limit
30
- message = options[:message] % {:count => limit}
30
+ message = case
31
+ when options[:message].is_a?(String) then options[:message] % {count: limit}
32
+ when limit == 1 then options[:message][:one]
33
+ else options[:message][:other] % {:count => limit} end
31
34
  record.errors.add(attr, message) unless value.nil? || value.size <= limit
32
35
  end
33
36
  end
34
37
  end
35
-
38
+
36
39
  # Enforce numericality of integer columns
37
40
  def enforce_integer_columns(options = {})
38
41
  # first get the non-integers
@@ -44,14 +47,14 @@ module Jls
44
47
  args = build_validation_args(options, :integer, :not_a_number)
45
48
  validates_numericality_of(*args) unless args.first.is_a? Hash
46
49
  end
47
-
50
+
48
51
  # Enfore "not null" columns settings
49
52
  def enforce_not_null(options = {})
50
53
  args = build_validation_args(options, :not_null, :blank)
51
54
  return if args.first.is_a?(Hash)
52
55
  validates_presence_of(*args)
53
56
  end
54
-
57
+
55
58
  # Enfore unique indexes
56
59
  def enforce_unique_indexes(options = {})
57
60
  attrs = build_validation_args(options, false, :taken)
@@ -61,7 +64,7 @@ module Jls
61
64
  validates_uniqueness_of(index.columns.first, options)
62
65
  end
63
66
  end
64
-
67
+
65
68
  def build_validation_args(options, col_type, validation_option = :invalid)
66
69
  options[validation_option] = I18n.translate('errors.messages')[validation_option]
67
70
  options[:message] ||= options[validation_option]
@@ -71,10 +74,10 @@ module Jls
71
74
  when :numeric
72
75
  lambda { |col| col.name !~ exclusion_regexp && col.number? && col.type != :integer }
73
76
  when :not_null
74
- # I have to exclude boolean types because of a "feature" of the way validates_presence_of
77
+ # I have to exclude boolean types because of a "feature" of the way validates_presence_of
75
78
  # handles boolean fields
76
79
  # See http://dev.rubyonrails.org/ticket/5090 and http://dev.rubyonrails.org/ticket/3334
77
- lambda { |col| (col.name !~ exclusion_regexp || col.name =~ /_id$/) && !col.null && col.type != :boolean }
80
+ lambda { |col| col.name !~ exclusion_regexp && !col.null && col.type != :boolean }
78
81
  else
79
82
  lambda { |col| col.name !~ exclusion_regexp && col_type == col.type }
80
83
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: enforce_schema_rules
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.17
4
+ version: 0.0.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Starcher
@@ -11,48 +11,48 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2013-07-18 00:00:00.000000000 Z
14
+ date: 2016-03-21 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: activerecord
18
18
  requirement: !ruby/object:Gem::Requirement
19
19
  requirements:
20
- - - '>='
20
+ - - ">="
21
21
  - !ruby/object:Gem::Version
22
22
  version: '0'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - '>='
27
+ - - ">="
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0'
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: sqlite3
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  requirements:
34
- - - '>='
34
+ - - ">="
35
35
  - !ruby/object:Gem::Version
36
36
  version: '0'
37
37
  type: :development
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
- - - '>='
41
+ - - ">="
42
42
  - !ruby/object:Gem::Version
43
43
  version: '0'
44
44
  - !ruby/object:Gem::Dependency
45
45
  name: test-unit
46
46
  requirement: !ruby/object:Gem::Requirement
47
47
  requirements:
48
- - - '>='
48
+ - - ">="
49
49
  - !ruby/object:Gem::Version
50
50
  version: '0'
51
51
  type: :development
52
52
  prerelease: false
53
53
  version_requirements: !ruby/object:Gem::Requirement
54
54
  requirements:
55
- - - '>='
55
+ - - ">="
56
56
  - !ruby/object:Gem::Version
57
57
  version: '0'
58
58
  description: |2
@@ -68,33 +68,34 @@ email:
68
68
  executables: []
69
69
  extensions: []
70
70
  extra_rdoc_files:
71
- - README
71
+ - README.rdoc
72
72
  files:
73
+ - README.rdoc
73
74
  - lib/enforce_schema_rules.rb
74
- - README
75
75
  homepage:
76
76
  licenses: []
77
77
  metadata: {}
78
78
  post_install_message:
79
79
  rdoc_options:
80
- - --main
81
- - README
80
+ - "--main"
81
+ - README.rdoc
82
82
  require_paths:
83
83
  - lib
84
84
  required_ruby_version: !ruby/object:Gem::Requirement
85
85
  requirements:
86
- - - '>='
86
+ - - ">="
87
87
  - !ruby/object:Gem::Version
88
88
  version: '0'
89
89
  required_rubygems_version: !ruby/object:Gem::Requirement
90
90
  requirements:
91
- - - '>='
91
+ - - ">="
92
92
  - !ruby/object:Gem::Version
93
93
  version: '0'
94
94
  requirements: []
95
95
  rubyforge_project:
96
- rubygems_version: 2.0.3
96
+ rubygems_version: 2.5.1
97
97
  signing_key:
98
98
  specification_version: 4
99
99
  summary: An ActiveRecord plugin to automatically enforce database contraints
100
100
  test_files: []
101
+ has_rdoc:
data/README DELETED
@@ -1,81 +0,0 @@
1
- Enforce Schema Rules
2
- =====================
3
-
4
- This plugin provides a way to validate your model against database rules
5
- you've already created in your schema, including column lengths for
6
- strings, "not null" designations, unique index constraints, and
7
- ensuring integer input for integer columns.
8
-
9
- The four methods currently supported are:
10
-
11
- enforce_column_limits
12
- enforce_integer_columns
13
- enforce_not_null
14
- enforce_unique_indexes
15
-
16
- You can also just call <tt>enforce_schema_rules</tt> to enforce all the
17
- above.
18
-
19
- Accepts the relevant validates_length_of options (i.e. :on and :message)
20
- and these assume the usual defaults.
21
-
22
- In addition to the regular options, you can also have an
23
- <tt>:except</tt> list enumerating the column that you don't want to
24
- validate.
25
-
26
- By default, magic columns (_at, _on, _id, id, position, etc) are
27
- skipped. If you'd like to override that behavior, you can define your
28
- own <tt>:exclusion_regexp</tt>
29
-
30
- Examples:
31
-
32
- class Person < ActiveRecord::Base
33
- enforce_schema_rules :except => :dhh
34
- end
35
-
36
- class Book < ActiveRecord::Base
37
- enforce_column_limits :message => "exceeds the %d character limit", :on => :update
38
- enforce_unique_indexes
39
- enforce_not_null :exclusion_regexp => /$fk_/
40
- end
41
-
42
-
43
- Download
44
- --------
45
-
46
- Development is done at:
47
-
48
- http://github.com/twinge/enforce_schema_rules
49
-
50
- You can install as a gem with:
51
-
52
- gem install enforce_schema_rules
53
-
54
- Bugs & feedback
55
- ---------------
56
- Please send bug reports, patches and feedback to the GitHub project.
57
-
58
- Todo
59
- ----
60
- The main goal was recent updates was to get it to work in Rails 3. Some
61
- cleanup was just a side-effect. If anybody is interested, additional
62
- cleanup items include:
63
-
64
- * Make sure we don't need better test coverage. The upgrades to
65
- Rails 3 caused some test fixes but I am not sure we have coverage so
66
- a good eye towards that would be good.
67
- * The smallest number of changes were done to get things working under
68
- Rails 3. This plugin was written a while back. It might could be
69
- refactored using some new goodness that comes with a more recent
70
- ActiveRecord/Rails implementation.
71
- * I most likely dropped support for Rails 2.x. The old version works
72
- fine for those still on Rails 2.x so I say we just drop Rails 2.x
73
- support (there are some warnings but they can be fixed fairly easily
74
- and don't need to be fixed).
75
-
76
- Credit
77
- ------
78
- The plugin was written by Josh Starcher <josh.starcher@gmail.com>. It
79
- was updated to Rails 3 by Eric Anderson <eric@pixelwareinc.com>. This
80
- plugin is basically an extension of David Easley's enforce-limits
81
- plugin. Michael Schuerig provided contributed a patch and a syle lesson.