freeform 2.0.1 → 2.0.2

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 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