Skip to content

Commit

Permalink
delete attachment. Issue salesking#12
Browse files Browse the repository at this point in the history
  • Loading branch information
vijendra committed Feb 4, 2012
1 parent c518bcf commit c9826e7
Show file tree
Hide file tree
Showing 8 changed files with 41 additions and 5 deletions.
Binary file added app/assets/images/destroy.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 5 additions & 0 deletions app/controllers/attachments_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,9 @@ def update
end
end
end

def destroy
@attachment.destroy
redirect_to attachments_path
end
end
4 changes: 2 additions & 2 deletions app/models/attachment.rb
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ def full_filename
def rows(size = 0)
parsed_data[0..(size - 1)]
end

private

# When parsing data, we expect our file to be saved as valid utf-8
Expand Down Expand Up @@ -81,7 +81,7 @@ def store_file
end

def delete_file
File.delete(full_filename)
File.delete(full_filename) rescue true #catch Errno::ENOENT exception for deleted files
end


Expand Down
3 changes: 3 additions & 0 deletions app/views/attachments/index.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
%th= Attachment.model_name.human(count: 1)
%th= Mapping.model_name.human(count: 1)
%th= Import.model_name.human(count: 1)
%th
%tbody
- @attachments.each do |attachment|
%tr
Expand All @@ -29,3 +30,5 @@
.created= import.created_at
- elsif attachment.mapping
= link_to(t('imports.new'), new_attachment_import_path(attachment))
%td
= link_to(image_tag('destroy.png'), attachment, :confirm => t('attachments.delete_confirm'), :method => :delete)
3 changes: 2 additions & 1 deletion config/locales/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ en:
new: Upload new CSV file
upload: Upload
proceed_to_mapping: Proceed to mapping
delete_confirm: "Please note that, this is irreversible process. This will delete associated imports. Are you sure?"
mappings:
title:
one: "%{count} field: %{fields}"
Expand Down Expand Up @@ -69,4 +70,4 @@ en:
confirm_destroy: Really delete this record?
step: "Step %{count} from %{total}:"
errors:
sk_login_required: "Please login to SalesKing and navigate to this app from inside there."
sk_login_required: "Please login to SalesKing and navigate to this app from inside there."
2 changes: 1 addition & 1 deletion config/routes.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
CsvImporter::Application.routes.draw do

resources :attachments, except: [:edit, :destroy] do
resources :attachments, except: [:edit] do
resources :mappings, only: [:new, :create]
resources :imports, only: [:new, :create]
end
Expand Down
21 changes: 21 additions & 0 deletions spec/controllers/attachments_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,13 @@
put :update, id: Factory(:attachment).id, attachment: {}
end
end

describe "DELETE #destroy" do
it "triggers access_denied" do
controller.should_receive(:access_denied)
delete :destroy, id: Factory(:attachment).id
end
end
end

context "for authenticaned user" do
Expand Down Expand Up @@ -173,5 +180,19 @@
end
end
end

describe "DELETE destroy" do
it "destroys the requested attachment" do
expect {
delete :destroy, :id => @authorized_attachment.id
}.to change(Attachment, :count).by(-1)
end

it "redirects to the attachments list after destroying the requested attachment" do
delete :destroy, :id => @authorized_attachment.id
response.should redirect_to(attachments_path)
end
end

end
end
8 changes: 7 additions & 1 deletion spec/models/attachment_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@
File.exist?(file_path).should be_false
end

it "should silently ignore missing files on destroy" do
file_path = @attachment.full_filename
File.delete(file_path)
lambda {@attachment.destroy}.should_not raise_error(Errno::ENOENT)
end

it "parses csv data" do
@attachment.rows.size.should == 2
@attachment.rows.first.size.should be > 1
Expand All @@ -28,7 +34,7 @@
@attachment.rows(1).size.should == 1
end

describe "different csv formats" do
describe "formats" do
{'google_native_test_.csv' => 3, 'google_outlook_test.csv' => 3, 'test1.csv' => 2}.each do |csv_file, count|
it "should able to read #{csv_file}" do
attachment = Factory(:attachment, :uploaded_data => file_upload(csv_file))
Expand Down

0 comments on commit c9826e7

Please sign in to comment.