Changeset 398
- Timestamp:
- 04/23/07 01:13:24 (1 year ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/mental/radiant/app/controllers/admin/page_controller.rb
r371 r398 93 93 94 94 def save 95 original_names = @page.parts.map { |part| part.name }96 new_names = (params[:part] || {}).values.map { |part| part[:name]}97 names_to_remove = (original_names - new_names)95 parts = @page.parts 96 parts_to_update = {} 97 (params[:part]||{}).each {|k,v| parts_to_update[v[:name]] = v } 98 98 99 parts_to_update = [] 100 (params[:part] || {}).values.each do |v| 101 if part = @page.parts.find_by_name(v[:name]) 102 part.attributes = part.attributes.merge(v) 103 parts_to_update << part 99 parts_to_remove = [] 100 @page.parts.each do |part| 101 if(attrs = parts_to_update.delete(part.name)) 102 part.attributes = part.attributes.merge(attrs) 104 103 else 105 @page.parts.build(v)104 parts_to_remove << part 106 105 end 107 106 end 107 parts_to_update.values.each do |attrs| 108 @page.parts.build(attrs) 109 end 108 110 if result = @page.save 109 names_to_remove.each { |name| @page.parts.find_by_name(name).destroy } 110 parts_to_update.each { |part| part.save } 111 new_parts = @page.parts - parts_to_remove 112 new_parts.each {|x| x.save} 113 @page.parts = new_parts 111 114 end 112 115 result branches/mental/radiant/test/functional/admin/page_controller_test.rb
r371 r398 189 189 assert_match /has been modified/, flash[:error] 190 190 end 191 192 def test_edit__post_with_parts_and_optimistic_locking 193 @page = create_test_page 194 @page.parts.create(part_params(:name => 'test-part-1', :content => 'original-1')) 195 post :edit, :id => @page.id, :page => page_params(:status_id => '1', :lock_version => '12'), :part => {'1' => part_params(:name => 'test-part-1', :content => 'changed-1')} 196 assert_response :success # not redirected 197 assert_match /has been modified/, flash[:error] 198 #changed value must not be saved 199 assert_equal 'original-1', @page.parts.find_by_name('test-part-1').content 200 #but must be rendered to page 201 assert_tag :tag => 'textarea', :content => 'changed-1' 202 end 191 203 192 204 def test_remove
