grouped_validations 0.2.0 → 0.2.1

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 CHANGED
@@ -48,6 +48,20 @@ You can also check validation for multiple groups
48
48
 
49
49
  p.groups_valid?(:group1, :group2)
50
50
 
51
+
52
+ To define validation blocks just use the respective group validation method, like so
53
+
54
+ class Person < ActiveRecord::Base
55
+ validation_group :name do
56
+ validates_presence_of :first_name
57
+ validates_presence_of :last_name
58
+ end
59
+
60
+ validate_name {|r| # something custom on save }
61
+ validate_name_on_create {|r| # something custom on create }
62
+ validate_name_on_update {|r| # something custom on update }
63
+ end
64
+
51
65
  == Credits
52
66
 
53
67
  * Adam Meehan (http://github.com/adzap)
@@ -1,3 +1,3 @@
1
1
  module GroupedValidations
2
- VERSION = '0.2.0'
2
+ VERSION = '0.2.1'
3
3
  end
@@ -5,6 +5,10 @@ module GroupedValidations
5
5
  def validation_group(group, &block)
6
6
  raise "The validation_group method requires a block" unless block_given?
7
7
 
8
+ unless self.include?(GroupedValidations::InstanceMethods)
9
+ include GroupedValidations::InstanceMethods
10
+ end
11
+
8
12
  self.validation_groups ||= []
9
13
  self.validation_groups << group
10
14
 
@@ -18,6 +22,18 @@ module GroupedValidations
18
22
  end
19
23
 
20
24
  module InstanceMethods
25
+ def self.included(base)
26
+ base.alias_method_chain :valid?, :groups
27
+ base.class_eval do
28
+ class << self
29
+ if ActiveRecord::VERSION::MAJOR < 3
30
+ alias_method_chain :validation_method, :groups
31
+ else
32
+ alias_method_chain :validate, :groups
33
+ end
34
+ end
35
+ end
36
+ end
21
37
 
22
38
  def group_valid?(group)
23
39
  raise "Validation group '#{group}' not defined" unless validation_groups.include?(group)
@@ -50,23 +66,11 @@ end
50
66
 
51
67
  ActiveRecord::Base.class_eval do
52
68
  extend GroupedValidations::ClassMethods
53
- include GroupedValidations::InstanceMethods
54
69
  class_inheritable_accessor :validation_groups
55
- alias_method_chain :valid?, :groups
56
70
  end
57
71
 
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
72
+ if ActiveRecord::VERSION::MAJOR < 3
66
73
  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
74
+ else
75
+ require 'grouped_validations/active_model'
72
76
  end
@@ -9,6 +9,10 @@ describe GroupedValidations do
9
9
  Person.should respond_to(:validation_group)
10
10
  end
11
11
 
12
+ it "should not include instance methods by default" do
13
+ ActiveRecord::Base.include?(GroupedValidations::InstanceMethods).should be_false
14
+ end
15
+
12
16
  it "should store defined validation group names" do
13
17
  Person.validation_group(:dummy) { }
14
18
  Person.validation_groups.should == [:dummy]
@@ -73,10 +77,9 @@ describe GroupedValidations do
73
77
  p.should have(3).errors
74
78
  end
75
79
 
76
- it "should respect :on validation option" do
80
+ it "should respect :on => :create validation option" do
77
81
  Person.validation_group :name do
78
82
  validates_presence_of :first_name, :on => :create
79
- validates_presence_of :last_name, :on => :update
80
83
  end
81
84
 
82
85
  p = Person.new
@@ -86,6 +89,22 @@ describe GroupedValidations do
86
89
  p.group_valid?(:name)
87
90
  p.should have(0).errors
88
91
 
92
+ p.save.should be_true
93
+ p.first_name = nil
94
+ p.group_valid?(:name)
95
+ p.should have(0).errors
96
+ end
97
+
98
+ it "should respect :on => :update validation option" do
99
+ Person.validation_group :name do
100
+ validates_presence_of :last_name, :on => :update
101
+ end
102
+
103
+ p = Person.new
104
+ p.last_name = nil
105
+ p.group_valid?(:name)
106
+ p.should have(0).errors
107
+
89
108
  p.save.should be_true
90
109
  p.group_valid?(:name)
91
110
  p.should have(1).errors
@@ -93,4 +112,20 @@ describe GroupedValidations do
93
112
  p.group_valid?(:name)
94
113
  p.should have(0).errors
95
114
  end
115
+
116
+ it "should allow a validation group to appended with subsequent blocks" do
117
+ Person.class_eval do
118
+ validation_group :name do
119
+ validates_presence_of :first_name
120
+ end
121
+ validation_group :name do
122
+ validates_presence_of :last_name
123
+ end
124
+ end
125
+
126
+ p = Person.new
127
+ p.group_valid?(:name)
128
+ p.should have(2).errors
129
+ end
130
+
96
131
  end
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grouped_validations
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ hash: 21
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 2
9
+ - 1
10
+ version: 0.2.1
5
11
  platform: ruby
6
12
  authors:
7
13
  - Adam Meehan
@@ -9,7 +15,7 @@ autorequire: grouped_validations
9
15
  bindir: bin
10
16
  cert_chain: []
11
17
 
12
- date: 2010-02-23 00:00:00 +11:00
18
+ date: 2010-06-08 00:00:00 +10:00
13
19
  default_executable:
14
20
  dependencies: []
15
21
 
@@ -41,21 +47,27 @@ rdoc_options: []
41
47
  require_paths:
42
48
  - lib
43
49
  required_ruby_version: !ruby/object:Gem::Requirement
50
+ none: false
44
51
  requirements:
45
52
  - - ">="
46
53
  - !ruby/object:Gem::Version
54
+ hash: 3
55
+ segments:
56
+ - 0
47
57
  version: "0"
48
- version:
49
58
  required_rubygems_version: !ruby/object:Gem::Requirement
59
+ none: false
50
60
  requirements:
51
61
  - - ">="
52
62
  - !ruby/object:Gem::Version
63
+ hash: 3
64
+ segments:
65
+ - 0
53
66
  version: "0"
54
- version:
55
67
  requirements: []
56
68
 
57
69
  rubyforge_project: grouped_validations
58
- rubygems_version: 1.3.5
70
+ rubygems_version: 1.3.7
59
71
  signing_key:
60
72
  specification_version: 3
61
73
  summary: Define validation groups in ActiveRecord for greater control over which validations to run.