grouped_validations 0.1.0 → 0.2.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.
- data/README.rdoc +1 -1
- data/Rakefile +2 -1
- data/lib/grouped_validations/active_model.rb +33 -0
- data/lib/grouped_validations/active_record.rb +39 -0
- data/lib/grouped_validations/version.rb +3 -0
- data/lib/grouped_validations.rb +32 -47
- data/spec/spec_helper.rb +1 -0
- metadata +5 -2
data/README.rdoc
CHANGED
@@ -4,7 +4,7 @@ Allows you to define validation groups in ActiveRecord for more control over wha
|
|
4
4
|
|
5
5
|
This can be useful for multi-page forms or wizard style data entry.
|
6
6
|
|
7
|
-
Works with Rails 2.3
|
7
|
+
Works with Rails 2.3 and Rails 3 (ActiveRecord only).
|
8
8
|
|
9
9
|
== Installation
|
10
10
|
|
data/Rakefile
CHANGED
@@ -3,9 +3,10 @@ require 'rake/rdoctask'
|
|
3
3
|
require 'rake/gempackagetask'
|
4
4
|
require 'rubygems/specification'
|
5
5
|
require 'spec/rake/spectask'
|
6
|
+
require 'lib/grouped_validations/version'
|
6
7
|
|
7
8
|
GEM_NAME = "grouped_validations"
|
8
|
-
GEM_VERSION =
|
9
|
+
GEM_VERSION = GroupedValidations::VERSION
|
9
10
|
|
10
11
|
spec = Gem::Specification.new do |s|
|
11
12
|
s.name = GEM_NAME
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module GroupedValidations
|
2
|
+
|
3
|
+
module ClassMethods
|
4
|
+
|
5
|
+
def define_group_validation_callbacks(group)
|
6
|
+
define_callbacks :"validate_#{group}", :scope => 'validate'
|
7
|
+
end
|
8
|
+
|
9
|
+
def validate_with_groups(*args, &block)
|
10
|
+
if @current_validation_group
|
11
|
+
options = args.last
|
12
|
+
if options.is_a?(Hash) && options.key?(:on)
|
13
|
+
options[:if] = Array(options[:if])
|
14
|
+
options[:if] << "@_on_validate == :#{options[:on]}"
|
15
|
+
end
|
16
|
+
set_callback(:"validate_#{@current_validation_group}", *args, &block)
|
17
|
+
else
|
18
|
+
validate_without_groups(*args, &block)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
module InstanceMethods
|
25
|
+
|
26
|
+
def run_group_validation_callbacks(group)
|
27
|
+
@_on_validate = new_record? ? :create : :update
|
28
|
+
send(:"_run_validate_#{group}_callbacks")
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module GroupedValidations
|
2
|
+
|
3
|
+
module ClassMethods
|
4
|
+
|
5
|
+
def define_group_validation_callbacks(group)
|
6
|
+
base_name = :"validate_#{group}"
|
7
|
+
define_callbacks base_name, :"#{base_name}_on_create", :"#{base_name}_on_update"
|
8
|
+
end
|
9
|
+
|
10
|
+
def validation_method_with_groups(on)
|
11
|
+
if @current_validation_group
|
12
|
+
base_name = :"validate_#{@current_validation_group}"
|
13
|
+
case on
|
14
|
+
when :save then base_name
|
15
|
+
when :create then :"#{base_name}_on_create"
|
16
|
+
when :update then :"#{base_name}_on_update"
|
17
|
+
end
|
18
|
+
else
|
19
|
+
validation_method_without_groups on
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
module InstanceMethods
|
26
|
+
|
27
|
+
def run_group_validation_callbacks(group)
|
28
|
+
base_name = :"validate_#{group}"
|
29
|
+
run_callbacks(base_name)
|
30
|
+
if new_record?
|
31
|
+
run_callbacks(:"#{base_name}_on_create")
|
32
|
+
else
|
33
|
+
run_callbacks(:"#{base_name}_on_update")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
data/lib/grouped_validations.rb
CHANGED
@@ -1,63 +1,37 @@
|
|
1
1
|
module GroupedValidations
|
2
2
|
|
3
|
-
def self.included(base)
|
4
|
-
base.extend ClassMethods
|
5
|
-
base.class_eval do
|
6
|
-
include InstanceMethods
|
7
|
-
class_inheritable_accessor :validation_groups
|
8
|
-
alias_method_chain :valid?, :groups
|
9
|
-
class << self
|
10
|
-
alias_method_chain :validation_method, :groups
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
3
|
module ClassMethods
|
16
4
|
|
17
|
-
def validation_group(
|
5
|
+
def validation_group(group, &block)
|
18
6
|
raise "The validation_group method requires a block" unless block_given?
|
19
7
|
|
20
8
|
self.validation_groups ||= []
|
21
|
-
self.validation_groups <<
|
9
|
+
self.validation_groups << group
|
22
10
|
|
23
|
-
|
24
|
-
define_callbacks base_name, :"#{base_name}_on_create", :"#{base_name}_on_update"
|
11
|
+
define_group_validation_callbacks group
|
25
12
|
|
26
|
-
@current_validation_group =
|
13
|
+
@current_validation_group = group
|
27
14
|
class_eval &block
|
28
15
|
@current_validation_group = nil
|
29
16
|
end
|
30
17
|
|
31
|
-
def validation_method_with_groups(on)
|
32
|
-
if @current_validation_group
|
33
|
-
base_name = :"validate_#{@current_validation_group}"
|
34
|
-
case on
|
35
|
-
when :save then base_name
|
36
|
-
when :create then :"#{base_name}_on_create"
|
37
|
-
when :update then :"#{base_name}_on_update"
|
38
|
-
end
|
39
|
-
else
|
40
|
-
validation_method_without_groups on
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
18
|
end
|
45
19
|
|
46
20
|
module InstanceMethods
|
47
21
|
|
48
|
-
def group_valid?(
|
49
|
-
raise "Validation group '#{
|
22
|
+
def group_valid?(group)
|
23
|
+
raise "Validation group '#{group}' not defined" unless validation_groups.include?(group)
|
50
24
|
|
51
25
|
errors.clear
|
52
|
-
run_group_validation_callbacks
|
26
|
+
run_group_validation_callbacks group
|
53
27
|
errors.empty?
|
54
28
|
end
|
55
29
|
|
56
30
|
def groups_valid?(*groups)
|
57
31
|
errors.clear
|
58
|
-
groups.each do |
|
59
|
-
raise "Validation group '#{
|
60
|
-
run_group_validation_callbacks
|
32
|
+
groups.each do |group|
|
33
|
+
raise "Validation group '#{group}' not defined" unless validation_groups.include?(group)
|
34
|
+
run_group_validation_callbacks group
|
61
35
|
end
|
62
36
|
errors.empty?
|
63
37
|
end
|
@@ -70,18 +44,29 @@ module GroupedValidations
|
|
70
44
|
errors.empty?
|
71
45
|
end
|
72
46
|
|
73
|
-
def run_group_validation_callbacks(name)
|
74
|
-
base_name = :"validate_#{name}"
|
75
|
-
run_callbacks(base_name)
|
76
|
-
if new_record?
|
77
|
-
run_callbacks(:"#{base_name}_on_create")
|
78
|
-
else
|
79
|
-
run_callbacks(:"#{base_name}_on_update")
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
47
|
end
|
84
48
|
|
85
49
|
end
|
86
50
|
|
87
|
-
ActiveRecord::Base.
|
51
|
+
ActiveRecord::Base.class_eval do
|
52
|
+
extend GroupedValidations::ClassMethods
|
53
|
+
include GroupedValidations::InstanceMethods
|
54
|
+
class_inheritable_accessor :validation_groups
|
55
|
+
alias_method_chain :valid?, :groups
|
56
|
+
end
|
57
|
+
|
58
|
+
if ActiveRecord::VERSION::MAJOR == 3
|
59
|
+
require 'grouped_validations/active_model'
|
60
|
+
ActiveRecord::Base.class_eval do
|
61
|
+
class << self
|
62
|
+
alias_method_chain :validate, :groups
|
63
|
+
end
|
64
|
+
end
|
65
|
+
else
|
66
|
+
require 'grouped_validations/active_record'
|
67
|
+
ActiveRecord::Base.class_eval do
|
68
|
+
class << self
|
69
|
+
alias_method_chain :validation_method, :groups
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grouped_validations
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Meehan
|
@@ -9,7 +9,7 @@ autorequire: grouped_validations
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-02-
|
12
|
+
date: 2010-02-23 00:00:00 +11:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -25,6 +25,9 @@ files:
|
|
25
25
|
- MIT-LICENSE
|
26
26
|
- README.rdoc
|
27
27
|
- Rakefile
|
28
|
+
- lib/grouped_validations/active_model.rb
|
29
|
+
- lib/grouped_validations/active_record.rb
|
30
|
+
- lib/grouped_validations/version.rb
|
28
31
|
- lib/grouped_validations.rb
|
29
32
|
- spec/grouped_validations_spec.rb
|
30
33
|
- spec/spec_helper.rb
|