activevalidators 5.1.0 → 6.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e28fd41e5406e9d587414ae53528c6ab0ea6542950b16ba990a6f51f120bd192
4
- data.tar.gz: 55add0e3513f0fe48f4924322e06456f4481ec4ce213be561b24cacd5342ebd0
3
+ metadata.gz: f7f7021ca57db2d5fe1a6f878acb5b030bde446515fc0a7ad12ca9bd1c31d8e8
4
+ data.tar.gz: dc288f41af3d6df1a5f649accf8e39cd6b6c549308867dff2ac90122be895c1b
5
5
  SHA512:
6
- metadata.gz: '0866bce8c7f7d4bbb327681eb31b185534c5322533281e2adf56919dd6fbb6ca2d1315500a88b0b85d89b9524ff83b5435c3df41a164cab0c5f4154e07f52332'
7
- data.tar.gz: 065aea8ed9dc5f4581163ec02e92a25671e548714c05b90b6e229b0af8856795fe07c2a4037beea6d2a9a0332bc840a6ee56682d75994b32fb8f543ac8075802
6
+ metadata.gz: f86c1a1c257400e3e4dacb1c5afb05066c41d43b71d999512277baa382f3263f4c97e5ec6af9c53ecf5fbb5c8ea1d17226c8258dc74cbd2a3516998628621a7c
7
+ data.tar.gz: f5080b7f8df260c69b31d3fa8e32c7a7f4646f9195aa5687686234afd6dd52a3763f695b20764f00b43b319d70dc6659b0e81f1d93c5aaa7b61adbc094ccaf87
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -28,57 +28,106 @@ shared: &shared
28
28
  command: bundle exec rake
29
29
 
30
30
  jobs:
31
- # RAILS_VERSION=5.1.6
32
- "ruby-2.4/rails-5.1.6":
31
+ # RAILS_VERSION=5.1.7
32
+ "ruby-2.4/rails-5.1.7":
33
33
  <<: *shared
34
34
  docker:
35
35
  - image: circleci/ruby:2.4
36
36
  environment:
37
- RAILS_VERSION=5.1.6
37
+ RAILS_VERSION=5.1.7
38
38
 
39
- "ruby-2.5/rails-5.1.6":
39
+ "ruby-2.5/rails-5.1.7":
40
40
  <<: *shared
41
41
  docker:
42
42
  - image: circleci/ruby:2.5
43
43
  environment:
44
- RAILS_VERSION=5.1.6
44
+ RAILS_VERSION=5.1.7
45
45
 
46
- "ruby-2.6/rails-5.1.6":
46
+ "ruby-2.6/rails-5.1.7":
47
47
  <<: *shared
48
48
  docker:
49
49
  - image: circleci/ruby:2.6
50
50
  environment:
51
- RAILS_VERSION=5.1.6
51
+ RAILS_VERSION=5.1.7
52
52
 
53
- # RAILS_VERSION=5.2.2
54
- "ruby-2.4/rails-5.2.2":
53
+ "ruby-2.7/rails-5.1.7":
54
+ <<: *shared
55
+ docker:
56
+ - image: circleci/ruby:2.7
57
+ environment:
58
+ RAILS_VERSION=5.1.7
59
+
60
+ # RAILS_VERSION=5.2.4
61
+ "ruby-2.4/rails-5.2.4":
55
62
  <<: *shared
56
63
  docker:
57
64
  - image: circleci/ruby:2.4
58
65
  environment:
59
- RAILS_VERSION=5.2.2
66
+ RAILS_VERSION=5.2.4
60
67
 
61
- "ruby-2.5/rails-5.2.2":
68
+ "ruby-2.5/rails-5.2.4":
62
69
  <<: *shared
63
70
  docker:
64
71
  - image: circleci/ruby:2.5
65
72
  environment:
66
- RAILS_VERSION=5.2.2
73
+ RAILS_VERSION=5.2.4
67
74
 
68
- "ruby-2.6/rails-5.2.2":
75
+ "ruby-2.6/rails-5.2.4":
69
76
  <<: *shared
70
77
  docker:
71
78
  - image: circleci/ruby:2.6
72
79
  environment:
73
- RAILS_VERSION=5.2.2
80
+ RAILS_VERSION=5.2.4
81
+
82
+ "ruby-2.7/rails-5.2.4":
83
+ <<: *shared
84
+ docker:
85
+ - image: circleci/ruby:2.7
86
+ environment:
87
+ RAILS_VERSION=5.2.4
88
+
89
+ # RAILS_VERSION=6.0.2
90
+ "ruby-2.4/rails-6.0.2":
91
+ <<: *shared
92
+ docker:
93
+ - image: circleci/ruby:2.4
94
+ environment:
95
+ RAILS_VERSION=6.0.2
96
+
97
+ "ruby-2.5/rails-6.0.2":
98
+ <<: *shared
99
+ docker:
100
+ - image: circleci/ruby:2.5
101
+ environment:
102
+ RAILS_VERSION=6.0.2
103
+
104
+ "ruby-2.6/rails-6.0.2":
105
+ <<: *shared
106
+ docker:
107
+ - image: circleci/ruby:2.6
108
+ environment:
109
+ RAILS_VERSION=6.0.2
110
+
111
+ "ruby-2.7/rails-6.0.2":
112
+ <<: *shared
113
+ docker:
114
+ - image: circleci/ruby:2.7
115
+ environment:
116
+ RAILS_VERSION=6.0.2
74
117
 
75
118
  workflows:
76
119
  version: 2
77
120
  build:
78
121
  jobs:
79
- - "ruby-2.4/rails-5.1.6"
80
- - "ruby-2.5/rails-5.1.6"
81
- - "ruby-2.6/rails-5.1.6"
82
- - "ruby-2.4/rails-5.2.2"
83
- - "ruby-2.5/rails-5.2.2"
84
- - "ruby-2.6/rails-5.2.2"
122
+ - "ruby-2.4/rails-5.1.7"
123
+ - "ruby-2.5/rails-5.1.7"
124
+ - "ruby-2.6/rails-5.1.7"
125
+ - "ruby-2.7/rails-5.1.7"
126
+ - "ruby-2.4/rails-5.2.4"
127
+ - "ruby-2.5/rails-5.2.4"
128
+ - "ruby-2.6/rails-5.2.4"
129
+ - "ruby-2.7/rails-5.2.4"
130
+ - "ruby-2.4/rails-6.0.2"
131
+ - "ruby-2.5/rails-6.0.2"
132
+ - "ruby-2.6/rails-6.0.2"
133
+ - "ruby-2.7/rails-6.0.2"
@@ -1,6 +1,6 @@
1
1
  # UNRELEASED
2
2
 
3
- # 5.x.y
3
+ # 6.x.y
4
4
 
5
5
  ## BREAKING CHANGES
6
6
 
@@ -9,6 +9,18 @@
9
9
  ## CHANGES
10
10
 
11
11
 
12
+ # 6.0.0
13
+
14
+ ## BREAKING CHANGES
15
+
16
+ ## DEPRECATION
17
+
18
+ ## CHANGES
19
+
20
+ * Add support for Rails 6
21
+ * Add support for Ruby 2.7
22
+
23
+
12
24
  # 5.1.0
13
25
 
14
26
  ## BREAKING CHANGES
data/README.md CHANGED
@@ -32,7 +32,7 @@ This projects follows [Semantic Versioning a.k.a SemVer](http://semver.org). If
32
32
  What it means is that you should specify an ActiveValidators version like this :
33
33
 
34
34
  ```ruby
35
- gem 'activevalidators', '~> 5.0.0' # <-- mind the patch version
35
+ gem 'activevalidators', '~> 5.1.0' # <-- mind the patch version
36
36
  ```
37
37
 
38
38
  Once you have `require`'d the gem, you will have to activate the validators you
@@ -1,7 +1,7 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  Gem::Specification.new do |s|
3
3
  s.name = 'activevalidators'
4
- s.version = '5.1.0'
4
+ s.version = '6.0.0'
5
5
  s.platform = Gem::Platform::RUBY
6
6
  s.authors = ['Franck Verrot']
7
7
  s.email = ['franck@verrot.fr']
@@ -1,25 +1,25 @@
1
1
  -----BEGIN CERTIFICATE-----
2
2
  MIIEMDCCApigAwIBAgIBATANBgkqhkiG9w0BAQsFADAhMR8wHQYDVQQDDBZmcmFu
3
- Y2svREM9dmVycm90L0RDPWZyMB4XDTE4MTIyMTAxMzgwNVoXDTE5MTIyMTAxMzgw
4
- NVowITEfMB0GA1UEAwwWZnJhbmNrL0RDPXZlcnJvdC9EQz1mcjCCAaIwDQYJKoZI
5
- hvcNAQEBBQADggGPADCCAYoCggGBANjZ/7L2ECEQAVOYvMl0JOwyVXKRCsLnVrmP
6
- mcwpCMFL0ennkpLJcqiDNsm0b/RkJHSLu3FMoYrIU5KoaP7iMIsLGv846aw2wSNI
7
- G5XWGnRY9dWVu7Gz2OZbsDi18WT94Y/s2yf+orPLAiaJb451decYEpHqLTiaJhhJ
8
- xHckJixfDVwZGJpow7rrJAJMbU9ZCJFUFAfNpgkOqhbBU4Ehi1umbC/ZBsVDiRVa
9
- ZjfNhe7kgx6jo3EfPY4izPW2IKkpk7nJKNfZnM2r0cnpPJbhyH1m5fsikBD5tRNe
10
- YxJpxDPf8UBTTXqoeSSQygiHWWZVbH3zj2jWzi5T0do5PbZcCeoIKR4TyOgbOgBW
11
- Ra7bm9uVXo6MQWpp0aeC/X+F2Y/dFjXAP/TPL89ownd3XZUaNDdZfS6aKBMG3a5C
12
- gcRLMt1hOJchslGNtvkq5W4Wq8hw+zNHzTMpRkIsYTbvlJCDxXRKR3jwPDTRvNAl
13
- aemBW1g3yerHeDQr6GtxKEvhmHdw/wIDAQABo3MwcTAJBgNVHRMEAjAAMAsGA1Ud
14
- DwQEAwIEsDAdBgNVHQ4EFgQUgG77cLAMzowManymHX63DbvfR5IwGwYDVR0RBBQw
3
+ Y2svREM9dmVycm90L0RDPWZyMB4XDTE5MTIzMTA0NDkyOFoXDTIwMTIzMDA0NDky
4
+ OFowITEfMB0GA1UEAwwWZnJhbmNrL0RDPXZlcnJvdC9EQz1mcjCCAaIwDQYJKoZI
5
+ hvcNAQEBBQADggGPADCCAYoCggGBAMdPy9SjSIWxUF0E6AZycgmgJYJPzFRuLBi4
6
+ JoT7QSgBoY85Lmzgy/tk0dEeha1B6Wt4xSR5XB1v3pws77IVGofZ4Pr46mueJlBo
7
+ f3U2Xm8nykUWjufBqbKgwvdrnFq/utrWNjO+8oMYCEfKzsAQM5u1pcwUknR1ZR/s
8
+ HdD8V9/bACS6rDuiOt7XBCosgxJ78ImtIBjldWy+6KssuEuacoGglqqAsisazvdc
9
+ 3DkzqqnB6Mlg1+LYtuQ9m5bViA87FH3AD2H+EIYKsr7Q/1jfMFzH2U6m/jBNTQ/v
10
+ uuD9PbiHtXatzmW1H/6OcsoS9lV2jjU09vJYOOGaXEMLqbAC9WxYaoE34GwAX6EL
11
+ VOGVmtYMdwSkgMamDs6iUTqRZl4LMxtWff54T5EHk+ul6yDs/1ND5nbOeFpkz6JK
12
+ eHUnxTxTgD48Zo3PWCtvGK36ZHVj0RmB3GqNZBr/Z+vfGeVTjzQXyy7+Gu7okGdN
13
+ s1gcDoVe1uUSbot1Hi9yOwG94MV0BQIDAQABo3MwcTAJBgNVHRMEAjAAMAsGA1Ud
14
+ DwQEAwIEsDAdBgNVHQ4EFgQUIWiEXS2Ddxrtivykq3L2AJMcNWAwGwYDVR0RBBQw
15
15
  EoEQZnJhbmNrQHZlcnJvdC5mcjAbBgNVHRIEFDASgRBmcmFuY2tAdmVycm90LmZy
16
- MA0GCSqGSIb3DQEBCwUAA4IBgQAofcg/2kPT9VMBGEuO17F3yH6fiJboQeLL1nlM
17
- ULZv5LyyqV6Yq0cQ+TZMGHd/hbvBFTN9/55WmiN66tYLaunyfr4aUflCQcM/qu2g
18
- Ieoz8QLxfIi24DCDezpODHaud6Qt0VmMpalSOxbCuMeNnXLpnxbP/7fJBJoum5GS
19
- CqGuH81fXy7KAAlgMBcsYb3+vZJhuAeM/zSrE5Hmf1zApTEVZc4Y0dO6eRC6WbXW
20
- pJfyNXyITkkr7pTRYO/wj3lFoeDqfGXb48HvpJ54lqfeIvr9Hek7grcyQGfZ1rFY
21
- Dx3RTjxParzCWk/HCFHQiZmU5lnOl7GShwAZrG6l0UHST3/YNCA52KDrmC/T0A2N
22
- d2MQGgSZerYTx+HRKlradglBDPCs4nxQj5pnoDvGbngeZUua+ZZGFM9SXBT3zAIQ
23
- akLQjJWKHQCzyqDChJHRGhlxyVFKP2JwqFgzE3p1l64JArsb7BEqhpoBPXMwlChE
24
- HgzCBTsCU0syQBb1s6lBz2HrWA4=
16
+ MA0GCSqGSIb3DQEBCwUAA4IBgQCFMXnQLS2lC537h5iMXJsxXffgrQmxElrpyJL6
17
+ 0Edlr0udk9WWrvcfAeDDnciKEclzIHC9CSE3zzAX2wtLq+52JPp9f9T3ZAv+VgR6
18
+ azNNOkYuyr1b8IVUVPQDjm+wjfeKvSF5pSbLCoRsswZzdyoCLj7d+E+eGt2+vksd
19
+ 6O9SYwJqLNmul8V4XU6og+CkLzlHlnLnJ64WYPmd0M/RAW0NWRbDjD440mlw7p4U
20
+ 6ZiUKsOT6zcDUcotKyHDjQbx17Mw0z7ETzOh1/rpuxnOWXbEEcHFbqZVcvII9Zqn
21
+ EoFKzXPEEv2cl71U9NMNp/ChoCEpaY4+ZwSbpefjEeyuG64leJt7ZrFVzUK7yYlL
22
+ upHY23hQxN/JZ/5w6PMX16CuRQyy8QiM3v3G6/tUC+tz8e87gUR38T+kZz9WswzF
23
+ dRt6SQwLMV0PupkBmyc7hvwkjo0eXQ+SbuxwqYu03GBEapii1kjozUclRJI7Nj97
24
+ Viwe79MCVe/o/vXeOr6Gso2TSEY=
25
25
  -----END CERTIFICATE-----
@@ -6,34 +6,34 @@ describe "Barcode Validation" do
6
6
  it "accepts valid EAN13s" do
7
7
  ["9782940199617", "9782940199600"].each do |barcode|
8
8
  subject = build_barcode_record :ean13, :barcode => barcode
9
- subject.valid?.must_equal true
10
- subject.errors.size.must_equal 0
9
+ _(subject.valid?).must_equal(true)
10
+ _(subject.errors.size).must_equal(0)
11
11
  end
12
12
  end
13
13
 
14
14
  it "accepts EAN13s as integers" do
15
15
  subject = build_barcode_record :ean13, :barcode => 9782940199617
16
- subject.valid?.must_equal true
17
- subject.errors.size.must_equal 0
16
+ _(subject.valid?).must_equal(true)
17
+ _(subject.errors.size).must_equal(0)
18
18
  end
19
19
 
20
20
  describe "for invalid EAN13s" do
21
21
  it "rejects invalid EAN13s" do
22
22
  subject = build_barcode_record :ean13, :barcode => "9782940199616"
23
- subject.valid?.must_equal false
24
- subject.errors.size.must_equal 1
23
+ _(subject.valid?).must_equal(false)
24
+ _(subject.errors.size).must_equal(1)
25
25
  end
26
26
 
27
27
  it "rejects EAN13s with invalid length" do
28
28
  subject = build_barcode_record :ean13, :barcode => "50239201872045879"
29
- subject.valid?.must_equal false
30
- subject.errors.size.must_equal 1
29
+ _(subject.valid?).must_equal(false)
30
+ _(subject.errors.size).must_equal(1)
31
31
  end
32
32
 
33
33
  it "rejects EAN13s with invalid value (not only integers)" do
34
34
  subject = build_barcode_record :ean13, :barcode => "502392de872e4"
35
- subject.valid?.must_equal false
36
- subject.errors.size.must_equal 1
35
+ _(subject.valid?).must_equal(false)
36
+ _(subject.errors.size).must_equal(1)
37
37
  end
38
38
  end
39
39
  end
@@ -43,14 +43,14 @@ describe "Barcode Validation" do
43
43
  error = assert_raises ArgumentError do
44
44
  build_barcode_record :format_not_supported, :barcode => "9782940199617"
45
45
  end
46
- error.message.must_equal "Barcode format (format_not_supported) not supported"
46
+ _(error.message).must_equal("Barcode format (format_not_supported) not supported")
47
47
  end
48
48
 
49
49
  it "raises an error when you omit format option" do
50
50
  error = assert_raises ArgumentError do
51
51
  build_barcode_record nil, :barcode => "9782940199617"
52
52
  end
53
- error.message.must_equal ":format cannot be blank!"
53
+ _(error.message).must_equal(":format cannot be blank!")
54
54
  end
55
55
  end
56
56
 
@@ -79,14 +79,14 @@ describe "Credit Card Validation" do
79
79
  end
80
80
 
81
81
  def card_is_valid?(subject)
82
- subject.valid?.must_equal true
83
- subject.errors.size.must_equal 0
82
+ _(subject.valid?).must_equal(true)
83
+ _(subject.errors.size).must_equal(0)
84
84
  end
85
85
 
86
86
  def card_is_invalid?(subject)
87
- subject.valid?.must_equal false
88
- subject.errors.size.must_equal 1
89
- subject.errors[:card].include?(subject.errors.generate_message(:card, :invalid)).must_equal true
87
+ _(subject.valid?).must_equal(false)
88
+ _(subject.errors.size).must_equal(1)
89
+ _(subject.errors[:card].include?(subject.errors.generate_message(:card, :invalid))).must_equal(true)
90
90
  end
91
91
 
92
92
  end
@@ -6,107 +6,107 @@ describe "Email Validation" do
6
6
 
7
7
  it "accepts valid emails" do
8
8
  subject = build_email_record({:email => 'franck@verrot.fr'}, {:strict => true})
9
- subject.valid?.must_equal true
10
- subject.errors.size.must_equal 0
9
+ _(subject.valid?).must_equal(true)
10
+ _(subject.errors.size).must_equal(0)
11
11
  end
12
12
 
13
13
  it "accepts valid emails" do
14
14
  subject = build_email_record({:email => 'franck@edu.verrot-gouv.fr'}, {:strict => true})
15
- subject.valid?.must_equal true
16
- subject.errors.size.must_equal 0
15
+ _(subject.valid?).must_equal(true)
16
+ _(subject.errors.size).must_equal(0)
17
17
  end
18
18
 
19
19
  it "accepts complete emails" do
20
20
  subject = build_email_record({:email => 'Mikel Lindsaar (My email address) <mikel@test.lindsaar.net>'}, {:strict => true})
21
- subject.valid?.must_equal true
22
- subject.errors.size.must_equal 0
21
+ _(subject.valid?).must_equal(true)
22
+ _(subject.errors.size).must_equal(0)
23
23
  end
24
24
 
25
25
  it "accepts email addresses without TLD" do
26
26
  subject = build_email_record({:email => 'franck@verrotfr'}, {:strict => true})
27
- subject.valid?.must_equal false
28
- subject.errors.size.must_equal 1
27
+ _(subject.valid?).must_equal(false)
28
+ _(subject.errors.size).must_equal(1)
29
29
  end
30
30
  end
31
31
 
32
32
  describe "strict: false (default)" do
33
33
  it "accepts valid emails" do
34
34
  subject = build_email_record :email => 'franck@verrot.fr'
35
- subject.valid?.must_equal true
36
- subject.errors.size.must_equal 0
35
+ _(subject.valid?).must_equal(true)
36
+ _(subject.errors.size).must_equal(0)
37
37
  end
38
38
 
39
39
  it "accepts valid emails" do
40
40
  subject = build_email_record :email => 'franck@edu.verrot-gouv.fr'
41
- subject.valid?.must_equal true
42
- subject.errors.size.must_equal 0
41
+ _(subject.valid?).must_equal(true)
42
+ _(subject.errors.size).must_equal(0)
43
43
  end
44
44
 
45
45
  it "accepts complete emails" do
46
46
  subject = build_email_record :email => 'Mikel Lindsaar (My email address) <mikel@test.lindsaar.net>'
47
- subject.valid?.must_equal true
48
- subject.errors.size.must_equal 0
47
+ _(subject.valid?).must_equal(true)
48
+ _(subject.errors.size).must_equal(0)
49
49
  end
50
50
 
51
51
  it "rejects email addresses without TLD" do
52
52
  subject = build_email_record :email => 'franck@verrotfr'
53
- subject.valid?.must_equal false
54
- subject.errors.size.must_equal 1
53
+ _(subject.valid?).must_equal(false)
54
+ _(subject.errors.size).must_equal(1)
55
55
  end
56
56
  end
57
57
 
58
58
  describe "with: #<Proc>" do
59
59
  it "rejects any false result" do
60
60
  subject = build_email_record({:email => "franck@verrot.fr"}, {:with => lambda {|e| false }})
61
- subject.valid?.must_equal false
62
- subject.errors.size.must_equal 1
61
+ _(subject.valid?).must_equal(false)
62
+ _(subject.errors.size).must_equal(1)
63
63
  end
64
64
 
65
65
  it "accepts any true result" do
66
66
  subject = build_email_record({:email => "franck@verrot.fr"}, {:with => lambda {|e| true }})
67
- subject.valid?.must_equal true
68
- subject.errors.size.must_equal 0
67
+ _(subject.valid?).must_equal(true)
68
+ _(subject.errors.size).must_equal(0)
69
69
  end
70
70
 
71
71
  it "passes in the parsed email address" do
72
72
  subject = build_email_record({:email => "franck@hotmail.com"}, {:with => lambda {|email| not email.domain == "hotmail.com" }})
73
- subject.valid?.must_equal false
74
- subject.errors.size.must_equal 1
73
+ _(subject.valid?).must_equal(false)
74
+ _(subject.errors.size).must_equal(1)
75
75
  end
76
76
 
77
77
  it "rejects a nil result" do
78
78
  subject = build_email_record({:email => "franck@verrot.fr"}, {:with => lambda {|email| email.domain =~ /\.com\Z/ }})
79
- subject.valid?.must_equal false
80
- subject.errors.size.must_equal 1
79
+ _(subject.valid?).must_equal(false)
80
+ _(subject.errors.size).must_equal(1)
81
81
  end
82
82
 
83
83
  it "accepts a numerical result" do
84
84
  subject = build_email_record({:email => "franck@verrot.fr"}, {:with => lambda {|email| email.domain =~ /\.fr\Z/ }})
85
- subject.valid?.must_equal true
86
- subject.errors.size.must_equal 0
85
+ _(subject.valid?).must_equal(true)
86
+ _(subject.errors.size).must_equal(0)
87
87
  end
88
88
  end
89
89
 
90
90
  describe "for invalid emails" do
91
91
  it "rejects invalid emails" do
92
92
  subject = build_email_record :email => 'franck.fr'
93
- subject.valid?.must_equal false
94
- subject.errors.size.must_equal 1
93
+ _(subject.valid?).must_equal(false)
94
+ _(subject.errors.size).must_equal(1)
95
95
  end
96
96
 
97
97
  it 'rejects local emails' do
98
98
  subject = build_email_record :email => 'franck.fr'
99
99
  subject.email = 'franck'
100
- subject.valid?.must_equal false
101
- subject.errors.size.must_equal 1
100
+ _(subject.valid?).must_equal(false)
101
+ _(subject.errors.size).must_equal(1)
102
102
  end
103
103
 
104
104
  it 'generates an error message of type invalid' do
105
105
  subject = build_email_record :email => 'franck@verrot@fr'
106
- subject.valid?.must_equal false
106
+ _(subject.valid?).must_equal(false)
107
107
 
108
108
  message = subject.errors.generate_message(:email, :invalid)
109
- subject.errors[:email].include?(message).must_equal true
109
+ _(subject.errors[:email].include?(message)).must_equal(true)
110
110
  end
111
111
  end
112
112