freeform 2.0.1 → 2.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YWE2NTA4YmE3ZWY3ZjNjMDkzM2VmOTA4NzU5ZjI4Mjc3ZGQ0NTFkOA==
4
+ YjBhNTViMmQwZDkyOTM5ZTU0N2Q0OGU0YmNhYjcyNmRhZDc4ZDI2MQ==
5
5
  data.tar.gz: !binary |-
6
- Y2U1NjU4ZWJkZDIzOGMwODkwMDY5YTY3ZmFmOTRkOTdjMTRlZTA3Yg==
6
+ ZDI2ZDk5NGEzNDk4MmFmMmU0ZDlmZjJjMzI0NmZkMjUxZGU0NmYzZQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MmJiNTNlMDUyM2U1ZThlZDJhODFkYzNjOTVlNmQ5MzAzYjViZmE3ZWRkZGIz
10
- Zjc1Y2ZmNTY0MDY3NjhmYWZjNWM4MGRhNDM0Y2M2YTVhOTk5ZWFmNGE0NTgw
11
- MDJjMmNjOWRiN2I0ZTlmYWFjZWY1ZDhmNmMxZDYzMGY3OGVjOWY=
9
+ NDk3MjViNGU5NWFhMmMyNGQyMTI4MTdlMDIzMjcwOWU1YjRkN2JkNGQzMTVh
10
+ MWY4ZmQwOTAzM2NkNzQyMTliOWRkM2RhZWE0NDdiOGQyZmQ1NDA2ZTIxOGMw
11
+ MDZjZGNmMTY2MDE0ODc3ZTQ2ZGUyOThjMzI2OGEzNzZhMTM0OWM=
12
12
  data.tar.gz: !binary |-
13
- YjhhZWZhZGJhYjA4NjYwZTljM2ExNDE5NGJjYzAxNzJkZjhmM2RjMTdjZmYw
14
- NDgyMmVhNjFjNjE0Y2ZiN2ZkNzFlOGU0NTZhOTViMTNhMjQ2OTYyM2JiMTlj
15
- MmIwNzU1MjlmYTEwZGUwNWJhZDczMTcxMzFhZjZiZmEwZmIzOWM=
13
+ ZjIzNTA2NmY1MjNlYmVkOGViNjlhNjFkMTA1MDE0OGMxODRiZTU2NDY3MjZh
14
+ MDgxMzVlNWVkZmMzZmRjZThlMDY4YmRlN2U5ODY4NzFlZGE5ZjBlNjU1ZGZm
15
+ YjY1OTFkNjBjMGUxZjBiNGYyZDRkZjBiYzQ5Y2Y1NzMwYTk0Nzg=
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- freeform (2.0.0)
4
+ freeform (2.0.1)
5
5
  activemodel
6
6
  formtastic
7
7
  rails (>= 3.2.0)
@@ -55,13 +55,14 @@ module FreeForm
55
55
  end
56
56
 
57
57
  def assign_params(params)
58
+ formatted_params = params.stringify_keys
58
59
  self.tap do |s|
59
- FreeForm::DateParamsFilter.new.call(params)
60
- before_assign_params(params)
61
- params.each_pair do |attribute, value|
60
+ FreeForm::DateParamsFilter.new.call(formatted_params)
61
+ before_assign_params(formatted_params)
62
+ formatted_params.each_pair do |attribute, value|
62
63
  assign_attribute(attribute, value)
63
64
  end
64
- after_assign_params(params)
65
+ after_assign_params(formatted_params)
65
66
  end
66
67
  end
67
68
  alias_method :assign_attributes, :assign_params
@@ -70,15 +71,9 @@ module FreeForm
70
71
 
71
72
  def before_assign_params(params)
72
73
  end
73
- alias_method :before_assign_attributes, :before_assign_params
74
- alias_method :before_populate, :before_assign_params
75
- alias_method :before_fill, :before_assign_params
76
74
 
77
75
  def after_assign_params(params)
78
76
  end
79
- alias_method :after_assign_attributes, :after_assign_params
80
- alias_method :after_populate, :after_assign_params
81
- alias_method :after_fill, :after_assign_params
82
77
 
83
78
  def model_property_mappings
84
79
  self.class.property_mappings
@@ -1,3 +1,3 @@
1
1
  module Freeform
2
- VERSION = "2.0.1"
2
+ VERSION = "2.0.2"
3
3
  end
@@ -390,7 +390,7 @@ describe FreeForm::Form do
390
390
  task_1.reload.start_date.should eq(Date.new(2012, 1, 2))
391
391
  end
392
392
 
393
- it "destroys the second task model", :failing => true do
393
+ it "destroys the second task model" do
394
394
  form.save
395
395
  task_2.should_not exist_in_database
396
396
  end
Binary file
@@ -185,7 +185,7 @@ describe FreeForm::Form do
185
185
  end
186
186
 
187
187
  describe "#save" do
188
- it "should return true on 'save'", :failing => true do
188
+ it "should return true on 'save'" do
189
189
  form.save.should be_true
190
190
  end
191
191
 
@@ -261,6 +261,212 @@ describe FreeForm::Form do
261
261
  end
262
262
  end
263
263
 
264
+ describe "before and after save hooks", :hooks => true do
265
+ describe "before save", :before_save => true do
266
+ let(:form_class) do
267
+ klass = Class.new(FreeForm::Form) do
268
+ form_input_key :task
269
+ form_models :task
270
+ validate_models
271
+ allow_destroy_on_save
272
+
273
+ property :name, :on => :task
274
+ property :start_date, :on => :task
275
+ property :end_date, :on => :task
276
+ validates :name, :presence => true
277
+
278
+ has_many :milestones do
279
+ form_input_key :milestone
280
+ form_model :milestone
281
+ validate_models
282
+ allow_destroy_on_save
283
+
284
+ property :name, :on => :milestone
285
+ end
286
+
287
+ def milestone_initializer
288
+ { :milestone => task.milestones.build }
289
+ end
290
+
291
+ def before_save
292
+ task.project.update_attribute(:name, "DummyProject")
293
+ end
294
+ end
295
+ # This wrapper just avoids CONST warnings
296
+ v, $VERBOSE = $VERBOSE, nil
297
+ Module.const_set("AcceptanceForm", klass)
298
+ $VERBOSE = v
299
+ klass
300
+ end
301
+
302
+ let(:company) { Company.create!(:name => "Demo Corporation") }
303
+ let(:project) { Project.create!(:owner => company, :name => "Widget", :due_date => Date.new(2014, 1, 1)) }
304
+ let(:task) { Task.new(:project => project) }
305
+
306
+ let(:form) do
307
+ form_class.new( :task => task ).tap do |f|
308
+ f.build_milestone
309
+ end
310
+ end
311
+
312
+ context "with invalid attributes" do
313
+ let(:attributes) do {
314
+ :name => nil,
315
+ "start_date(1i)" => "2012",
316
+ "start_date(2i)" => "1",
317
+ "start_date(3i)" => "2",
318
+ "end_date(1i)" => "2011",
319
+ "end_date(2i)" => "12",
320
+ "end_date(3i)" => "15",
321
+ :milestones_attributes => {
322
+ "0" => {
323
+ :name => "milestone_1",
324
+ },
325
+ "1310201" => {
326
+ :name => "milestone_2",
327
+ }
328
+ } }
329
+ end
330
+
331
+ before(:each) { form.fill(attributes) }
332
+
333
+ it "does not run before_save on save" do
334
+ form.save
335
+ project.reload.name.should_not eq("DummyProject")
336
+ end
337
+ end
338
+
339
+ context "with valid attributes" do
340
+ let(:attributes) do {
341
+ :name => "taskname",
342
+ "start_date(1i)" => "2012",
343
+ "start_date(2i)" => "1",
344
+ "start_date(3i)" => "2",
345
+ "end_date(1i)" => "2011",
346
+ "end_date(2i)" => "12",
347
+ "end_date(3i)" => "15",
348
+ :milestones_attributes => {
349
+ "0" => {
350
+ :name => "milestone_1",
351
+ },
352
+ "1310201" => {
353
+ :name => "milestone_2",
354
+ }
355
+ } }
356
+ end
357
+
358
+ before(:each) { form.fill(attributes) }
359
+
360
+ it "runs before_save on save" do
361
+ form.save
362
+ project.reload.name.should eq("DummyProject")
363
+ end
364
+ end
365
+ end
366
+
367
+ describe "after save", :after_save => true do
368
+ let(:form_class) do
369
+ klass = Class.new(FreeForm::Form) do
370
+ form_input_key :task
371
+ form_models :task
372
+ validate_models
373
+ allow_destroy_on_save
374
+
375
+ property :name, :on => :task
376
+ property :start_date, :on => :task
377
+ property :end_date, :on => :task
378
+ validates :name, :presence => true
379
+
380
+ has_many :milestones do
381
+ form_input_key :milestone
382
+ form_model :milestone
383
+ validate_models
384
+ allow_destroy_on_save
385
+
386
+ property :name, :on => :milestone
387
+ end
388
+
389
+ def milestone_initializer
390
+ { :milestone => task.milestones.build }
391
+ end
392
+
393
+ def after_save
394
+ task.project.update_attribute(:name, "DummyProject")
395
+ end
396
+ end
397
+ # This wrapper just avoids CONST warnings
398
+ v, $VERBOSE = $VERBOSE, nil
399
+ Module.const_set("AcceptanceForm", klass)
400
+ $VERBOSE = v
401
+ klass
402
+ end
403
+
404
+ let(:company) { Company.create!(:name => "Demo Corporation") }
405
+ let(:project) { Project.create!(:owner => company, :name => "Widget", :due_date => Date.new(2014, 1, 1)) }
406
+ let(:task) { Task.new(:project => project) }
407
+
408
+ let(:form) do
409
+ form_class.new( :task => task ).tap do |f|
410
+ f.build_milestone
411
+ end
412
+ end
413
+
414
+ context "with invalid attributes" do
415
+ let(:attributes) do {
416
+ :name => nil,
417
+ "start_date(1i)" => "2012",
418
+ "start_date(2i)" => "1",
419
+ "start_date(3i)" => "2",
420
+ "end_date(1i)" => "2011",
421
+ "end_date(2i)" => "12",
422
+ "end_date(3i)" => "15",
423
+ :milestones_attributes => {
424
+ "0" => {
425
+ :name => "milestone_1",
426
+ },
427
+ "1310201" => {
428
+ :name => "milestone_2",
429
+ }
430
+ } }
431
+ end
432
+
433
+ before(:each) { form.fill(attributes) }
434
+
435
+ it "does not run after_save on save" do
436
+ form.save
437
+ project.reload.name.should_not eq("DummyProject")
438
+ end
439
+ end
440
+
441
+ context "with valid attributes" do
442
+ let(:attributes) do {
443
+ :name => "taskname",
444
+ "start_date(1i)" => "2012",
445
+ "start_date(2i)" => "1",
446
+ "start_date(3i)" => "2",
447
+ "end_date(1i)" => "2011",
448
+ "end_date(2i)" => "12",
449
+ "end_date(3i)" => "15",
450
+ :milestones_attributes => {
451
+ "0" => {
452
+ :name => "milestone_1",
453
+ },
454
+ "1310201" => {
455
+ :name => "milestone_2",
456
+ }
457
+ } }
458
+ end
459
+
460
+ before(:each) { form.fill(attributes) }
461
+
462
+ it "runs after_save on save" do
463
+ form.save
464
+ project.reload.name.should eq("DummyProject")
465
+ end
466
+ end
467
+ end
468
+ end
469
+
264
470
  describe "destroying", :destroying => true do
265
471
  context "without nested forms" do
266
472
  let(:task) { Task.create!(:project => project, :name => "mytask", :start_date => Date.new(2011, 1, 1), :end_date => Date.new(2012, 1, 1)) }
@@ -179,7 +179,6 @@ describe FreeForm::Property do
179
179
  end
180
180
 
181
181
  it "handles individiual date components" do
182
- #TODO: should pass with symbols too!!
183
182
  form.assign_attributes({
184
183
  "attribute_1(3i)" => 5,
185
184
  "attribute_1(2i)" => 6,
@@ -189,6 +188,91 @@ describe FreeForm::Property do
189
188
  end
190
189
  end
191
190
 
191
+ describe "before_assign_params", :before_assign_params => true do
192
+ let(:form_class) do
193
+ Class.new(Module) do
194
+ include FreeForm::Model
195
+ include FreeForm::Property
196
+ declared_model :first_model
197
+ declared_model :second_model
198
+
199
+ property :attribute_1, :on => :first_model
200
+ property :attribute_2, :on => :first_model, :ignore_blank => true
201
+ property :attribute_3, :on => :second_model, :ignore_blank => true
202
+ property :attribute_4, :on => :second_model
203
+
204
+ def initialize(h)
205
+ h.each {|k,v| send("#{k}=",v)}
206
+ end
207
+
208
+ def before_assign_params(params)
209
+ params.delete("attribute_1")
210
+ end
211
+ end
212
+ end
213
+
214
+ let(:form) do
215
+ form_class.new(
216
+ :first_model => OpenStruct.new(:attribute_1 => "first", :attribute_2 => "second"),
217
+ :second_model => OpenStruct.new(:attribute_3 => "third", :attribute_4 => "fourth"),
218
+ )
219
+ end
220
+
221
+ it "deletes attribute_1 from params" do
222
+ form.assign_attributes({
223
+ :attribute_1 => "changed", :attribute_2 => 182.34,
224
+ :attribute_3 => 45, :attribute_4 => Date.new(2013, 10, 10) })
225
+
226
+ form.attribute_1.should_not eq("changed")
227
+ form.attribute_2.should eq(182.34)
228
+ form.attribute_3.should eq(45)
229
+ form.attribute_4.should eq(Date.new(2013, 10, 10))
230
+ end
231
+ end
232
+
233
+ describe "after_assign_params", :after_assign_params => true do
234
+ let(:form_class) do
235
+ Class.new(Module) do
236
+ include FreeForm::Model
237
+ include FreeForm::Property
238
+ declared_model :first_model
239
+ declared_model :second_model
240
+
241
+ property :attribute_1, :on => :first_model
242
+ property :attribute_2, :on => :first_model, :ignore_blank => true
243
+ property :attribute_3, :on => :second_model, :ignore_blank => true
244
+ property :attribute_4, :on => :second_model
245
+
246
+ def initialize(h)
247
+ h.each {|k,v| send("#{k}=",v)}
248
+ end
249
+
250
+ def after_assign_params(params)
251
+ params.delete("attribute_1")
252
+ assign_attribute("attribute_3", "overwritten")
253
+ end
254
+ end
255
+ end
256
+
257
+ let(:form) do
258
+ form_class.new(
259
+ :first_model => OpenStruct.new(:attribute_1 => "first", :attribute_2 => "second"),
260
+ :second_model => OpenStruct.new(:attribute_3 => "third", :attribute_4 => "fourth"),
261
+ )
262
+ end
263
+
264
+ it "deletes attribute_1 from params" do
265
+ form.assign_attributes({
266
+ :attribute_1 => "changed", :attribute_2 => 182.34,
267
+ :attribute_3 => 45, :attribute_4 => Date.new(2013, 10, 10) })
268
+
269
+ form.attribute_1.should eq("changed")
270
+ form.attribute_2.should eq(182.34)
271
+ form.attribute_3.should eq("overwritten")
272
+ form.attribute_4.should eq(Date.new(2013, 10, 10))
273
+ end
274
+ end
275
+
192
276
  describe "model_property_mappings", :model_property_mappings => true do
193
277
  let(:form_class) do
194
278
  Class.new(Module) do
@@ -160,7 +160,7 @@ describe FreeForm::Validation do
160
160
  form.errors[:form_property].should eq(["can't be blank"])
161
161
  end
162
162
 
163
- it "has error on address street", :failing => true do
163
+ it "has error on address street" do
164
164
  form.valid?
165
165
  form.addresses.first.errors[:street].should eq(["can't be blank"])
166
166
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: freeform
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - brycesenz