freeform 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
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