reform 2.1.0 → 2.2.0.rc1
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.
- checksums.yaml +4 -4
- data/.gitignore +0 -1
- data/.travis.yml +4 -12
- data/CHANGES.md +8 -0
- data/README.md +36 -743
- data/Rakefile +1 -31
- data/gemfiles/{Gemfile.rails-3.1 → Gemfile.disposable-0.3} +1 -2
- data/lib/reform.rb +0 -9
- data/lib/reform/contract.rb +5 -1
- data/lib/reform/form.rb +1 -4
- data/lib/reform/form/composition.rb +1 -2
- data/lib/reform/form/dry.rb +29 -16
- data/lib/reform/form/module.rb +15 -3
- data/lib/reform/form/validate.rb +1 -1
- data/lib/reform/validation.rb +3 -3
- data/lib/reform/version.rb +1 -1
- data/reform.gemspec +3 -10
- data/test/coercion_test.rb +7 -7
- data/test/composition_test.rb +5 -1
- data/test/contract_test.rb +10 -4
- data/test/deserialize_test.rb +3 -3
- data/test/errors_test.rb +48 -28
- data/test/form_option_test.rb +3 -1
- data/test/form_test.rb +19 -14
- data/test/module_test.rb +51 -11
- data/test/populate_test.rb +21 -7
- data/test/reform_test.rb +24 -20
- data/test/save_test.rb +10 -4
- data/test/skip_if_test.rb +5 -3
- data/test/test_helper.rb +3 -43
- data/test/validate_test.rb +34 -14
- data/test/validation/dry_test.rb +60 -0
- data/test/validation/dry_validation_test.rb +65 -43
- data/test/validation/errors.yml +4 -0
- metadata +16 -192
- data/database.sqlite3 +0 -0
- data/gemfiles/Gemfile.rails-3.2 +0 -7
- data/gemfiles/Gemfile.rails-4.0 +0 -8
- data/gemfiles/Gemfile.rails-4.1 +0 -8
- data/gemfiles/Gemfile.rails-4.2 +0 -8
- data/lib/reform/active_record.rb +0 -4
- data/lib/reform/form/active_model.rb +0 -87
- data/lib/reform/form/active_model/form_builder_methods.rb +0 -48
- data/lib/reform/form/active_model/model_reflections.rb +0 -46
- data/lib/reform/form/active_model/model_validations.rb +0 -110
- data/lib/reform/form/active_model/validations.rb +0 -107
- data/lib/reform/form/active_record.rb +0 -30
- data/lib/reform/form/lotus.rb +0 -59
- data/lib/reform/form/multi_parameter_attributes.rb +0 -48
- data/lib/reform/form/validation/unique_validator.rb +0 -54
- data/lib/reform/rails.rb +0 -13
- data/test/active_model_custom_validation_translations_test.rb +0 -75
- data/test/active_model_test.rb +0 -207
- data/test/active_model_validation_for_property_named_format_test.rb +0 -18
- data/test/active_record_test.rb +0 -273
- data/test/builder_test.rb +0 -32
- data/test/custom_validation_test.rb +0 -47
- data/test/dummy/Rakefile +0 -7
- data/test/dummy/app/controllers/albums_controller.rb +0 -18
- data/test/dummy/app/controllers/application_controller.rb +0 -4
- data/test/dummy/app/controllers/musician_controller.rb +0 -5
- data/test/dummy/app/forms/album_form.rb +0 -18
- data/test/dummy/app/helpers/application_helper.rb +0 -2
- data/test/dummy/app/models/album.rb +0 -4
- data/test/dummy/app/models/song.rb +0 -3
- data/test/dummy/app/views/albums/new.html.erb +0 -28
- data/test/dummy/app/views/layouts/application.html.erb +0 -14
- data/test/dummy/config.ru +0 -4
- data/test/dummy/config/application.rb +0 -20
- data/test/dummy/config/boot.rb +0 -10
- data/test/dummy/config/database.yml +0 -22
- data/test/dummy/config/environment.rb +0 -5
- data/test/dummy/config/environments/development.rb +0 -16
- data/test/dummy/config/environments/production.rb +0 -46
- data/test/dummy/config/environments/test.rb +0 -33
- data/test/dummy/config/locales/en.yml +0 -14
- data/test/dummy/config/routes.rb +0 -4
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/form_builder_test.rb +0 -138
- data/test/lotus/Gemfile +0 -5
- data/test/lotus/lotus_test.rb +0 -31
- data/test/lotus_test.rb +0 -150
- data/test/model_reflections_test.rb +0 -138
- data/test/model_validations_test.rb +0 -82
- data/test/mongoid_test.rb +0 -313
- data/test/multi_parameter_attributes_test.rb +0 -50
- data/test/rails/integration_test.rb +0 -54
- data/test/unique_test.rb +0 -135
- data/test/validation/activemodel_validation_test.rb +0 -252
@@ -1,50 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class ReformTest < ReformSpec
|
4
|
-
describe "Date" do
|
5
|
-
Person = Struct.new(:date_of_birth)
|
6
|
-
let (:form) { DateOfBirthForm.new(Person.new) }
|
7
|
-
|
8
|
-
class DateOfBirthForm < Reform::Form
|
9
|
-
feature Reform::Form::ActiveModel::FormBuilderMethods
|
10
|
-
feature Reform::Form::MultiParameterAttributes
|
11
|
-
property :date_of_birth, type: Date, :multi_params => true
|
12
|
-
end
|
13
|
-
|
14
|
-
it "munges multi-param date fields into a valid Date attribute" do
|
15
|
-
date_of_birth_params = { "date_of_birth(1i)"=>"1950", "date_of_birth(2i)"=>"1", "date_of_birth(3i)"=>"1" }
|
16
|
-
form.validate(date_of_birth_params)
|
17
|
-
form.date_of_birth.must_equal Date.civil(1950, 1, 1)
|
18
|
-
end
|
19
|
-
|
20
|
-
it "handles invalid Time input" do
|
21
|
-
date_of_birth_params = { "date_of_birth(1i)"=>"1950", "date_of_birth(2i)"=>"99", "date_of_birth(3i)"=>"1" }
|
22
|
-
form.validate(date_of_birth_params)
|
23
|
-
form.date_of_birth.must_equal nil
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
describe "DateTime" do
|
28
|
-
Party = Struct.new(:start_time)
|
29
|
-
let (:form) { PartyForm.new(Party.new) }
|
30
|
-
|
31
|
-
class PartyForm < Reform::Form
|
32
|
-
feature Reform::Form::ActiveModel::FormBuilderMethods
|
33
|
-
feature Reform::Form::MultiParameterAttributes
|
34
|
-
property :start_time, type: DateTime, :multi_params => true
|
35
|
-
end
|
36
|
-
|
37
|
-
it "munges multi-param date and time fields into a valid Time attribute" do
|
38
|
-
start_time_params = { "start_time(1i)"=>"2000", "start_time(2i)"=>"1", "start_time(3i)"=>"1", "start_time(4i)"=>"12", "start_time(5i)"=>"00" }
|
39
|
-
time_format = "%Y-%m-%d %H:%M"
|
40
|
-
form.validate(start_time_params)
|
41
|
-
form.start_time.strftime(time_format).must_equal DateTime.strptime("2000-01-01 12:00", time_format)
|
42
|
-
end
|
43
|
-
|
44
|
-
it "handles invalid Time input" do
|
45
|
-
start_time_params = { "start_time(1i)"=>"2000", "start_time(2i)"=>"99", "start_time(3i)"=>"1", "start_time(4i)"=>"12", "start_time(5i)"=>"00" }
|
46
|
-
form.validate(start_time_params)
|
47
|
-
form.start_time.must_equal nil
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
@@ -1,54 +0,0 @@
|
|
1
|
-
require_relative "../test_helper"
|
2
|
-
|
3
|
-
require "dummy/config/environment"
|
4
|
-
require "rails/test_help" # adds stuff like @routes, etc.
|
5
|
-
|
6
|
-
# require "haml"
|
7
|
-
# require "haml/template" # Thanks, Nathan!
|
8
|
-
|
9
|
-
#ActiveRecord::Schema.define do
|
10
|
-
# create_table :artists do |table|
|
11
|
-
# table.column :name, :string
|
12
|
-
# table.timestamps
|
13
|
-
# end
|
14
|
-
|
15
|
-
# create_table :songs do |table|
|
16
|
-
# table.column :title, :string
|
17
|
-
# table.column :album_id, :integer
|
18
|
-
# end
|
19
|
-
|
20
|
-
# create_table :albums do |table|
|
21
|
-
# table.column :title, :string
|
22
|
-
# end
|
23
|
-
# end
|
24
|
-
|
25
|
-
class HasOneAndHasManyTest < ActionController::TestCase
|
26
|
-
tests AlbumsController
|
27
|
-
|
28
|
-
test "rendering 1-1 and 1-n" do
|
29
|
-
get :new
|
30
|
-
#puts @response.body
|
31
|
-
|
32
|
-
assert_select "form"
|
33
|
-
|
34
|
-
assert_select "form input" do |els|
|
35
|
-
assert_select "[name=?]", "album[title]"
|
36
|
-
assert_select "[name=?]", "album[songs_attributes][1][title]"
|
37
|
-
assert_select "[name=?]", "album[songs_attributes][0][title]"
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
test "submitting invalid form" do
|
42
|
-
params = {
|
43
|
-
"album"=>{"title"=>"Rio",
|
44
|
-
"songs_attributes"=>{
|
45
|
-
"0"=>{"name"=>""},
|
46
|
-
"1"=>{"name"=>""}
|
47
|
-
}}, "commit"=>"Create Album"}
|
48
|
-
|
49
|
-
post :create, params
|
50
|
-
|
51
|
-
assert_select "form"
|
52
|
-
assert_select "li", "Songs title can't be blank"
|
53
|
-
end
|
54
|
-
end
|
data/test/unique_test.rb
DELETED
@@ -1,135 +0,0 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
|
3
|
-
require "reform/form/validation/unique_validator.rb"
|
4
|
-
require "reform/form/active_record"
|
5
|
-
|
6
|
-
class UniquenessValidatorOnCreateTest < MiniTest::Spec
|
7
|
-
class SongForm < Reform::Form
|
8
|
-
include ActiveRecord
|
9
|
-
property :title
|
10
|
-
validates :title, unique: true
|
11
|
-
end
|
12
|
-
|
13
|
-
it do
|
14
|
-
Song.delete_all
|
15
|
-
|
16
|
-
form = SongForm.new(Song.new)
|
17
|
-
form.validate("title" => "How Many Tears").must_equal true
|
18
|
-
form.save
|
19
|
-
|
20
|
-
form = SongForm.new(Song.new)
|
21
|
-
form.validate("title" => "How Many Tears").must_equal false
|
22
|
-
form.errors.to_s.must_equal "{:title=>[\"has already been taken\"]}"
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
|
27
|
-
class UniquenessValidatorOnUpdateTest < MiniTest::Spec
|
28
|
-
class SongForm < Reform::Form
|
29
|
-
include ActiveRecord
|
30
|
-
property :title
|
31
|
-
validates :title, unique: true
|
32
|
-
end
|
33
|
-
|
34
|
-
it do
|
35
|
-
Song.delete_all
|
36
|
-
@song = Song.create(title: "How Many Tears")
|
37
|
-
|
38
|
-
form = SongForm.new(@song)
|
39
|
-
form.validate("title" => "How Many Tears").must_equal true
|
40
|
-
form.save
|
41
|
-
|
42
|
-
form = SongForm.new(@song)
|
43
|
-
form.validate("title" => "How Many Tears").must_equal true
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
|
48
|
-
class UniqueWithCompositionTest < MiniTest::Spec
|
49
|
-
class SongForm < Reform::Form
|
50
|
-
include ActiveRecord
|
51
|
-
include Composition
|
52
|
-
|
53
|
-
property :title, on: :song
|
54
|
-
validates :title, unique: true
|
55
|
-
end
|
56
|
-
|
57
|
-
it do
|
58
|
-
Song.delete_all
|
59
|
-
|
60
|
-
form = SongForm.new(song: Song.new)
|
61
|
-
form.validate("title" => "How Many Tears").must_equal true
|
62
|
-
form.save
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
|
67
|
-
class UniqueValidatorWithScopeTest < MiniTest::Spec
|
68
|
-
class SongForm < Reform::Form
|
69
|
-
include ActiveRecord
|
70
|
-
property :album_id
|
71
|
-
property :title
|
72
|
-
validates :title, unique: { scope: :album_id }
|
73
|
-
end
|
74
|
-
|
75
|
-
it do
|
76
|
-
Song.delete_all
|
77
|
-
|
78
|
-
album = Album.new
|
79
|
-
album.save
|
80
|
-
|
81
|
-
form = SongForm.new(Song.new)
|
82
|
-
form.validate(album_id: album.id, title: 'How Many Tears').must_equal true
|
83
|
-
form.save
|
84
|
-
|
85
|
-
form = SongForm.new(Song.new)
|
86
|
-
form.validate(album_id: album.id, title: 'How Many Tears').must_equal false
|
87
|
-
form.errors.to_s.must_equal "{:title=>[\"has already been taken\"]}"
|
88
|
-
|
89
|
-
album = Album.new
|
90
|
-
album.save
|
91
|
-
|
92
|
-
form = SongForm.new(Song.new)
|
93
|
-
form.validate(album_id: album.id, title: 'How Many Tears').must_equal true
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
class UniqueValidatorWithScopeArrayTest < MiniTest::Spec
|
98
|
-
class SongForm < Reform::Form
|
99
|
-
include ActiveRecord
|
100
|
-
property :album_id
|
101
|
-
property :artist_id
|
102
|
-
property :title
|
103
|
-
validates :title, unique: { scope: [:album_id, :artist_id] }
|
104
|
-
end
|
105
|
-
|
106
|
-
it do
|
107
|
-
Song.delete_all
|
108
|
-
|
109
|
-
album1 = Album.new
|
110
|
-
album1.save
|
111
|
-
|
112
|
-
artist1 = Artist.new
|
113
|
-
artist1.save
|
114
|
-
|
115
|
-
form = SongForm.new(Song.new)
|
116
|
-
form.validate(album_id: album1.id, artist_id: artist1.id, title: 'How Many Tears').must_equal true
|
117
|
-
form.save
|
118
|
-
|
119
|
-
form = SongForm.new(Song.new)
|
120
|
-
form.validate(album_id: album1.id, artist_id: artist1.id, title: 'How Many Tears').must_equal false
|
121
|
-
form.errors.to_s.must_equal "{:title=>[\"has already been taken\"]}"
|
122
|
-
|
123
|
-
album2 = Album.new
|
124
|
-
album2.save
|
125
|
-
|
126
|
-
form = SongForm.new(Song.new)
|
127
|
-
form.validate(album_id: album2.id, artist_id: artist1.id, title: 'How Many Tears').must_equal true
|
128
|
-
|
129
|
-
artist2 = Artist.new
|
130
|
-
artist2.save
|
131
|
-
|
132
|
-
form = SongForm.new(Song.new)
|
133
|
-
form.validate(album_id: album1.id, artist_id: artist2.id, title: 'How Many Tears').must_equal true
|
134
|
-
end
|
135
|
-
end
|
@@ -1,252 +0,0 @@
|
|
1
|
-
require "test_helper"
|
2
|
-
require "reform/form/lotus"
|
3
|
-
|
4
|
-
class ActiveModelValidationTest < MiniTest::Spec
|
5
|
-
Session = Struct.new(:username, :email, :password, :confirm_password)
|
6
|
-
Album = Struct.new(:name, :songs, :artist)
|
7
|
-
Artist = Struct.new(:name)
|
8
|
-
|
9
|
-
class SessionForm < Reform::Form
|
10
|
-
include Reform::Form::ActiveModel::Validations
|
11
|
-
|
12
|
-
|
13
|
-
property :username
|
14
|
-
property :email
|
15
|
-
property :password
|
16
|
-
property :confirm_password
|
17
|
-
|
18
|
-
validation :default do
|
19
|
-
validates :username, presence: true
|
20
|
-
validates :email, presence: true
|
21
|
-
end
|
22
|
-
|
23
|
-
validation :email, if: :default do
|
24
|
-
# validate :email_ok? # FIXME: implement that.
|
25
|
-
validates :email, length: {is: 3}
|
26
|
-
end
|
27
|
-
|
28
|
-
validation :nested, if: :default do
|
29
|
-
validates :password, presence: true, length: {is: 1}
|
30
|
-
end
|
31
|
-
|
32
|
-
validation :confirm, if: :default, after: :email do
|
33
|
-
validates :confirm_password, length: {is: 2}
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
let (:form) { SessionForm.new(Session.new) }
|
38
|
-
|
39
|
-
# valid.
|
40
|
-
it do
|
41
|
-
form.validate({username: "Helloween", email: "yep", password: "9", confirm_password:"dd"}).must_equal true
|
42
|
-
form.errors.messages.inspect.must_equal "{}"
|
43
|
-
end
|
44
|
-
|
45
|
-
# invalid.
|
46
|
-
it do
|
47
|
-
form.validate({}).must_equal false
|
48
|
-
form.errors.messages.inspect.must_equal "{:username=>[\"can't be blank\"], :email=>[\"can't be blank\"]}"
|
49
|
-
end
|
50
|
-
|
51
|
-
# partially invalid.
|
52
|
-
# 2nd group fails.
|
53
|
-
let (:character) { self.class.rails4_2? ? :character : :characters}
|
54
|
-
it do
|
55
|
-
form.validate(username: "Helloween", email: "yo").must_equal false
|
56
|
-
form.errors.messages.inspect.must_equal "{:email=>[\"is the wrong length (should be 3 characters)\"], :confirm_password=>[\"is the wrong length (should be 2 characters)\"], :password=>[\"can't be blank\", \"is the wrong length (should be 1 #{character})\"]}"
|
57
|
-
end
|
58
|
-
# 3rd group fails.
|
59
|
-
it do
|
60
|
-
form.validate(username: "Helloween", email: "yo!").must_equal false
|
61
|
-
form.errors.messages.inspect.must_equal"{:confirm_password=>[\"is the wrong length (should be 2 characters)\"], :password=>[\"can't be blank\", \"is the wrong length (should be 1 #{character})\"]}"
|
62
|
-
end
|
63
|
-
# 4th group with after: fails.
|
64
|
-
it do
|
65
|
-
form.validate(username: "Helloween", email: "yo!", password: "1", confirm_password: "9").must_equal false
|
66
|
-
form.errors.messages.inspect.must_equal "{:confirm_password=>[\"is the wrong length (should be 2 characters)\"]}"
|
67
|
-
end
|
68
|
-
|
69
|
-
|
70
|
-
describe "implicit :default group" do
|
71
|
-
# implicit :default group.
|
72
|
-
class LoginForm < Reform::Form
|
73
|
-
include Reform::Form::ActiveModel::Validations
|
74
|
-
|
75
|
-
|
76
|
-
property :username
|
77
|
-
property :email
|
78
|
-
property :password
|
79
|
-
property :confirm_password
|
80
|
-
|
81
|
-
validates :username, presence: true
|
82
|
-
validates :email, presence: true
|
83
|
-
validates :password, presence: true
|
84
|
-
|
85
|
-
validation :after_default, if: :default do
|
86
|
-
validates :confirm_password, presence: true
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
let (:form) { LoginForm.new(Session.new) }
|
91
|
-
|
92
|
-
# valid.
|
93
|
-
it do
|
94
|
-
form.validate({username: "Helloween", email: "yep", password: "9", confirm_password: 9}).must_equal true
|
95
|
-
form.errors.messages.inspect.must_equal "{}"
|
96
|
-
end
|
97
|
-
|
98
|
-
# invalid.
|
99
|
-
it do
|
100
|
-
form.validate({password: 9}).must_equal false
|
101
|
-
form.errors.messages.inspect.must_equal "{:username=>[\"can't be blank\"], :email=>[\"can't be blank\"]}"
|
102
|
-
end
|
103
|
-
|
104
|
-
# partially invalid.
|
105
|
-
# 2nd group fails.
|
106
|
-
it do
|
107
|
-
form.validate(password: 9).must_equal false
|
108
|
-
form.errors.messages.inspect.must_equal "{:username=>[\"can't be blank\"], :email=>[\"can't be blank\"]}"
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
|
113
|
-
# describe "overwriting a group" do
|
114
|
-
# class OverwritingForm < Reform::Form
|
115
|
-
# include Reform::Form::ActiveModel::Validations
|
116
|
-
|
117
|
-
# property :username
|
118
|
-
# property :email
|
119
|
-
|
120
|
-
# validation :email do
|
121
|
-
# validates :email, presence: true # is not considered, but overwritten.
|
122
|
-
# end
|
123
|
-
|
124
|
-
# validation :email do # overwrites the above.
|
125
|
-
# validates :username, presence: true
|
126
|
-
# end
|
127
|
-
# end
|
128
|
-
|
129
|
-
# let (:form) { OverwritingForm.new(Session.new) }
|
130
|
-
|
131
|
-
# # valid.
|
132
|
-
# it do
|
133
|
-
# form.validate({username: "Helloween"}).must_equal true
|
134
|
-
# end
|
135
|
-
|
136
|
-
# # invalid.
|
137
|
-
# it do
|
138
|
-
# form.validate({}).must_equal false
|
139
|
-
# form.errors.messages.inspect.must_equal "{:username=>[\"username can't be blank\"]}"
|
140
|
-
# end
|
141
|
-
# end
|
142
|
-
|
143
|
-
|
144
|
-
describe "inherit: true in same group" do
|
145
|
-
class InheritSameGroupForm < Reform::Form
|
146
|
-
include Reform::Form::ActiveModel::Validations
|
147
|
-
|
148
|
-
property :username
|
149
|
-
property :email
|
150
|
-
|
151
|
-
validation :email do
|
152
|
-
validates :email, presence: true
|
153
|
-
end
|
154
|
-
|
155
|
-
validation :email, inherit: true do # extends the above.
|
156
|
-
validates :username, presence: true
|
157
|
-
end
|
158
|
-
end
|
159
|
-
|
160
|
-
let (:form) { InheritSameGroupForm.new(Session.new) }
|
161
|
-
|
162
|
-
# valid.
|
163
|
-
it do
|
164
|
-
form.validate({username: "Helloween", email: 9}).must_equal true
|
165
|
-
end
|
166
|
-
|
167
|
-
# invalid.
|
168
|
-
it do
|
169
|
-
form.validate({}).must_equal false
|
170
|
-
form.errors.messages.inspect.must_equal "{:email=>[\"can't be blank\"], :username=>[\"can't be blank\"]}"
|
171
|
-
end
|
172
|
-
end
|
173
|
-
|
174
|
-
|
175
|
-
describe "if: with lambda" do
|
176
|
-
class IfWithLambdaForm < Reform::Form
|
177
|
-
include Reform::Form::ActiveModel::Validations
|
178
|
-
|
179
|
-
property :username
|
180
|
-
property :email
|
181
|
-
property :password
|
182
|
-
|
183
|
-
validation :email do
|
184
|
-
validates :email, presence: true
|
185
|
-
end
|
186
|
-
|
187
|
-
# run this is :email group is true.
|
188
|
-
validation :after_email, if: lambda { |results| results[:email]==true } do # extends the above.
|
189
|
-
validates :username, presence: true
|
190
|
-
end
|
191
|
-
|
192
|
-
# block gets evaled in form instance context.
|
193
|
-
validation :password, if: lambda { |results| email == "john@trb.org" } do
|
194
|
-
validates :password, presence: true
|
195
|
-
end
|
196
|
-
end
|
197
|
-
|
198
|
-
let (:form) { IfWithLambdaForm.new(Session.new) }
|
199
|
-
|
200
|
-
# valid.
|
201
|
-
it do
|
202
|
-
form.validate({username: "Strung Out", email: 9}).must_equal true
|
203
|
-
end
|
204
|
-
|
205
|
-
# invalid.
|
206
|
-
it do
|
207
|
-
form.validate({email: 9}).must_equal false
|
208
|
-
form.errors.messages.inspect.must_equal "{:username=>[\"can't be blank\"]}"
|
209
|
-
end
|
210
|
-
end
|
211
|
-
|
212
|
-
|
213
|
-
# TODO: describe "multiple errors for property" do
|
214
|
-
|
215
|
-
describe "::validate" do
|
216
|
-
class ValidateForm < Reform::Form
|
217
|
-
include Reform::Form::ActiveModel::Validations
|
218
|
-
|
219
|
-
property :username
|
220
|
-
validates :username, presence: true
|
221
|
-
validate :username_ok?#, context: :entity
|
222
|
-
|
223
|
-
def username_ok?#(value)
|
224
|
-
errors.add(:username, "not ok") if username == "yo"
|
225
|
-
end
|
226
|
-
end
|
227
|
-
|
228
|
-
let (:form) { ValidateForm.new(Session.new) }
|
229
|
-
|
230
|
-
# invalid.
|
231
|
-
it do
|
232
|
-
form.validate({username: "yo"}).must_equal false
|
233
|
-
form.errors.messages.inspect.must_equal "{:username=>[\"not ok\"]}"
|
234
|
-
end
|
235
|
-
|
236
|
-
# valid.
|
237
|
-
it do
|
238
|
-
form.validate({username: "not yo"}).must_equal true
|
239
|
-
form.errors.empty?.must_equal true
|
240
|
-
end
|
241
|
-
end
|
242
|
-
|
243
|
-
|
244
|
-
describe "validates: :acceptance" do
|
245
|
-
class AcceptanceForm < Reform::Form
|
246
|
-
property :accept, virtual: true, validates: { acceptance: true }
|
247
|
-
end
|
248
|
-
|
249
|
-
it { AcceptanceForm.new(nil).validate(accept: "0").must_equal false }
|
250
|
-
it { AcceptanceForm.new(nil).validate(accept: "1").must_equal true }
|
251
|
-
end
|
252
|
-
end
|