freeform 1.0.2 → 1.0.3
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 +8 -8
- data/.gitignore +6 -0
- data/.travis.yml +8 -0
- data/Gemfile.lock +1 -1
- data/lib/freeform/form/validation.rb +14 -11
- data/lib/freeform/version.rb +1 -1
- data/spec/acceptance_spec.rb +60 -22
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/test.log +1474 -0
- metadata +3 -70
- data/spec/dummy/tmp/cache/assets/C54/850/sprockets%2Fd484f47085686f151320ff7248bb5105 +0 -0
- data/spec/dummy/tmp/cache/assets/C76/160/sprockets%2F49c594d143212b346d11f1ecf9358103 +0 -0
- data/spec/dummy/tmp/cache/assets/C99/4D0/sprockets%2F5e30a6b911437f1428dc32c3ae182123 +0 -0
- data/spec/dummy/tmp/cache/assets/C99/7D0/sprockets%2F79513e6956e0ee8624976e041fd5636d +0 -0
- data/spec/dummy/tmp/cache/assets/CAA/C90/sprockets%2F1e6c8ee1258009385ccf5b84015424b3 +0 -0
- data/spec/dummy/tmp/cache/assets/CB2/CB0/sprockets%2F11cc8d161d71a716dd36f16849d90870 +0 -0
- data/spec/dummy/tmp/cache/assets/CB7/7F0/sprockets%2Fac97b043470f6fcc925c352f16956643 +0 -0
- data/spec/dummy/tmp/cache/assets/CBA/680/sprockets%2F912d84e091e5f2190b1ab7926de19679 +0 -0
- data/spec/dummy/tmp/cache/assets/CC7/430/sprockets%2F48e99a3e16ba3e65749e009d82546f94 +0 -0
- data/spec/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
- data/spec/dummy/tmp/cache/assets/CDB/8A0/sprockets%2Faed2a2575c376263c26e93b56b57051d +0 -0
- data/spec/dummy/tmp/cache/assets/CF1/E80/sprockets%2F7735295e1e3085f2e1dc29d59a45e8e6 +0 -0
- data/spec/dummy/tmp/cache/assets/D0F/E60/sprockets%2F1123d9a479fdf5c2b8415087e2a43ec6 +0 -0
- data/spec/dummy/tmp/cache/assets/D1F/A10/sprockets%2F60317e62cb324bfd9987e8da9636fd06 +0 -0
- data/spec/dummy/tmp/cache/assets/D25/E20/sprockets%2F29ba1a4a2b611731334f54abb9e5b5d1 +0 -0
- data/spec/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/spec/dummy/tmp/cache/assets/D35/760/sprockets%2F49e26620c5c743ac4cdab7703f54db06 +0 -0
- data/spec/dummy/tmp/cache/assets/D49/870/sprockets%2F90896142645585acc8baf56ad57e3afb +0 -0
- data/spec/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/spec/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/spec/dummy/tmp/cache/assets/D62/F00/sprockets%2F6ac03a007f26b1c18ed3d53498ad3eb8 +0 -0
- data/spec/dummy/tmp/cache/assets/D79/BC0/sprockets%2F85a1db977361cc5130fcefb4637ff67e +0 -0
- data/spec/dummy/tmp/cache/assets/D87/1F0/sprockets%2F61c9ceafb877fb740c67416ff6f782a9 +0 -0
- data/spec/dummy/tmp/cache/assets/DA8/900/sprockets%2Fde7a2b3987b89b9d9afb268ce4204a4a +0 -0
- data/spec/dummy/tmp/cache/assets/DAD/4F0/sprockets%2F765acd1bf68dc90f7d3e61da78b1e659 +0 -0
- data/spec/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/spec/dummy/tmp/cache/assets/E03/3F0/sprockets%2F82b37ae9eccec44c1ef44cfdd07d8534 +0 -0
- data/spec/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/spec/dummy/tmp/cache/assets/E0A/CA0/sprockets%2F7fe72ac1c0db1a7e8e7f59cf25e8a39e +0 -0
- data/spec/dummy/tmp/cache/assets/E20/9B0/sprockets%2F2fa6cd86b1af7bda41f5b7921cdadf10 +0 -0
- data/spec/dummy/tmp/cache/assets/E3A/A60/sprockets%2F7c72c96cfc66454caf5fc8ca0fedd4f3 +0 -0
- data/spec/dummy/tmp/cache/assets/E54/400/sprockets%2Fd0cbc16cc37efcf9dc41f242b5dbbf81 +0 -0
- data/spec/dummy/tmp/cache/assets/EB7/AB0/sprockets%2F801d29a5debdbfbfb4eef14d70d9bcdb +0 -0
- data/spec/dummy/tmp/cache/assets/F48/5E0/sprockets%2F26cd6ffcffbebbe2fd6cd1a8f0c2debc +0 -0
checksums.yaml
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
---
|
|
2
2
|
!binary "U0hBMQ==":
|
|
3
3
|
metadata.gz: !binary |-
|
|
4
|
-
|
|
4
|
+
ODAyM2M4Y2YyNjA5NGY3NTQ3MzhiY2RlZGEwODc4NDllZjNkYWY3ZQ==
|
|
5
5
|
data.tar.gz: !binary |-
|
|
6
|
-
|
|
6
|
+
MGYyOTkyNTNmMjBiZmM1OTg0MzRiODNkMWY4OWQwOTIxZjA2Y2Y4Zg==
|
|
7
7
|
SHA512:
|
|
8
8
|
metadata.gz: !binary |-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
NTBmNzczODc3YTI3MTczNzFmYTQ1MTAwZDE0YmViMTkyZTdjNmQ2NTIyZGU2
|
|
10
|
+
NjU1NzFjYTcxZWRmNDM4MTg3YjJkMTY5MjgzMzdkMzdhYjc2Y2EzMWE5YzVh
|
|
11
|
+
YzUxY2NmYmUwZGVlYmE3MmE5OTFjYzhhZjE0MWI5NzBiNmRiN2I=
|
|
12
12
|
data.tar.gz: !binary |-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
Mzk5YzNkMzJhMjdhNDA1ZWJkMjJlZWQ3OTc3ZjU1NmRiY2Q1ODA2YzVlNzk1
|
|
14
|
+
ZjIyZjJlZDhlNzZjZDU0MjI0NDFiYTIzZGU1OGM4Mzg3ZjYyODcyNDVkYjI5
|
|
15
|
+
ZmE4ZGRhNTQ1YTM3MjQyNDM0YjgwOWRhZDkxMTVmMDU1ZTk0ZjA=
|
data/.gitignore
CHANGED
data/.travis.yml
ADDED
data/Gemfile.lock
CHANGED
|
@@ -4,16 +4,16 @@ module FreeForm
|
|
|
4
4
|
base.extend(ClassMethods)
|
|
5
5
|
extend FreeForm::Property
|
|
6
6
|
end
|
|
7
|
-
|
|
7
|
+
|
|
8
8
|
module ClassMethods
|
|
9
9
|
def validate_models
|
|
10
10
|
validate :model_validity
|
|
11
11
|
end
|
|
12
12
|
end
|
|
13
|
-
|
|
13
|
+
|
|
14
14
|
protected
|
|
15
15
|
def model_validity
|
|
16
|
-
self.class.models.each do |form_model|
|
|
16
|
+
self.class.models.each do |form_model|
|
|
17
17
|
if send(form_model).is_a?(Array)
|
|
18
18
|
# If it's an array, we're dealing with nested forms
|
|
19
19
|
errors.add(:base, "has invalid nested forms") unless validate_nested_forms(send(form_model))
|
|
@@ -23,32 +23,35 @@ module FreeForm
|
|
|
23
23
|
end
|
|
24
24
|
end
|
|
25
25
|
end
|
|
26
|
-
|
|
26
|
+
|
|
27
27
|
private
|
|
28
28
|
def validate_nested_forms(form_array)
|
|
29
29
|
form_validity = true
|
|
30
|
-
form_array.each do |model|
|
|
31
|
-
|
|
30
|
+
form_array.each do |model|
|
|
31
|
+
destroyed = model.respond_to?(:marked_for_destruction?) ? model.marked_for_destruction? : false
|
|
32
|
+
unless model.valid? || destroyed
|
|
33
|
+
form_validity = false
|
|
34
|
+
end
|
|
32
35
|
end
|
|
33
36
|
form_validity
|
|
34
37
|
end
|
|
35
|
-
|
|
38
|
+
|
|
36
39
|
def validate_form_model(form_model)
|
|
37
40
|
model = send(form_model)
|
|
38
41
|
append_errors(form_model)
|
|
39
42
|
return model.valid?
|
|
40
43
|
end
|
|
41
|
-
|
|
44
|
+
|
|
42
45
|
def append_errors(form_model)
|
|
43
46
|
model = send(form_model)
|
|
44
47
|
model.valid?
|
|
45
|
-
model.errors.each do |error, message|
|
|
48
|
+
model.errors.each do |error, message|
|
|
46
49
|
if find_form_field_from_model_field(form_model, error)
|
|
47
50
|
self.errors.add(find_form_field_from_model_field(form_model, error), message)
|
|
48
51
|
end
|
|
49
52
|
end
|
|
50
53
|
end
|
|
51
|
-
|
|
54
|
+
|
|
52
55
|
def find_form_field_from_model_field(model, field)
|
|
53
56
|
self.class.property_mappings.each_pair do |property, attributes|
|
|
54
57
|
if (attributes[:model] == model.to_sym) && (attributes[:field] == field.to_sym)
|
|
@@ -58,4 +61,4 @@ module FreeForm
|
|
|
58
61
|
return false
|
|
59
62
|
end
|
|
60
63
|
end
|
|
61
|
-
end
|
|
64
|
+
end
|
data/lib/freeform/version.rb
CHANGED
data/spec/acceptance_spec.rb
CHANGED
|
@@ -7,7 +7,7 @@ describe FreeForm::Form do
|
|
|
7
7
|
form_model :task
|
|
8
8
|
validate_models
|
|
9
9
|
allow_destroy_on_save
|
|
10
|
-
|
|
10
|
+
|
|
11
11
|
property :name, :on => :task
|
|
12
12
|
property :start_date, :on => :task
|
|
13
13
|
property :end_date, :on => :task
|
|
@@ -23,18 +23,18 @@ describe FreeForm::Form do
|
|
|
23
23
|
klass = Class.new(FreeForm::Form) do
|
|
24
24
|
form_input_key :company
|
|
25
25
|
form_models :company
|
|
26
|
-
child_model :project do
|
|
26
|
+
child_model :project do
|
|
27
27
|
company.project.present? ? company.project : company.build_project
|
|
28
28
|
end
|
|
29
29
|
validate_models
|
|
30
30
|
allow_destroy_on_save
|
|
31
|
-
|
|
31
|
+
|
|
32
32
|
property :name, :on => :company, :as => :company_name
|
|
33
33
|
property :name, :on => :project, :as => :project_name
|
|
34
34
|
property :due_date, :on => :project
|
|
35
35
|
|
|
36
36
|
has_many :tasks, :class => Module::TaskForm, :default_initializer => :default_task_initializer
|
|
37
|
-
|
|
37
|
+
|
|
38
38
|
def default_task_initializer
|
|
39
39
|
{ :task => Task.new(:project => project) }
|
|
40
40
|
end
|
|
@@ -51,7 +51,7 @@ describe FreeForm::Form do
|
|
|
51
51
|
f.build_task
|
|
52
52
|
f
|
|
53
53
|
end
|
|
54
|
-
|
|
54
|
+
|
|
55
55
|
describe "form initialization", :initialization => true do
|
|
56
56
|
it "initializes with Company model" do
|
|
57
57
|
form.company.should be_a(Company)
|
|
@@ -65,7 +65,7 @@ describe FreeForm::Form do
|
|
|
65
65
|
form.tasks.first.task.should be_a(Task)
|
|
66
66
|
end
|
|
67
67
|
|
|
68
|
-
it "initializes with Task with project parent"
|
|
68
|
+
it "initializes with Task with project parent" do
|
|
69
69
|
task = form.tasks.first.task
|
|
70
70
|
task.project.should eq(form.project)
|
|
71
71
|
end
|
|
@@ -109,11 +109,11 @@ describe FreeForm::Form do
|
|
|
109
109
|
}
|
|
110
110
|
} }
|
|
111
111
|
end
|
|
112
|
-
|
|
112
|
+
|
|
113
113
|
before(:each) do
|
|
114
114
|
form.fill(attributes)
|
|
115
115
|
end
|
|
116
|
-
|
|
116
|
+
|
|
117
117
|
it "assigns company name" do
|
|
118
118
|
form.company_name.should eq("dummycorp")
|
|
119
119
|
form.company.name.should eq("dummycorp")
|
|
@@ -173,12 +173,12 @@ describe FreeForm::Form do
|
|
|
173
173
|
}
|
|
174
174
|
} }
|
|
175
175
|
end
|
|
176
|
-
|
|
176
|
+
|
|
177
177
|
before(:each) do
|
|
178
178
|
form.fill(attributes)
|
|
179
179
|
form.valid?
|
|
180
180
|
end
|
|
181
|
-
|
|
181
|
+
|
|
182
182
|
it "should be invalid" do
|
|
183
183
|
form.should_not be_valid
|
|
184
184
|
end
|
|
@@ -214,12 +214,12 @@ describe FreeForm::Form do
|
|
|
214
214
|
}
|
|
215
215
|
} }
|
|
216
216
|
end
|
|
217
|
-
|
|
217
|
+
|
|
218
218
|
before(:each) do
|
|
219
219
|
form.fill(attributes)
|
|
220
220
|
form.valid?
|
|
221
221
|
end
|
|
222
|
-
|
|
222
|
+
|
|
223
223
|
it "should be invalid" do
|
|
224
224
|
form.should_not be_valid
|
|
225
225
|
end
|
|
@@ -229,6 +229,44 @@ describe FreeForm::Form do
|
|
|
229
229
|
end
|
|
230
230
|
end
|
|
231
231
|
|
|
232
|
+
context "with invalid, marked for destruction nested model", :failing => true do
|
|
233
|
+
let(:attributes) do {
|
|
234
|
+
:company_name => "dummycorp",
|
|
235
|
+
:project_name => "rails app",
|
|
236
|
+
"due_date(1i)" => "2014",
|
|
237
|
+
"due_date(2i)" => "10",
|
|
238
|
+
"due_date(3i)" => "30",
|
|
239
|
+
:tasks_attributes => {
|
|
240
|
+
"0" => {
|
|
241
|
+
:name => "task_1",
|
|
242
|
+
"start_date(1i)" => "2012",
|
|
243
|
+
"start_date(2i)" => "1",
|
|
244
|
+
"start_date(3i)" => "2",
|
|
245
|
+
},
|
|
246
|
+
"1" => {
|
|
247
|
+
:name => "task_2",
|
|
248
|
+
"end_date(1i)" => "2011",
|
|
249
|
+
"end_date(2i)" => "12",
|
|
250
|
+
"end_date(3i)" => "15",
|
|
251
|
+
:_destroy => "1"
|
|
252
|
+
}
|
|
253
|
+
} }
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
before(:each) do
|
|
257
|
+
form.fill(attributes)
|
|
258
|
+
form.valid?
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
it "should be valid" do
|
|
262
|
+
form.should be_valid
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
it "should not have errors" do
|
|
266
|
+
form.errors.should be_empty
|
|
267
|
+
end
|
|
268
|
+
end
|
|
269
|
+
|
|
232
270
|
context "with valid attributes" do
|
|
233
271
|
let(:attributes) do {
|
|
234
272
|
:company_name => "dummycorp",
|
|
@@ -254,11 +292,11 @@ describe FreeForm::Form do
|
|
|
254
292
|
}
|
|
255
293
|
} }
|
|
256
294
|
end
|
|
257
|
-
|
|
295
|
+
|
|
258
296
|
before(:each) do
|
|
259
297
|
form.fill(attributes)
|
|
260
298
|
end
|
|
261
|
-
|
|
299
|
+
|
|
262
300
|
it "should be valid" do
|
|
263
301
|
form.should be_valid
|
|
264
302
|
end
|
|
@@ -288,11 +326,11 @@ describe FreeForm::Form do
|
|
|
288
326
|
}
|
|
289
327
|
} }
|
|
290
328
|
end
|
|
291
|
-
|
|
329
|
+
|
|
292
330
|
before(:each) do
|
|
293
331
|
form.fill(attributes)
|
|
294
332
|
end
|
|
295
|
-
|
|
333
|
+
|
|
296
334
|
it "should return false on 'save'" do
|
|
297
335
|
form.save.should be_false
|
|
298
336
|
end
|
|
@@ -327,11 +365,11 @@ describe FreeForm::Form do
|
|
|
327
365
|
}
|
|
328
366
|
} }
|
|
329
367
|
end
|
|
330
|
-
|
|
368
|
+
|
|
331
369
|
before(:each) do
|
|
332
370
|
form.fill(attributes)
|
|
333
371
|
end
|
|
334
|
-
|
|
372
|
+
|
|
335
373
|
it "should return true on 'save', and call save on other models" do
|
|
336
374
|
form.company.should_receive(:save).and_return(true)
|
|
337
375
|
form.project.should_receive(:save).and_return(true)
|
|
@@ -358,7 +396,7 @@ describe FreeForm::Form do
|
|
|
358
396
|
form.tasks.last.task.should_receive(:save).and_return(true)
|
|
359
397
|
form.save
|
|
360
398
|
end
|
|
361
|
-
|
|
399
|
+
|
|
362
400
|
it "destroys models on save if set through attribute" do
|
|
363
401
|
form.fill({:_destroy => "1"})
|
|
364
402
|
form.company.should_receive(:destroy).and_return(true)
|
|
@@ -377,7 +415,7 @@ describe FreeForm::Form do
|
|
|
377
415
|
form.save
|
|
378
416
|
end
|
|
379
417
|
end
|
|
380
|
-
|
|
418
|
+
|
|
381
419
|
describe "save!" do
|
|
382
420
|
it "destroys models on save! if set" do
|
|
383
421
|
form._destroy = true
|
|
@@ -387,7 +425,7 @@ describe FreeForm::Form do
|
|
|
387
425
|
form.tasks.last.task.should_receive(:save!).and_return(true)
|
|
388
426
|
form.save!
|
|
389
427
|
end
|
|
390
|
-
|
|
428
|
+
|
|
391
429
|
it "destroys models on save! if set" do
|
|
392
430
|
form.fill({:_destroy => "1"})
|
|
393
431
|
form.company.should_receive(:destroy).and_return(true)
|
|
@@ -409,4 +447,4 @@ describe FreeForm::Form do
|
|
|
409
447
|
end
|
|
410
448
|
end
|
|
411
449
|
end
|
|
412
|
-
end
|
|
450
|
+
end
|
data/spec/dummy/db/test.sqlite3
CHANGED
|
Binary file
|