remarkable_activerecord 3.0.1 → 3.0.2

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 (39) hide show
  1. data/CHANGELOG +46 -46
  2. data/LICENSE +1 -1
  3. data/README +64 -64
  4. data/lib/remarkable_activerecord.rb +1 -1
  5. data/lib/remarkable_activerecord/base.rb +40 -40
  6. data/lib/remarkable_activerecord/human_names.rb +24 -24
  7. data/lib/remarkable_activerecord/matchers/allow_mass_assignment_of_matcher.rb +14 -14
  8. data/lib/remarkable_activerecord/matchers/allow_values_for_matcher.rb +70 -70
  9. data/lib/remarkable_activerecord/matchers/association_matcher.rb +197 -197
  10. data/lib/remarkable_activerecord/matchers/have_column_matcher.rb +29 -29
  11. data/lib/remarkable_activerecord/matchers/have_index_matcher.rb +20 -20
  12. data/lib/remarkable_activerecord/matchers/have_readonly_attributes_matcher.rb +7 -7
  13. data/lib/remarkable_activerecord/matchers/have_scope_matcher.rb +34 -34
  14. data/lib/remarkable_activerecord/matchers/validate_acceptance_of_matcher.rb +37 -37
  15. data/lib/remarkable_activerecord/matchers/validate_associated_matcher.rb +75 -75
  16. data/lib/remarkable_activerecord/matchers/validate_confirmation_of_matcher.rb +44 -44
  17. data/lib/remarkable_activerecord/matchers/validate_exclusion_of_matcher.rb +17 -17
  18. data/lib/remarkable_activerecord/matchers/validate_inclusion_of_matcher.rb +20 -20
  19. data/lib/remarkable_activerecord/matchers/validate_numericality_of_matcher.rb +14 -14
  20. data/lib/remarkable_activerecord/matchers/validate_uniqueness_of_matcher.rb +80 -61
  21. data/locale/en.yml +253 -253
  22. data/spec/allow_mass_assignment_of_matcher_spec.rb +50 -50
  23. data/spec/allow_values_for_matcher_spec.rb +45 -45
  24. data/spec/association_matcher_spec.rb +612 -612
  25. data/spec/have_column_matcher_spec.rb +67 -67
  26. data/spec/have_index_matcher_spec.rb +61 -61
  27. data/spec/have_readonly_attributes_matcher_spec.rb +40 -40
  28. data/spec/have_scope_matcher_spec.rb +60 -60
  29. data/spec/model_builder.rb +101 -101
  30. data/spec/spec_helper.rb +25 -25
  31. data/spec/validate_acceptance_of_matcher_spec.rb +64 -64
  32. data/spec/validate_associated_matcher_spec.rb +118 -118
  33. data/spec/validate_confirmation_of_matcher_spec.rb +54 -54
  34. data/spec/validate_exclusion_of_matcher_spec.rb +76 -76
  35. data/spec/validate_inclusion_of_matcher_spec.rb +72 -72
  36. data/spec/validate_numericality_of_matcher_spec.rb +100 -100
  37. data/spec/validate_presence_of_matcher_spec.rb +40 -40
  38. data/spec/validate_uniqueness_of_matcher_spec.rb +158 -139
  39. metadata +3 -3
@@ -1,58 +1,58 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
- describe 'validate_confirmation_of' do
3
+ describe 'validate_confirmation_of' do
4
4
  include ModelBuilder
5
-
6
- # Defines a model, create a validation and returns a raw matcher
7
- def define_and_validate(options={})
8
- @model = define_model :user, :name => :string, :email => :string, :age => :string do
9
- validates_confirmation_of :name, :email, options
10
- end
11
-
12
- validate_confirmation_of(:name, :email)
13
- end
14
-
15
- describe 'messages' do
16
- before(:each){ @matcher = define_and_validate }
17
-
18
- it 'should contain a description' do
19
- @matcher.description.should == 'require name and email to be confirmed'
20
- end
21
-
22
- it 'should set responds_to_confirmation? message' do
23
- @matcher = validate_confirmation_of(:age)
24
- @matcher.matches?(@model)
25
- @matcher.failure_message.should == 'Expected User instance responds to age_confirmation'
26
- end
27
-
28
- it 'should set confirms? message' do
29
- @model.instance_eval{ def age_confirmation=(*args); end }
30
- @matcher = validate_confirmation_of(:age)
31
- @matcher.matches?(@model)
32
- @matcher.failure_message.should == 'Expected User to be valid only when age is confirmed'
33
- end
34
-
35
- end
36
-
37
- describe 'matchers' do
38
-
39
- describe 'without options' do
40
- before(:each){ define_and_validate }
41
-
42
- it { should validate_confirmation_of(:name) }
43
- it { should validate_confirmation_of(:name, :email) }
44
- it { should_not validate_confirmation_of(:name, :age) }
45
- end
46
-
47
- create_message_specs(self)
48
- end
49
-
50
- describe 'macros' do
51
- before(:each){ define_and_validate }
52
-
53
- should_validate_confirmation_of :name
54
- should_validate_confirmation_of :name, :email
55
- should_not_validate_confirmation_of :name, :age
56
- end
57
-
5
+
6
+ # Defines a model, create a validation and returns a raw matcher
7
+ def define_and_validate(options={})
8
+ @model = define_model :user, :name => :string, :email => :string, :age => :string do
9
+ validates_confirmation_of :name, :email, options
10
+ end
11
+
12
+ validate_confirmation_of(:name, :email)
13
+ end
14
+
15
+ describe 'messages' do
16
+ before(:each){ @matcher = define_and_validate }
17
+
18
+ it 'should contain a description' do
19
+ @matcher.description.should == 'require name and email to be confirmed'
20
+ end
21
+
22
+ it 'should set responds_to_confirmation? message' do
23
+ @matcher = validate_confirmation_of(:age)
24
+ @matcher.matches?(@model)
25
+ @matcher.failure_message.should == 'Expected User instance responds to age_confirmation'
26
+ end
27
+
28
+ it 'should set confirms? message' do
29
+ @model.instance_eval{ def age_confirmation=(*args); end }
30
+ @matcher = validate_confirmation_of(:age)
31
+ @matcher.matches?(@model)
32
+ @matcher.failure_message.should == 'Expected User to be valid only when age is confirmed'
33
+ end
34
+
35
+ end
36
+
37
+ describe 'matchers' do
38
+
39
+ describe 'without options' do
40
+ before(:each){ define_and_validate }
41
+
42
+ it { should validate_confirmation_of(:name) }
43
+ it { should validate_confirmation_of(:name, :email) }
44
+ it { should_not validate_confirmation_of(:name, :age) }
45
+ end
46
+
47
+ create_message_specs(self)
48
+ end
49
+
50
+ describe 'macros' do
51
+ before(:each){ define_and_validate }
52
+
53
+ should_validate_confirmation_of :name
54
+ should_validate_confirmation_of :name, :email
55
+ should_not_validate_confirmation_of :name, :age
56
+ end
57
+
58
58
  end
@@ -1,88 +1,88 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
- describe 'validate_exclusion_of' do
3
+ describe 'validate_exclusion_of' do
4
4
  include ModelBuilder
5
-
6
- # Defines a model, create a validation and returns a raw matcher
7
- def define_and_validate(options={})
8
- @model = define_model :product, :title => :string, :size => :string do
9
- validates_exclusion_of :title, :size, options
10
- end
11
-
12
- validate_exclusion_of(:title, :size)
13
- end
14
-
15
- describe 'messages' do
16
-
17
- it 'should contain a description' do
18
- @matcher = define_and_validate(:in => 2..10)
19
- @matcher.in(2..10)
20
- @matcher.description.should == 'ensure exclusion of title and size in 2..10'
21
-
22
- @matcher = validate_exclusion_of(:title, :size).in('X', 'Y', 'Z')
5
+
6
+ # Defines a model, create a validation and returns a raw matcher
7
+ def define_and_validate(options={})
8
+ @model = define_model :product, :title => :string, :size => :string do
9
+ validates_exclusion_of :title, :size, options
10
+ end
11
+
12
+ validate_exclusion_of(:title, :size)
13
+ end
14
+
15
+ describe 'messages' do
16
+
17
+ it 'should contain a description' do
18
+ @matcher = define_and_validate(:in => 2..10)
19
+ @matcher.in(2..10)
20
+ @matcher.description.should == 'ensure exclusion of title and size in 2..10'
21
+
22
+ @matcher = validate_exclusion_of(:title, :size).in('X', 'Y', 'Z')
23
23
  @matcher.description.should == 'ensure exclusion of title and size in "X", "Y", and "Z"'
24
24
  end
25
-
26
- it 'should set is_invalid? message' do
27
- @matcher = define_and_validate(:in => 2..10)
25
+
26
+ it 'should set is_invalid? message' do
27
+ @matcher = define_and_validate(:in => 2..10)
28
28
  @matcher.in(1..10).matches?(@model)
29
- @matcher.failure_message.should == 'Expected Product to be invalid when title is set to 1'
30
- end
31
-
32
- it 'should set is_valid? message' do
33
- @matcher = define_and_validate(:in => 2..10)
29
+ @matcher.failure_message.should == 'Expected Product to be invalid when title is set to 1'
30
+ end
31
+
32
+ it 'should set is_valid? message' do
33
+ @matcher = define_and_validate(:in => 2..10)
34
34
  @matcher.in(3..10).matches?(@model)
35
- @matcher.failure_message.should == 'Expected Product to be valid when title is set to 2'
36
- end
35
+ @matcher.failure_message.should == 'Expected Product to be valid when title is set to 2'
36
+ end
37
37
 
38
- it 'should set allow_nil? message' do
39
- @matcher = define_and_validate(:in => [nil])
38
+ it 'should set allow_nil? message' do
39
+ @matcher = define_and_validate(:in => [nil])
40
40
  @matcher.allow_nil.matches?(@model)
41
- @matcher.failure_message.should == 'Expected Product to allow nil values for title'
42
- end
43
-
44
- it 'should set allow_blank? message' do
45
- @matcher = define_and_validate(:in => [''])
41
+ @matcher.failure_message.should == 'Expected Product to allow nil values for title'
42
+ end
43
+
44
+ it 'should set allow_blank? message' do
45
+ @matcher = define_and_validate(:in => [''])
46
46
  @matcher.allow_blank.matches?(@model)
47
- @matcher.failure_message.should == 'Expected Product to allow blank values for title'
48
- end
49
- end
50
-
51
- describe 'matchers' do
52
- it { should define_and_validate(:in => ['X', 'Y', 'Z']).in('X', 'Y', 'Z') }
53
- it { should_not define_and_validate(:in => ['X', 'Y', 'Z']).in('A') }
54
-
55
- it { should define_and_validate(:in => 2..3).in(2..3) }
56
- it { should define_and_validate(:in => 2..20).in(2..20) }
57
- it { should_not define_and_validate(:in => 2..20).in(1..20) }
58
- it { should_not define_and_validate(:in => 2..20).in(3..20) }
59
- it { should_not define_and_validate(:in => 2..20).in(2..19) }
60
- it { should_not define_and_validate(:in => 2..20).in(2..21) }
61
-
62
- it { should define_and_validate(:in => ['X', 'Y', 'Z'], :message => 'valid').in('X', 'Y', 'Z').message('valid') }
63
-
64
- create_optional_boolean_specs(:allow_nil, self, :in => [nil])
65
- create_optional_boolean_specs(:allow_blank, self, :in => [''])
66
- end
67
-
68
- describe 'macros' do
69
- describe 'with array' do
70
- before(:each){ define_and_validate(:in => ['X', 'Y', 'Z']) }
71
-
72
- should_validate_exclusion_of :title, :in => ['X']
73
- should_validate_exclusion_of :title, :size, :in => ['X']
74
- should_not_validate_exclusion_of :title, :size, :in => ['A']
75
- end
76
-
77
- describe 'with range' do
78
- before(:each){ define_and_validate(:in => 2..20) }
79
-
80
- should_validate_exclusion_of :title, :in => 2..20
81
- should_not_validate_exclusion_of :title, :in => 1..20
82
- should_not_validate_exclusion_of :title, :in => 3..20
83
- should_not_validate_exclusion_of :title, :in => 2..19
84
- should_not_validate_exclusion_of :title, :in => 2..21
85
- end
47
+ @matcher.failure_message.should == 'Expected Product to allow blank values for title'
48
+ end
49
+ end
50
+
51
+ describe 'matchers' do
52
+ it { should define_and_validate(:in => ['X', 'Y', 'Z']).in('X', 'Y', 'Z') }
53
+ it { should_not define_and_validate(:in => ['X', 'Y', 'Z']).in('A') }
54
+
55
+ it { should define_and_validate(:in => 2..3).in(2..3) }
56
+ it { should define_and_validate(:in => 2..20).in(2..20) }
57
+ it { should_not define_and_validate(:in => 2..20).in(1..20) }
58
+ it { should_not define_and_validate(:in => 2..20).in(3..20) }
59
+ it { should_not define_and_validate(:in => 2..20).in(2..19) }
60
+ it { should_not define_and_validate(:in => 2..20).in(2..21) }
61
+
62
+ it { should define_and_validate(:in => ['X', 'Y', 'Z'], :message => 'valid').in('X', 'Y', 'Z').message('valid') }
63
+
64
+ create_optional_boolean_specs(:allow_nil, self, :in => [nil])
65
+ create_optional_boolean_specs(:allow_blank, self, :in => [''])
66
+ end
67
+
68
+ describe 'macros' do
69
+ describe 'with array' do
70
+ before(:each){ define_and_validate(:in => ['X', 'Y', 'Z']) }
71
+
72
+ should_validate_exclusion_of :title, :in => ['X']
73
+ should_validate_exclusion_of :title, :size, :in => ['X']
74
+ should_not_validate_exclusion_of :title, :size, :in => ['A']
75
+ end
76
+
77
+ describe 'with range' do
78
+ before(:each){ define_and_validate(:in => 2..20) }
79
+
80
+ should_validate_exclusion_of :title, :in => 2..20
81
+ should_not_validate_exclusion_of :title, :in => 1..20
82
+ should_not_validate_exclusion_of :title, :in => 3..20
83
+ should_not_validate_exclusion_of :title, :in => 2..19
84
+ should_not_validate_exclusion_of :title, :in => 2..21
85
+ end
86
86
  end
87
87
  end
88
-
88
+
@@ -1,84 +1,84 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
- describe 'validate_inclusion_of' do
3
+ describe 'validate_inclusion_of' do
4
4
  include ModelBuilder
5
-
6
- # Defines a model, create a validation and returns a raw matcher
7
- def define_and_validate(options={})
8
- @model = define_model :product, :title => :string, :size => :string do
9
- validates_inclusion_of :title, :size, options
10
- end
11
-
12
- validate_inclusion_of(:title, :size)
13
- end
14
-
15
- describe 'messages' do
16
- before(:each){ @matcher = define_and_validate(:in => 2..10) }
17
-
18
- it 'should contain a description' do
19
- @matcher.in(2..10)
20
- @matcher.description.should == 'ensure inclusion of title and size in 2..10'
21
-
22
- @matcher = validate_inclusion_of(:title, :size).in('X', 'Y', 'Z')
5
+
6
+ # Defines a model, create a validation and returns a raw matcher
7
+ def define_and_validate(options={})
8
+ @model = define_model :product, :title => :string, :size => :string do
9
+ validates_inclusion_of :title, :size, options
10
+ end
11
+
12
+ validate_inclusion_of(:title, :size)
13
+ end
14
+
15
+ describe 'messages' do
16
+ before(:each){ @matcher = define_and_validate(:in => 2..10) }
17
+
18
+ it 'should contain a description' do
19
+ @matcher.in(2..10)
20
+ @matcher.description.should == 'ensure inclusion of title and size in 2..10'
21
+
22
+ @matcher = validate_inclusion_of(:title, :size).in('X', 'Y', 'Z')
23
23
  @matcher.description.should == 'ensure inclusion of title and size in "X", "Y", and "Z"'
24
24
  end
25
-
26
- it 'should set is_valid? message' do
25
+
26
+ it 'should set is_valid? message' do
27
27
  @matcher.in(1..10).matches?(@model)
28
- @matcher.failure_message.should == 'Expected Product to be valid when title is set to 1'
29
- end
30
-
31
- it 'should set is_invalid? message' do
28
+ @matcher.failure_message.should == 'Expected Product to be valid when title is set to 1'
29
+ end
30
+
31
+ it 'should set is_invalid? message' do
32
32
  @matcher.in(3..10).matches?(@model)
33
- @matcher.failure_message.should == 'Expected Product to be invalid when title is set to 2'
34
- end
33
+ @matcher.failure_message.should == 'Expected Product to be invalid when title is set to 2'
34
+ end
35
35
 
36
- it 'should set allow_nil? message' do
36
+ it 'should set allow_nil? message' do
37
37
  @matcher.allow_nil.matches?(@model)
38
- @matcher.failure_message.should == 'Expected Product to allow nil values for title'
39
- end
40
-
41
- it 'should set allow_blank? message' do
38
+ @matcher.failure_message.should == 'Expected Product to allow nil values for title'
39
+ end
40
+
41
+ it 'should set allow_blank? message' do
42
42
  @matcher.allow_blank.matches?(@model)
43
- @matcher.failure_message.should == 'Expected Product to allow blank values for title'
44
- end
45
- end
46
-
47
- describe 'matchers' do
48
- it { should define_and_validate(:in => ['X', 'Y', 'Z']).in('X', 'Y', 'Z') }
49
- it { should_not define_and_validate(:in => ['X', 'Y', 'Z']).in('A') }
50
-
51
- it { should define_and_validate(:in => 2..3).in(2..3) }
52
- it { should define_and_validate(:in => 2..20).in(2..20) }
53
- it { should_not define_and_validate(:in => 2..20).in(1..20) }
54
- it { should_not define_and_validate(:in => 2..20).in(3..20) }
55
- it { should_not define_and_validate(:in => 2..20).in(2..19) }
56
- it { should_not define_and_validate(:in => 2..20).in(2..21) }
57
-
58
- it { should define_and_validate(:in => ['X', 'Y', 'Z'], :message => 'valid').in('X', 'Y', 'Z').message('valid') }
59
-
60
- create_optional_boolean_specs(:allow_nil, self, :in => ['X'])
61
- create_optional_boolean_specs(:allow_blank, self, :in => ['X'])
62
- end
63
-
64
- describe 'macros' do
65
- describe 'with array' do
66
- before(:each){ define_and_validate(:in => ['X', 'Y', 'Z']) }
67
-
68
- should_validate_inclusion_of :title, :in => ['X']
69
- should_validate_inclusion_of :title, :size, :in => ['X']
70
- should_not_validate_inclusion_of :title, :size, :in => ['A']
71
- end
72
-
73
- describe 'with range' do
74
- before(:each){ define_and_validate(:in => 2..20) }
75
-
76
- should_validate_inclusion_of :title, :in => 2..20
77
- should_not_validate_inclusion_of :title, :in => 1..20
78
- should_not_validate_inclusion_of :title, :in => 3..20
79
- should_not_validate_inclusion_of :title, :in => 2..19
80
- should_not_validate_inclusion_of :title, :in => 2..21
81
- end
43
+ @matcher.failure_message.should == 'Expected Product to allow blank values for title'
44
+ end
45
+ end
46
+
47
+ describe 'matchers' do
48
+ it { should define_and_validate(:in => ['X', 'Y', 'Z']).in('X', 'Y', 'Z') }
49
+ it { should_not define_and_validate(:in => ['X', 'Y', 'Z']).in('A') }
50
+
51
+ it { should define_and_validate(:in => 2..3).in(2..3) }
52
+ it { should define_and_validate(:in => 2..20).in(2..20) }
53
+ it { should_not define_and_validate(:in => 2..20).in(1..20) }
54
+ it { should_not define_and_validate(:in => 2..20).in(3..20) }
55
+ it { should_not define_and_validate(:in => 2..20).in(2..19) }
56
+ it { should_not define_and_validate(:in => 2..20).in(2..21) }
57
+
58
+ it { should define_and_validate(:in => ['X', 'Y', 'Z'], :message => 'valid').in('X', 'Y', 'Z').message('valid') }
59
+
60
+ create_optional_boolean_specs(:allow_nil, self, :in => ['X'])
61
+ create_optional_boolean_specs(:allow_blank, self, :in => ['X'])
62
+ end
63
+
64
+ describe 'macros' do
65
+ describe 'with array' do
66
+ before(:each){ define_and_validate(:in => ['X', 'Y', 'Z']) }
67
+
68
+ should_validate_inclusion_of :title, :in => ['X']
69
+ should_validate_inclusion_of :title, :size, :in => ['X']
70
+ should_not_validate_inclusion_of :title, :size, :in => ['A']
71
+ end
72
+
73
+ describe 'with range' do
74
+ before(:each){ define_and_validate(:in => 2..20) }
75
+
76
+ should_validate_inclusion_of :title, :in => 2..20
77
+ should_not_validate_inclusion_of :title, :in => 1..20
78
+ should_not_validate_inclusion_of :title, :in => 3..20
79
+ should_not_validate_inclusion_of :title, :in => 2..19
80
+ should_not_validate_inclusion_of :title, :in => 2..21
81
+ end
82
82
  end
83
83
  end
84
-
84
+
@@ -1,22 +1,22 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
- describe 'validate_numericality_of' do
3
+ describe 'validate_numericality_of' do
4
4
  include ModelBuilder
5
-
6
- # Defines a model, create a validation and returns a raw matcher
7
- def define_and_validate(options={})
8
- @model = define_model :product, :price => :integer, :size => :integer do
9
- validates_numericality_of :price, options
10
- end
11
-
12
- validate_numericality_of(:price)
13
- end
14
-
15
- describe 'messages' do
16
- before(:each){ @matcher = define_and_validate }
17
-
18
- # To tests descriptions, we don't need to use mocks neither stubs.
19
- # We just need to define a matcher.
5
+
6
+ # Defines a model, create a validation and returns a raw matcher
7
+ def define_and_validate(options={})
8
+ @model = define_model :product, :price => :integer, :size => :integer do
9
+ validates_numericality_of :price, options
10
+ end
11
+
12
+ validate_numericality_of(:price)
13
+ end
14
+
15
+ describe 'messages' do
16
+ before(:each){ @matcher = define_and_validate }
17
+
18
+ # To tests descriptions, we don't need to use mocks neither stubs.
19
+ # We just need to define a matcher.
20
20
  #
21
21
  it 'should contain a description' do
22
22
  matcher = validate_numericality_of(:age)
@@ -50,23 +50,23 @@ describe 'validate_numericality_of' do
50
50
  matcher.description.should == 'ensure numericality of age is less than 10'
51
51
 
52
52
  matcher = validate_numericality_of(:age, :greater_than => 10)
53
- matcher.description.should == 'ensure numericality of age is greater than 10'
54
-
53
+ matcher.description.should == 'ensure numericality of age is greater than 10'
54
+
55
55
  matcher = validate_numericality_of(:age, :greater_than => 10, :less_than => 20)
56
56
  matcher.description.should == 'ensure numericality of age is greater than 10 and is less than 20'
57
57
  end
58
-
58
+
59
59
  it 'should set only_numeric_values? message' do
60
60
  @matcher.should_receive(:only_numeric_values?).and_return(false)
61
61
  @matcher.matches?(@model)
62
- @matcher.failure_message.should == 'Expected Product to allow only numeric values for price'
62
+ @matcher.failure_message.should == 'Expected Product to allow only numeric values for price'
63
63
  @matcher.negative_failure_message.should == 'Did not expect Product to allow only numeric values for price'
64
64
  end
65
65
 
66
66
  it 'should set only_integer_values? message' do
67
67
  @matcher.should_receive(:only_integer?).and_return([false, { :not => '' }])
68
68
  @matcher.matches?(@model)
69
- @matcher.failure_message.should == 'Expected Product to allow only integer values for price'
69
+ @matcher.failure_message.should == 'Expected Product to allow only integer values for price'
70
70
  end
71
71
 
72
72
  it 'should set only_odd_values? message' do
@@ -97,84 +97,84 @@ describe 'validate_numericality_of' do
97
97
  @matcher.should_receive(:more_than_maximum?).and_return([false, { :count => 10 }])
98
98
  @matcher.matches?(@model)
99
99
  @matcher.failure_message.should == 'Expected Product to be invalid when price is greater than 10'
100
- end
101
- end
102
-
103
- describe 'matcher' do
104
- # Wrap specs without options. Usually a couple specs.
105
- describe 'without options' do
106
- before(:each){ define_and_validate }
107
-
108
- it { should validate_numericality_of(:price) }
109
- it { should_not validate_numericality_of(:size) }
110
- end
111
-
112
- # Wrap each option inside a describe group.
113
- describe 'with equal_to option' do
114
- it { should define_and_validate(:equal_to => 100).equal_to(100) }
115
- it { should_not define_and_validate(:equal_to => 100).equal_to(99) }
116
- it { should_not define_and_validate(:equal_to => 100).equal_to(101) }
117
- end
118
-
119
- describe 'with less_than option' do
120
- it { should define_and_validate(:less_than => 100).less_than(100) }
121
- it { should_not define_and_validate(:less_than => 100).less_than(99) }
122
- it { should_not define_and_validate(:less_than => 100).less_than(101) }
123
- end
124
-
125
- describe 'with greater_than option' do
126
- it { should define_and_validate(:greater_than => 100).greater_than(100) }
127
- it { should_not define_and_validate(:greater_than => 100).greater_than(99) }
128
- it { should_not define_and_validate(:greater_than => 100).greater_than(101) }
129
- end
130
-
131
- describe 'with less_than_or_equal_to option' do
132
- it { should define_and_validate(:less_than_or_equal_to => 100).less_than_or_equal_to(100) }
133
- it { should_not define_and_validate(:less_than_or_equal_to => 100).less_than_or_equal_to(99) }
134
- it { should_not define_and_validate(:less_than_or_equal_to => 100).less_than_or_equal_to(101) }
135
- end
136
-
137
- describe 'with greater_than_or_equal_to option' do
138
- it { should define_and_validate(:greater_than_or_equal_to => 100).greater_than_or_equal_to(100) }
139
- it { should_not define_and_validate(:greater_than_or_equal_to => 100).greater_than_or_equal_to(99) }
140
- it { should_not define_and_validate(:greater_than_or_equal_to => 100).greater_than_or_equal_to(101) }
141
- end
142
-
143
- describe "with even option" do
144
- it { should define_and_validate(:even => true).even }
145
- it { should_not define_and_validate.even(true) }
146
- end
147
-
148
- describe "with odd option" do
149
- it { should define_and_validate(:odd => true).odd }
150
- it { should_not define_and_validate.odd(true) }
151
- end
152
-
153
- describe "with several options" do
154
- it { should define_and_validate(:less_than => 100, :greater_than => 10).less_than(100).greater_than(10) }
155
- it { should define_and_validate(:less_than => 100, :message => 'not valid').less_than(100).message('not valid') }
156
- it { should define_and_validate(:less_than_or_equal_to => 100, :greater_than => 1).less_than_or_equal_to(100).greater_than(1) }
157
- end
158
-
159
- # A macro to spec messages
160
- create_message_specs(self)
161
-
162
- # Those are macros to test optionals which accept only boolean values
163
- create_optional_boolean_specs(:allow_nil, self)
164
- create_optional_boolean_specs(:allow_blank, self)
165
- create_optional_boolean_specs(:only_integer, self)
166
- end
167
-
168
- # In macros we include just a few tests to assure that everything works properly
169
- describe 'macros' do
170
- before(:each) { define_and_validate(:less_than => 100000, :greater_than => 9999) }
171
-
172
- should_validate_numericality_of :price
173
- should_validate_numericality_of :price, :less_than => 100000
174
- should_validate_numericality_of :price, :greater_than => 9999
175
- should_validate_numericality_of :price, :less_than => 100000, :greater_than => 999
176
- should_not_validate_numericality_of :size
177
- should_not_validate_numericality_of :price, :less_than => 55555
178
- should_not_validate_numericality_of :price, :greater_than => 55555
100
+ end
101
+ end
102
+
103
+ describe 'matcher' do
104
+ # Wrap specs without options. Usually a couple specs.
105
+ describe 'without options' do
106
+ before(:each){ define_and_validate }
107
+
108
+ it { should validate_numericality_of(:price) }
109
+ it { should_not validate_numericality_of(:size) }
110
+ end
111
+
112
+ # Wrap each option inside a describe group.
113
+ describe 'with equal_to option' do
114
+ it { should define_and_validate(:equal_to => 100).equal_to(100) }
115
+ it { should_not define_and_validate(:equal_to => 100).equal_to(99) }
116
+ it { should_not define_and_validate(:equal_to => 100).equal_to(101) }
117
+ end
118
+
119
+ describe 'with less_than option' do
120
+ it { should define_and_validate(:less_than => 100).less_than(100) }
121
+ it { should_not define_and_validate(:less_than => 100).less_than(99) }
122
+ it { should_not define_and_validate(:less_than => 100).less_than(101) }
123
+ end
124
+
125
+ describe 'with greater_than option' do
126
+ it { should define_and_validate(:greater_than => 100).greater_than(100) }
127
+ it { should_not define_and_validate(:greater_than => 100).greater_than(99) }
128
+ it { should_not define_and_validate(:greater_than => 100).greater_than(101) }
129
+ end
130
+
131
+ describe 'with less_than_or_equal_to option' do
132
+ it { should define_and_validate(:less_than_or_equal_to => 100).less_than_or_equal_to(100) }
133
+ it { should_not define_and_validate(:less_than_or_equal_to => 100).less_than_or_equal_to(99) }
134
+ it { should_not define_and_validate(:less_than_or_equal_to => 100).less_than_or_equal_to(101) }
135
+ end
136
+
137
+ describe 'with greater_than_or_equal_to option' do
138
+ it { should define_and_validate(:greater_than_or_equal_to => 100).greater_than_or_equal_to(100) }
139
+ it { should_not define_and_validate(:greater_than_or_equal_to => 100).greater_than_or_equal_to(99) }
140
+ it { should_not define_and_validate(:greater_than_or_equal_to => 100).greater_than_or_equal_to(101) }
141
+ end
142
+
143
+ describe "with even option" do
144
+ it { should define_and_validate(:even => true).even }
145
+ it { should_not define_and_validate.even(true) }
146
+ end
147
+
148
+ describe "with odd option" do
149
+ it { should define_and_validate(:odd => true).odd }
150
+ it { should_not define_and_validate.odd(true) }
151
+ end
152
+
153
+ describe "with several options" do
154
+ it { should define_and_validate(:less_than => 100, :greater_than => 10).less_than(100).greater_than(10) }
155
+ it { should define_and_validate(:less_than => 100, :message => 'not valid').less_than(100).message('not valid') }
156
+ it { should define_and_validate(:less_than_or_equal_to => 100, :greater_than => 1).less_than_or_equal_to(100).greater_than(1) }
157
+ end
158
+
159
+ # A macro to spec messages
160
+ create_message_specs(self)
161
+
162
+ # Those are macros to test optionals which accept only boolean values
163
+ create_optional_boolean_specs(:allow_nil, self)
164
+ create_optional_boolean_specs(:allow_blank, self)
165
+ create_optional_boolean_specs(:only_integer, self)
166
+ end
167
+
168
+ # In macros we include just a few tests to assure that everything works properly
169
+ describe 'macros' do
170
+ before(:each) { define_and_validate(:less_than => 100000, :greater_than => 9999) }
171
+
172
+ should_validate_numericality_of :price
173
+ should_validate_numericality_of :price, :less_than => 100000
174
+ should_validate_numericality_of :price, :greater_than => 9999
175
+ should_validate_numericality_of :price, :less_than => 100000, :greater_than => 999
176
+ should_not_validate_numericality_of :size
177
+ should_not_validate_numericality_of :price, :less_than => 55555
178
+ should_not_validate_numericality_of :price, :greater_than => 55555
179
179
  end
180
180
  end