acts_as_multipart_form 0.0.13 → 0.0.14

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.
data/CHANGELOG CHANGED
@@ -1,5 +1,9 @@
1
1
  == unreleased changes
2
2
 
3
+ == 0.0.14
4
+
5
+ * Added support for multipart forms that start with a new record.
6
+
3
7
  == 0.0.13
4
8
 
5
9
  * Major documentation updates
data/README.rdoc CHANGED
@@ -55,7 +55,8 @@ This is currently only used for validations. If this is set, you can use a vali
55
55
  == Add the route
56
56
 
57
57
  resources :people do
58
- match 'edit', to: 'people#hire_form', :via => [:get, :post]
58
+ match 'edit/:id', to: 'people#hire_form', :via => [:get, :post]
59
+ match 'new', to: 'people#hire_form', :via => [:get, :post] # optional
59
60
 
60
61
  == Setting up your form
61
62
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.13
1
+ 0.0.14
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "acts_as_multipart_form"
8
- s.version = "0.0.13"
8
+ s.version = "0.0.14"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Jeremiah Hemphill", "Ethan Pemble"]
12
- s.date = "2012-05-09"
12
+ s.date = "2012-05-16"
13
13
  s.description = "Multipart forms using custom routes"
14
14
  s.email = "jeremiah@cloudspace.com"
15
15
  s.extra_rdoc_files = [
@@ -14,7 +14,8 @@ module MultipartForm
14
14
 
15
15
  attr_accessible :form_subject, :form_subject_id, :form_subject_type, :form_name, :last_completed_step, :completed
16
16
 
17
- validates_presence_of :form_subject
17
+ validates_presence_of :form_subject_id
18
+ validates_presence_of :form_subject_type
18
19
  validates_presence_of :form_name
19
20
  validates_presence_of :last_completed_step
20
21
  validates_inclusion_of :completed, :in => [true, false]
@@ -93,7 +93,7 @@ module ActsAsMultipartForm
93
93
  def load_multipart_form_index_links(form_name, form_subjects)
94
94
  @multipart_form_index_parts = {}
95
95
  form_subjects.each do |form_subject|
96
- in_progress_form = find_or_create_multipart_in_progress_form(form_name, form_subject)
96
+ in_progress_form = find_or_initialize_multipart_in_progress_form(form_name, form_subject)
97
97
  @multipart_form_index_parts[form_subject.id] = {}
98
98
  @multipart_form_index_parts[form_subject.id][:parts] = get_available_multipart_form_parts(form_name, in_progress_form.last_completed_step)
99
99
  @multipart_form_index_parts[form_subject.id][:completed] = in_progress_form.completed
@@ -110,10 +110,10 @@ module ActsAsMultipartForm
110
110
  form_name = params[:action].to_sym
111
111
  form_subject_id = params[:id]
112
112
 
113
- @form_subject = find_or_create_multipart_form_subject(form_name, form_subject_id)
113
+ @form_subject = find_or_initialize_multipart_form_subject(form_name, form_subject_id)
114
114
  params[:id] = @form_subject.id
115
115
 
116
- in_progress_form = find_or_create_multipart_in_progress_form(form_name, @form_subject)
116
+ in_progress_form = find_or_initialize_multipart_in_progress_form(form_name, @form_subject)
117
117
 
118
118
  # set the part based on the params or in progress form
119
119
  if params[:multipart_form_part]
@@ -131,7 +131,12 @@ module ActsAsMultipartForm
131
131
  if(part.match(/_update$/))
132
132
  if(result && result[:valid])
133
133
  completed = redirect_to_next_multipart_form_part(form_name, @form_subject, part)
134
- in_progress_form.update_attributes(:last_completed_step => part, :completed => completed)
134
+ # added form_subject_id in case it was not set when the in_progress_form was created (JH 5-15-2012)
135
+ # this would happen on a new page, but not an edit page
136
+ in_progress_form.update_attributes({
137
+ :form_subject_id => @form_subject.id,
138
+ :last_completed_step => part,
139
+ :completed => completed })
135
140
  else
136
141
  # render the previous page but stay on this page so we keep the errors
137
142
  part = get_previous_multipart_form_part(form_name, part)
@@ -231,39 +236,41 @@ module ActsAsMultipartForm
231
236
  # Given a form name and a form subject id, it creates the form subject
232
237
  # The form subject is defined by the id and the multipart form's model attribute
233
238
  #
234
- # The subject is created with no values and saved without validations (this might change in the future)
235
- # This is not a good situation but I don't know how to ensure the form subject gets saved otherwise
239
+ # The subject is initialized with no values and it is not saved
236
240
  #
237
241
  # @param [Symbol] form_name The name of the multipart form
238
242
  # @param [Integer] form_dubject_id The id of the form subject (could be nil)
239
- # @return [FormSubject] The form subject object based on the multipart form's model or nil if the id is set and not found
240
- def find_or_create_multipart_form_subject(form_name, form_subject_id)
243
+ # @return [FormSubject] The form subject in the database or a new form subject instance
244
+ def find_or_initialize_multipart_form_subject(form_name, form_subject_id)
241
245
  # find or create the form subject
242
246
  model = self.multipart_forms[form_name][:model]
243
247
  if form_subject_id
244
248
  form_subject = model.constantize.find(form_subject_id)
245
249
  else
246
250
  form_subject = model.constantize.new()
247
- form_subject.save(:validate => false)
248
251
  end
249
252
  return form_subject
250
253
  end
251
254
 
252
255
  # Returns the InProgressForm object when given the form name and subject
253
- # Creates the InPorgressForm object if it doesn't exist for the given form name/form subject pair
256
+ #
257
+ # Initializes but does not asve the InPorgressForm object if it doesn't exist for the given form name/form subject pair
254
258
  #
255
259
  # @param [Symbol] form_name The name of the multipart form
256
260
  # @param [FormSubject] form_subject The multipart form's subject
257
261
  # @returns [InProgressForm] The associated or new in progress form object
258
- def find_or_create_multipart_in_progress_form(form_name, form_subject)
262
+ def find_or_initialize_multipart_in_progress_form(form_name, form_subject)
259
263
  # find or create the in progress form
260
264
  # not sure why the polymorphic relationship isn't working here
261
265
  in_progress_form = MultipartForm::InProgressForm.where(
262
266
  :form_subject_id => form_subject.id,
263
267
  :form_subject_type => form_subject.class.to_s,
264
268
  :form_name => form_name.to_s).first
265
- if !in_progress_form
266
- in_progress_form = MultipartForm::InProgressForm.create(
269
+
270
+ # if the form subject is a new_record, in_progress_form should be nil
271
+ # trying to stop weird edge cases from killing me (JH 5-15-2012)
272
+ if form_subject.new_record? || !in_progress_form
273
+ in_progress_form = MultipartForm::InProgressForm.new(
267
274
  :form_subject_id => form_subject.id,
268
275
  :form_subject_type => form_subject.class.to_s,
269
276
  :form_name => form_name.to_s,
@@ -25,7 +25,8 @@ describe MultipartForm::InProgressForm do
25
25
  end
26
26
 
27
27
  it "should require a form subject" do
28
- @ip_form.should have(1).error_on(:form_subject)
28
+ @ip_form.should have(1).error_on(:form_subject_id)
29
+ @ip_form.should have(1).error_on(:form_subject_type)
29
30
  end
30
31
 
31
32
  it "should require a form name" do
@@ -155,11 +155,11 @@ describe ActsAsMultipartForm::MultipartFormInController do
155
155
  @ipf = mock_model(MultipartForm::InProgressForm)
156
156
  @ipf.stub!(:last_completed_step)
157
157
  @ipf.stub!(:completed).and_return(true)
158
- @controller.stub!(:find_or_create_multipart_in_progress_form).and_return(@ipf)
158
+ @controller.stub!(:find_or_initialize_multipart_in_progress_form).and_return(@ipf)
159
159
  end
160
160
 
161
- it "should call find_or_create_multipart_in_progress_form" do
162
- @controller.should_receive(:find_or_create_multipart_in_progress_form)
161
+ it "should call find_or_initialize_multipart_in_progress_form" do
162
+ @controller.should_receive(:find_or_initialize_multipart_in_progress_form)
163
163
  @controller.load_multipart_form_index_links(@form_name, @form_subjects)
164
164
  end
165
165
 
@@ -216,8 +216,8 @@ describe ActsAsMultipartForm::MultipartFormInController do
216
216
  :in_progress_form_id => ipf.id
217
217
  }
218
218
  @controller.stub!(:params).and_return(params)
219
- @controller.stub!(:find_or_create_multipart_form_subect)
220
- @controller.stub!(:find_or_create_multipart_in_progress_form).and_return(ipf)
219
+ @controller.stub!(:find_or_initialize_multipart_form_subect)
220
+ @controller.stub!(:find_or_initialize_multipart_in_progress_form).and_return(ipf)
221
221
  @controller.should_receive(:job_info)
222
222
  @controller.multipart_form_handler
223
223
  end
@@ -240,16 +240,16 @@ describe ActsAsMultipartForm::MultipartFormInController do
240
240
  }
241
241
  @controller.stub!(:params).and_return(params)
242
242
  ipf = MultipartForm::InProgressForm.new
243
- @controller.stub!(:find_or_create_multipart_in_progress_form).and_return(ipf)
243
+ @controller.stub!(:find_or_initialize_multipart_in_progress_form).and_return(ipf)
244
244
  @controller.stub!(:person_info_update).and_return({:valid => true})
245
245
  @controller.stub!(:redirect_to_next_multipart_form_part).and_return(false)
246
- ipf.should_receive(:update_attributes).with(:completed => false, :last_completed_step => :person_info_update)
246
+ ipf.should_receive(:update_attributes).with(:form_subject_id => nil, :completed => false, :last_completed_step => :person_info_update)
247
247
 
248
248
  @controller.multipart_form_handler
249
249
  end
250
250
  end
251
251
 
252
- describe "find_or_create_multipart_form_subject method" do
252
+ describe "find_or_initialize_multipart_form_subject method" do
253
253
  before(:each) do
254
254
  @controller = PeopleController.new
255
255
  @controller.multipart_forms[:hire_form][:model] = "Person"
@@ -257,23 +257,22 @@ describe ActsAsMultipartForm::MultipartFormInController do
257
257
 
258
258
  it "should find the form subject on a valid id" do
259
259
  Person.should_receive(:find)
260
- @controller.find_or_create_multipart_form_subject(:hire_form, 1)
260
+ @controller.find_or_initialize_multipart_form_subject(:hire_form, 1)
261
261
  end
262
262
 
263
263
  it "should create the form subject if there is no id given" do
264
264
  p = mock_model(Person)
265
265
  Person.should_receive(:new).and_return(p)
266
- p.should_receive(:save).with(:validate => false)
267
- @controller.find_or_create_multipart_form_subject(:hire_form, nil)
266
+ @controller.find_or_initialize_multipart_form_subject(:hire_form, nil)
268
267
  end
269
268
 
270
269
  it "should return an error or nil if the id is invalid" do
271
270
  Person.should_receive(:find).and_return(nil)
272
- @controller.find_or_create_multipart_form_subject(:hire_form, 1).should be_nil
271
+ @controller.find_or_initialize_multipart_form_subject(:hire_form, 1).should be_nil
273
272
  end
274
273
  end
275
274
 
276
- describe "find_or_create_multipart_in_progress_form method" do
275
+ describe "find_or_initialize_multipart_in_progress_form method" do
277
276
  before(:each) do
278
277
  @controller = PeopleController.new
279
278
  @form_subject = mock_model(Person)
@@ -282,17 +281,17 @@ describe ActsAsMultipartForm::MultipartFormInController do
282
281
 
283
282
  it "should find the in progress form if it exists" do
284
283
  MultipartForm::InProgressForm.should_receive(:where).and_return([@ipf])
285
- @controller.find_or_create_multipart_in_progress_form(:hire_form, @form_subject).should == @ipf
284
+ @controller.find_or_initialize_multipart_in_progress_form(:hire_form, @form_subject).should == @ipf
286
285
  end
287
286
 
288
287
  it "should create an in progress form if it doesn't exist" do
289
- MultipartForm::InProgressForm.should_receive(:create).and_return(@ipf)
290
- @controller.find_or_create_multipart_in_progress_form(:hire_form, @form_subject).should == @ipf
288
+ MultipartForm::InProgressForm.should_receive(:new).and_return(@ipf)
289
+ @controller.find_or_initialize_multipart_in_progress_form(:hire_form, @form_subject).should == @ipf
291
290
  end
292
291
 
293
292
  # maybe refactor so it doesn't hit the database
294
293
  it "should create an in progress form with a last_completed_step initially set to 'none'" do
295
- @controller.find_or_create_multipart_in_progress_form(:hire_form, @form_subject).last_completed_step.should == "none"
294
+ @controller.find_or_initialize_multipart_in_progress_form(:hire_form, @form_subject).last_completed_step.should == "none"
296
295
  end
297
296
  end
298
297
 
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: acts_as_multipart_form
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.13
5
+ version: 0.0.14
6
6
  platform: ruby
7
7
  authors:
8
8
  - Jeremiah Hemphill
@@ -11,7 +11,7 @@ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
13
 
14
- date: 2012-05-09 00:00:00 Z
14
+ date: 2012-05-16 00:00:00 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rails
@@ -258,7 +258,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
258
258
  requirements:
259
259
  - - ">="
260
260
  - !ruby/object:Gem::Version
261
- hash: 1196884223902992685
261
+ hash: 1464765102833044920
262
262
  segments:
263
263
  - 0
264
264
  version: "0"