simple_validation 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ v0.1.4
2
+ -------
3
+
4
+ * Support conditional validations
5
+
1
6
  v0.1.3
2
7
  -------
3
8
 
data/README.md CHANGED
@@ -24,6 +24,9 @@ require "simple_validation"
24
24
  class AlienNumber
25
25
  include SimpleValidation
26
26
 
27
+ validate :digits_are_positive
28
+ validate :digits_are_less_than_ten, :if => [:digits_count_even?]
29
+
27
30
  def initialize(*digits)
28
31
  @digits = digits
29
32
  end
@@ -45,6 +48,10 @@ class AlienNumber
45
48
  add_error("#{digit} is greater than 9") unless digit < 10
46
49
  end
47
50
  end
51
+
52
+ def digits_count_even?
53
+ @digits.size.even?
54
+ end
48
55
  end
49
56
 
50
57
  valid_number = AlienNumber.new(1, 2, 3)
@@ -56,8 +63,14 @@ valid_number.value # 6
56
63
  invalid_number = AlienNumber.new(-1, 12)
57
64
  invalid_number.valid? # false
58
65
  invalid_number.invalid? # true
59
- invalid_number.errors # ["-1 is negative", "12 is greater than 9"]
66
+ invalid_number.errors # ["-1 is negative"]
60
67
  invalid_number.value # 11
68
+
69
+ another_invalid_number = AlienNumber.new(-10, 12, 15)
70
+ another_invalid_number.valid? # false
71
+ another_invalid_number.invalid? # true
72
+ another_invalid_number.errors # ["-1 is negative", "12 is greater than 9"]
73
+ another_invalid_number.value # 17
61
74
  ```
62
75
 
63
76
  Running tests
@@ -64,15 +64,15 @@ module SimpleValidation
64
64
  # include SimpleValidation
65
65
  #
66
66
  # validate :digits_are_positive
67
- # validate :digits_are_less_than_ten
67
+ # validate :digits_are_less_than_ten, :if => [:digits_count_even?]
68
68
  # end
69
- def validate(method_name)
70
- validation_methods << method_name
69
+ def validate(method_name, conditions = {})
70
+ validation_methods[method_name] = conditions[:if] || []
71
71
  end
72
72
 
73
73
  # The list of all method names that validate the object
74
74
  def validation_methods # :nodoc:
75
- @validation_methods ||= []
75
+ @validation_methods ||= {}
76
76
  end
77
77
  end
78
78
 
@@ -80,8 +80,8 @@ module SimpleValidation
80
80
  def validate # :nodoc:
81
81
  unless @validated
82
82
  @validated = true
83
- self.class.validation_methods.each do |method_name|
84
- send method_name
83
+ self.class.validation_methods.each do |method_name, conditions|
84
+ send method_name if conditions.all? { |condition| send condition }
85
85
  end
86
86
  end
87
87
  end
@@ -6,5 +6,5 @@
6
6
  # See LICENSE for license
7
7
 
8
8
  module SimpleValidation
9
- VERSION = "0.1.3"
9
+ VERSION = "0.1.4"
10
10
  end
@@ -37,6 +37,44 @@ class TestEntityWithValidation
37
37
  end
38
38
  end
39
39
 
40
+ class TestEntityWithConditionalValidation
41
+ include SimpleValidation
42
+
43
+ attr_reader :statement_one_invoked_count
44
+ attr_reader :statement_two_invoked_count
45
+ attr_reader :statement_three_invoked_count
46
+
47
+ validate :statement_one, :if => [:condition_one?]
48
+ validate :statement_two, :if => [:condition_two?]
49
+ validate :statement_three, :if => [:condition_one?, :condition_two?]
50
+
51
+ def initialize
52
+ @statement_one_invoked_count = 0
53
+ @statement_two_invoked_count = 0
54
+ @statement_three_invoked_count = 0
55
+ end
56
+
57
+ def statement_one
58
+ @statement_one_invoked_count += 1
59
+ end
60
+
61
+ def statement_two
62
+ @statement_two_invoked_count += 1
63
+ end
64
+
65
+ def statement_three
66
+ @statement_three_invoked_count += 1
67
+ end
68
+
69
+ def condition_one?
70
+ true
71
+ end
72
+
73
+ def condition_two?
74
+ false
75
+ end
76
+ end
77
+
40
78
  describe "A validatable entity" do
41
79
  describe "with an error" do
42
80
  before do
@@ -140,6 +178,30 @@ describe "A validatable entity" do
140
178
  end
141
179
  end
142
180
  end
181
+
182
+ describe "with conditional validation" do
183
+ before do
184
+ @entity = TestEntityWithConditionalValidation.new
185
+ end
186
+
187
+ describe "#valid?" do
188
+ before do
189
+ @entity.valid?
190
+ end
191
+
192
+ it "invokes its validations that passes all conditions" do
193
+ @entity.statement_one_invoked_count.must_equal 1
194
+ end
195
+
196
+ it "doesn't invoke its validations that fail all conditions" do
197
+ @entity.statement_two_invoked_count.must_equal 0
198
+ end
199
+
200
+ it "doesn't invoke its validations that fail conditions partially" do
201
+ @entity.statement_three_invoked_count.must_equal 0
202
+ end
203
+ end
204
+ end
143
205
 
144
206
  describe "with already existing errors" do
145
207
  it "doesn't lose its older errors on validation" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_validation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-26 00:00:00.000000000 Z
12
+ date: 2012-11-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: minitest