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.
Files changed (44) hide show
  1. checksums.yaml +8 -8
  2. data/.gitignore +6 -0
  3. data/.travis.yml +8 -0
  4. data/Gemfile.lock +1 -1
  5. data/lib/freeform/form/validation.rb +14 -11
  6. data/lib/freeform/version.rb +1 -1
  7. data/spec/acceptance_spec.rb +60 -22
  8. data/spec/dummy/db/test.sqlite3 +0 -0
  9. data/spec/dummy/log/test.log +1474 -0
  10. metadata +3 -70
  11. data/spec/dummy/tmp/cache/assets/C54/850/sprockets%2Fd484f47085686f151320ff7248bb5105 +0 -0
  12. data/spec/dummy/tmp/cache/assets/C76/160/sprockets%2F49c594d143212b346d11f1ecf9358103 +0 -0
  13. data/spec/dummy/tmp/cache/assets/C99/4D0/sprockets%2F5e30a6b911437f1428dc32c3ae182123 +0 -0
  14. data/spec/dummy/tmp/cache/assets/C99/7D0/sprockets%2F79513e6956e0ee8624976e041fd5636d +0 -0
  15. data/spec/dummy/tmp/cache/assets/CAA/C90/sprockets%2F1e6c8ee1258009385ccf5b84015424b3 +0 -0
  16. data/spec/dummy/tmp/cache/assets/CB2/CB0/sprockets%2F11cc8d161d71a716dd36f16849d90870 +0 -0
  17. data/spec/dummy/tmp/cache/assets/CB7/7F0/sprockets%2Fac97b043470f6fcc925c352f16956643 +0 -0
  18. data/spec/dummy/tmp/cache/assets/CBA/680/sprockets%2F912d84e091e5f2190b1ab7926de19679 +0 -0
  19. data/spec/dummy/tmp/cache/assets/CC7/430/sprockets%2F48e99a3e16ba3e65749e009d82546f94 +0 -0
  20. data/spec/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
  21. data/spec/dummy/tmp/cache/assets/CDB/8A0/sprockets%2Faed2a2575c376263c26e93b56b57051d +0 -0
  22. data/spec/dummy/tmp/cache/assets/CF1/E80/sprockets%2F7735295e1e3085f2e1dc29d59a45e8e6 +0 -0
  23. data/spec/dummy/tmp/cache/assets/D0F/E60/sprockets%2F1123d9a479fdf5c2b8415087e2a43ec6 +0 -0
  24. data/spec/dummy/tmp/cache/assets/D1F/A10/sprockets%2F60317e62cb324bfd9987e8da9636fd06 +0 -0
  25. data/spec/dummy/tmp/cache/assets/D25/E20/sprockets%2F29ba1a4a2b611731334f54abb9e5b5d1 +0 -0
  26. data/spec/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
  27. data/spec/dummy/tmp/cache/assets/D35/760/sprockets%2F49e26620c5c743ac4cdab7703f54db06 +0 -0
  28. data/spec/dummy/tmp/cache/assets/D49/870/sprockets%2F90896142645585acc8baf56ad57e3afb +0 -0
  29. data/spec/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
  30. data/spec/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
  31. data/spec/dummy/tmp/cache/assets/D62/F00/sprockets%2F6ac03a007f26b1c18ed3d53498ad3eb8 +0 -0
  32. data/spec/dummy/tmp/cache/assets/D79/BC0/sprockets%2F85a1db977361cc5130fcefb4637ff67e +0 -0
  33. data/spec/dummy/tmp/cache/assets/D87/1F0/sprockets%2F61c9ceafb877fb740c67416ff6f782a9 +0 -0
  34. data/spec/dummy/tmp/cache/assets/DA8/900/sprockets%2Fde7a2b3987b89b9d9afb268ce4204a4a +0 -0
  35. data/spec/dummy/tmp/cache/assets/DAD/4F0/sprockets%2F765acd1bf68dc90f7d3e61da78b1e659 +0 -0
  36. data/spec/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
  37. data/spec/dummy/tmp/cache/assets/E03/3F0/sprockets%2F82b37ae9eccec44c1ef44cfdd07d8534 +0 -0
  38. data/spec/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  39. data/spec/dummy/tmp/cache/assets/E0A/CA0/sprockets%2F7fe72ac1c0db1a7e8e7f59cf25e8a39e +0 -0
  40. data/spec/dummy/tmp/cache/assets/E20/9B0/sprockets%2F2fa6cd86b1af7bda41f5b7921cdadf10 +0 -0
  41. data/spec/dummy/tmp/cache/assets/E3A/A60/sprockets%2F7c72c96cfc66454caf5fc8ca0fedd4f3 +0 -0
  42. data/spec/dummy/tmp/cache/assets/E54/400/sprockets%2Fd0cbc16cc37efcf9dc41f242b5dbbf81 +0 -0
  43. data/spec/dummy/tmp/cache/assets/EB7/AB0/sprockets%2F801d29a5debdbfbfb4eef14d70d9bcdb +0 -0
  44. 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
- MDBmMWJjMDZmMGU4MDBlNzgxMTg3ZmNhYWExMmVlZWNlY2RjYTQ5Mg==
4
+ ODAyM2M4Y2YyNjA5NGY3NTQ3MzhiY2RlZGEwODc4NDllZjNkYWY3ZQ==
5
5
  data.tar.gz: !binary |-
6
- MzNiYjRlODQ0YTM2ZjIxMGQxMTljZjY0NzQ5MmU4OTI1MzJjNjA0NA==
6
+ MGYyOTkyNTNmMjBiZmM1OTg0MzRiODNkMWY4OWQwOTIxZjA2Y2Y4Zg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- M2I0OTUxZWEzYjk0OGFiNzljYzBlZDQ0MWFjYTNkZjMxYWY2MjMzMTU0N2U4
10
- ODAyNmU1M2NiYTAyNjI1YjRmMmVkOTZhNGYxNDA5NmU0YWUyMjJiNzgwN2U4
11
- Y2IwYWE3NmI4NDIzMTUwZDE4NzM0ZWFiMGI0MzA1OTM4MzEwZGM=
9
+ NTBmNzczODc3YTI3MTczNzFmYTQ1MTAwZDE0YmViMTkyZTdjNmQ2NTIyZGU2
10
+ NjU1NzFjYTcxZWRmNDM4MTg3YjJkMTY5MjgzMzdkMzdhYjc2Y2EzMWE5YzVh
11
+ YzUxY2NmYmUwZGVlYmE3MmE5OTFjYzhhZjE0MWI5NzBiNmRiN2I=
12
12
  data.tar.gz: !binary |-
13
- MzYzMDFlNWYyMTM5YzVjOWQ0NGMwMTMzYzJlMzAyNjczZjgyMzdiMGZlYTE0
14
- OWQyMDM2YjY3NDhmYzU2ZmE3NDUzNjRhM2MyOTBlMzUzNGRiZTQ0ZjkxZDll
15
- ZjgwMWIyMjNmMjkyMGFhOGNkYzIxNDk4MDQ4ZWQzODBmNjllZDc=
13
+ Mzk5YzNkMzJhMjdhNDA1ZWJkMjJlZWQ3OTc3ZjU1NmRiY2Q1ODA2YzVlNzk1
14
+ ZjIyZjJlZDhlNzZjZDU0MjI0NDFiYTIzZGU1OGM4Mzg3ZjYyODcyNDVkYjI5
15
+ ZmE4ZGRhNTQ1YTM3MjQyNDM0YjgwOWRhZDkxMTVmMDU1ZTk0ZjA=
data/.gitignore CHANGED
@@ -6,3 +6,9 @@ test/dummy/db/*.sqlite3-journal
6
6
  test/dummy/log/*.log
7
7
  test/dummy/tmp/*
8
8
  test/dummy/.sass-cache
9
+ spec/dummy/db/*.sqlite3
10
+ spec/dummy/db/*.sqlite3-journal
11
+ spec/dummy/log/*.log
12
+ spec/dummy/tmp/*
13
+ spec/dummy/.sass-cache
14
+ tmp/*
data/.travis.yml ADDED
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+
5
+ # whitelist
6
+ branches:
7
+ only:
8
+ - master
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- freeform (1.0.1)
4
+ freeform (1.0.2)
5
5
  activemodel
6
6
  formtastic
7
7
  nested_form (~> 0.3.2)
@@ -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
- form_validity = false unless model.valid?
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
@@ -1,3 +1,3 @@
1
1
  module Freeform
2
- VERSION = "1.0.2"
2
+ VERSION = "1.0.3"
3
3
  end
@@ -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", :failing => true do
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
Binary file