diff --git a/Gemfile.lock b/Gemfile.lock index 01dfe5f..5fe7343 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -46,7 +46,7 @@ GEM multi_json (~> 1.0) simplecov-html (~> 0.9.0) simplecov-html (0.9.0) - sqlite3 (1.3.5) + sqlite3 (1.3.11) thor (0.19.1) PLATFORMS @@ -61,3 +61,6 @@ DEPENDENCIES rest-client (> 1.6.2, < 1.7) rspec (~> 2.8.0) sqlite3 (~> 1.3.4) + +BUNDLED WITH + 1.12.5 diff --git a/lib/comma.rb b/lib/comma.rb index 2167946..fb95cf5 100644 --- a/lib/comma.rb +++ b/lib/comma.rb @@ -46,9 +46,12 @@ module Comma filename = options[:filename] || 'data' extension = options[:extension] || 'csv' mime_type = options[:mime_type] || Mime::CSV + with_bom = options[:with_bom] || false #Capture any CSV optional settings passed to comma or comma specific options csv_options = options.slice(*CSV_HANDLER::DEFAULT_OPTIONS.merge(Comma::DEFAULT_OPTIONS).keys) - send_data obj.to_comma(csv_options), :type => mime_type, :disposition => "attachment; filename=\"#{filename}.#{extension}\"" + data = obj.to_comma(csv_options) + data = "\xEF\xBB\xBF#{data}" if with_bom + send_data data, :type => mime_type, :disposition => "attachment; filename=\"#{filename}.#{extension}\"" end end end diff --git a/spec/controllers/users_controller_spec.rb b/spec/controllers/users_controller_spec.rb index 1258844..51d67bd 100644 --- a/spec/controllers/users_controller_spec.rb +++ b/spec/controllers/users_controller_spec.rb @@ -103,6 +103,18 @@ response.content_type.should == 'text/plain' end + it 'should allow bom to be set' do + get :with_custom_options, :format => :csv, :custom_options => { :with_bom => true } + + expected_content =<<-CSV.gsub(/^\s+/,'') + \xEF\xBB\xBFFirst name,Last name + Fred,Flintstone + Wilma,Flintstone + CSV + + response.body.should == expected_content + end + describe 'headers' do it 'should allow toggling on' do