csv_builder 1.1.7 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. data/CHANGELOG.rdoc +10 -0
  2. data/README.md +99 -0
  3. data/Rakefile +22 -1
  4. data/VERSION +1 -0
  5. data/csv_builder.gemspec +116 -0
  6. data/lib/csv_builder.rb +13 -63
  7. data/lib/csv_builder/railtie.rb +5 -0
  8. data/lib/csv_builder/template_handler.rb +60 -0
  9. data/lib/{transliterating_filter.rb → csv_builder/transliterating_filter.rb} +3 -2
  10. data/rails/init.rb +1 -1
  11. data/spec/controllers/csv_builder_spec.rb +68 -0
  12. data/spec/rails_app/.gitignore +5 -0
  13. data/spec/rails_app/Gemfile +12 -0
  14. data/spec/rails_app/README +256 -0
  15. data/spec/rails_app/Rakefile +7 -0
  16. data/spec/rails_app/app/controllers/application_controller.rb +3 -0
  17. data/spec/rails_app/app/helpers/application_helper.rb +2 -0
  18. data/spec/rails_app/app/views/layouts/application.html.erb +14 -0
  19. data/spec/rails_app/config.ru +4 -0
  20. data/spec/rails_app/config/application.rb +42 -0
  21. data/spec/rails_app/config/boot.rb +6 -0
  22. data/spec/rails_app/config/database.yml +22 -0
  23. data/spec/rails_app/config/environment.rb +5 -0
  24. data/spec/rails_app/config/environments/development.rb +26 -0
  25. data/spec/rails_app/config/environments/production.rb +49 -0
  26. data/spec/rails_app/config/environments/test.rb +35 -0
  27. data/spec/rails_app/config/initializers/backtrace_silencers.rb +7 -0
  28. data/spec/rails_app/config/initializers/inflections.rb +10 -0
  29. data/spec/rails_app/config/initializers/mime_types.rb +5 -0
  30. data/spec/rails_app/config/initializers/secret_token.rb +7 -0
  31. data/spec/rails_app/config/initializers/session_store.rb +8 -0
  32. data/spec/rails_app/config/locales/en.yml +5 -0
  33. data/spec/rails_app/config/routes.rb +58 -0
  34. data/spec/rails_app/db/seeds.rb +7 -0
  35. data/spec/rails_app/doc/README_FOR_APP +2 -0
  36. data/spec/rails_app/lib/tasks/.gitkeep +0 -0
  37. data/spec/rails_app/public/404.html +26 -0
  38. data/spec/rails_app/public/422.html +26 -0
  39. data/spec/rails_app/public/500.html +26 -0
  40. data/spec/rails_app/public/favicon.ico +0 -0
  41. data/spec/rails_app/public/images/rails.png +0 -0
  42. data/spec/rails_app/public/index.html +239 -0
  43. data/spec/rails_app/public/javascripts/application.js +2 -0
  44. data/spec/rails_app/public/javascripts/controls.js +965 -0
  45. data/spec/rails_app/public/javascripts/dragdrop.js +974 -0
  46. data/spec/rails_app/public/javascripts/effects.js +1123 -0
  47. data/spec/rails_app/public/javascripts/prototype.js +6001 -0
  48. data/spec/rails_app/public/javascripts/rails.js +191 -0
  49. data/spec/rails_app/public/robots.txt +5 -0
  50. data/spec/rails_app/public/stylesheets/.gitkeep +0 -0
  51. data/spec/rails_app/script/rails +6 -0
  52. data/spec/rails_app/test/performance/browsing_test.rb +9 -0
  53. data/spec/rails_app/test/test_helper.rb +13 -0
  54. data/spec/rails_app/vendor/plugins/.gitkeep +0 -0
  55. data/spec/spec_helper.rb +20 -0
  56. data/spec/templates/csv_builder_reports/complex.csv.csvbuilder +3 -0
  57. data/spec/templates/csv_builder_reports/encoding.csv.csvbuilder +1 -0
  58. data/spec/templates/csv_builder_reports/simple.csv.csvbuilder +1 -0
  59. data/spec/templates/csv_builder_reports/simple.html.erb +1 -0
  60. metadata +106 -33
  61. data/README.rdoc +0 -74
@@ -1,3 +1,13 @@
1
+ == 2.0.0 release 2011-04-22
2
+ * Move to Jeweler for release management
3
+ * Official Rails 3 release without regard for Rails 2
4
+ * Fix specs for Rspec 2.5 and Rails 3.0.7
5
+
6
+ == 1.1.8 (not released to gemcutter)
7
+ * Specs (Vidmantas Kabosis)
8
+ * Ruby 1.9 compability (Vidmantas Kabosis)
9
+ * CSV options are again passed to the builder (Vidmantas Kabosis)
10
+
1
11
  == 1.1.7 release 2009-12-27
2
12
 
3
13
  * Forgot to add transliterating filter to gem spec
@@ -0,0 +1,99 @@
1
+ **Important Note** Though I did not write this code, I did convert it to a gem and I'm currently the sole owner on
2
+ rubygems. With Joel Chippindale's approval I've taken over defacto maintainership of this gem. My use case is
3
+ primarily under rails 3, but I will accept patches for the 2.3.x version as well.
4
+
5
+ # CSV Builder
6
+
7
+ The CSV Builder Rails plugin provides a simple templating system for serving dynamically generated CSV files from your
8
+ application.
9
+
10
+
11
+
12
+ ## Requirements
13
+
14
+ The current version of CSV Builder works with:
15
+
16
+ * Rails 3.x
17
+ * Ruby 1.8 or 1.9
18
+
19
+ The legacy version (1.1.x) was originally developed and tested for Rails 2.1. See [the legacy
20
+ docs](https://github.com/econsultancy/csv_builder) for more details.
21
+
22
+
23
+
24
+ ## Install
25
+
26
+ ### Install as a gem (recommended)
27
+
28
+ $ gem install csv_builder
29
+
30
+ If you are using Bundler then [you know what to do](http://gembundler.com).
31
+
32
+
33
+
34
+ ## Example
35
+
36
+ CSV template files are suffixed with `.csv.csvbuilder`, for example `index.csv.csvbuilder`
37
+
38
+ Add rows to your CSV file in the template by pushing arrays of columns into the csv object.
39
+
40
+ # First row
41
+ csv << [ 'cell 1', 'cell 2' ]
42
+ # Second row
43
+ csv << [ 'another cell value', 'and another' ]
44
+ # etc...
45
+
46
+ You can set the default filename for that a browser will use for 'save as' by setting `@filename` instance variable in
47
+ your controller's action method e.g.
48
+
49
+ @filename = 'report.csv'
50
+
51
+ You can set the input encoding and output encoding by setting `@input_encoding` and `@output_encoding` instance
52
+ variables. These default to 'UTF-8' and 'LATIN1' respectively. e.g.
53
+
54
+ @output_encoding = 'UTF-8'
55
+
56
+ You can set `@csv_options` instance variable to define options for FasterCSV generator. For example:
57
+
58
+ @csv_options = { :force_quotes => true, :col_sep => ';' }
59
+
60
+ You can respond with csv in your controller as well:
61
+
62
+ respond_to do |format|
63
+ format.html
64
+ format.csv # make sure you have action_name.csv.csvbuilder template in place
65
+ end
66
+
67
+ You can also attach a csv file to mail sent out by your application by
68
+ including a snippet like the following in your mailer method
69
+
70
+ attachment "text/csv" do |attachment|
71
+ attachment.body = render(:file => 'example/index.csv.csvbuilder')
72
+ attachment.filename = 'report.csv'
73
+ end
74
+
75
+
76
+
77
+ ## Contributions
78
+
79
+ As of version 2.0 this gem has a rudimentary spec suite for Rails 3. The test suite has been run under both Ruby 1.8
80
+ and 1.9. The requirements are in the Gemfile within the test spec directory. So first you can run:
81
+
82
+ cd spec/rails_app && bundle install
83
+
84
+ To install the main testing requirements. Then return back to the root directory and run:
85
+
86
+ rake spec
87
+
88
+ I will also take patches for Rails 2.3.x, though I personally have no further need of that branch.
89
+
90
+
91
+
92
+ == Troubleshooting
93
+
94
+ There's a known bug of encoding error in Ruby 1.9
95
+
96
+ For more details see https://rails.lighthouseapp.com/projects/8994/tickets/2188-i18n-fails-with-multibyte-strings-in-ruby-19-similar-to-2038
97
+
98
+
99
+ Copyright (c) 2008 Econsultancy.com, 2009 Vidmantas Kabošis & 2011 Gabe da Silveira released under the MIT license
data/Rakefile CHANGED
@@ -1,5 +1,7 @@
1
- require 'rake'
2
1
  require 'rake/rdoctask'
2
+ require 'rspec/core'
3
+ require 'rspec/core/rake_task'
4
+ require 'jeweler'
3
5
 
4
6
  desc 'Generate documentation for the csv_builder plugin.'
5
7
  Rake::RDocTask.new(:rdoc) do |rdoc|
@@ -10,3 +12,22 @@ Rake::RDocTask.new(:rdoc) do |rdoc|
10
12
  rdoc.rdoc_files.include('CHANGELOG.rdoc')
11
13
  rdoc.rdoc_files.include('lib/**/*.rb')
12
14
  end
15
+
16
+ desc 'Test the csv builder'
17
+ RSpec::Core::RakeTask.new(:spec) do |t|
18
+ t.pattern = "./spec/**/*_spec.rb"
19
+ end
20
+
21
+ desc 'Default: run specs.'
22
+ task :default => :spec
23
+
24
+ Jeweler::Tasks.new do |gem|
25
+ gem.name = "csv_builder"
26
+ gem.homepage = "http://github.com/dasil003/csv_builder"
27
+ gem.license = "MIT"
28
+ gem.summary = %Q{CSV template handler for Rails}
29
+ gem.description = %Q{CSV template handler for Rails. Enables :format => 'csv' in controllers, with templates of the form report.csv.csvbuilder.}
30
+ gem.email = "gabe@websaviour.com"
31
+ gem.authors = ['Econsultancy', 'Vidmantas Kabosis', "Gabe da Silveira"]
32
+ end
33
+ Jeweler::RubygemsDotOrgTasks.new
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 2.0.0
@@ -0,0 +1,116 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{csv_builder}
8
+ s.version = "2.0.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Econsultancy", "Vidmantas Kabosis", "Gabe da Silveira"]
12
+ s.date = %q{2011-04-22}
13
+ s.description = %q{CSV template handler for Rails. Enables :format => 'csv' in controllers, with templates of the form report.csv.csvbuilder.}
14
+ s.email = %q{gabe@websaviour.com}
15
+ s.extra_rdoc_files = [
16
+ "README.md"
17
+ ]
18
+ s.files = [
19
+ "CHANGELOG.rdoc",
20
+ "MIT-LICENSE",
21
+ "README.md",
22
+ "Rakefile",
23
+ "VERSION",
24
+ "csv_builder.gemspec",
25
+ "lib/csv_builder.rb",
26
+ "lib/csv_builder/railtie.rb",
27
+ "lib/csv_builder/template_handler.rb",
28
+ "lib/csv_builder/transliterating_filter.rb",
29
+ "rails/init.rb",
30
+ "spec/controllers/csv_builder_spec.rb",
31
+ "spec/rails_app/.gitignore",
32
+ "spec/rails_app/Gemfile",
33
+ "spec/rails_app/README",
34
+ "spec/rails_app/Rakefile",
35
+ "spec/rails_app/app/controllers/application_controller.rb",
36
+ "spec/rails_app/app/helpers/application_helper.rb",
37
+ "spec/rails_app/app/views/layouts/application.html.erb",
38
+ "spec/rails_app/config.ru",
39
+ "spec/rails_app/config/application.rb",
40
+ "spec/rails_app/config/boot.rb",
41
+ "spec/rails_app/config/database.yml",
42
+ "spec/rails_app/config/environment.rb",
43
+ "spec/rails_app/config/environments/development.rb",
44
+ "spec/rails_app/config/environments/production.rb",
45
+ "spec/rails_app/config/environments/test.rb",
46
+ "spec/rails_app/config/initializers/backtrace_silencers.rb",
47
+ "spec/rails_app/config/initializers/inflections.rb",
48
+ "spec/rails_app/config/initializers/mime_types.rb",
49
+ "spec/rails_app/config/initializers/secret_token.rb",
50
+ "spec/rails_app/config/initializers/session_store.rb",
51
+ "spec/rails_app/config/locales/en.yml",
52
+ "spec/rails_app/config/routes.rb",
53
+ "spec/rails_app/db/seeds.rb",
54
+ "spec/rails_app/doc/README_FOR_APP",
55
+ "spec/rails_app/lib/tasks/.gitkeep",
56
+ "spec/rails_app/public/404.html",
57
+ "spec/rails_app/public/422.html",
58
+ "spec/rails_app/public/500.html",
59
+ "spec/rails_app/public/favicon.ico",
60
+ "spec/rails_app/public/images/rails.png",
61
+ "spec/rails_app/public/index.html",
62
+ "spec/rails_app/public/javascripts/application.js",
63
+ "spec/rails_app/public/javascripts/controls.js",
64
+ "spec/rails_app/public/javascripts/dragdrop.js",
65
+ "spec/rails_app/public/javascripts/effects.js",
66
+ "spec/rails_app/public/javascripts/prototype.js",
67
+ "spec/rails_app/public/javascripts/rails.js",
68
+ "spec/rails_app/public/robots.txt",
69
+ "spec/rails_app/public/stylesheets/.gitkeep",
70
+ "spec/rails_app/script/rails",
71
+ "spec/rails_app/test/performance/browsing_test.rb",
72
+ "spec/rails_app/test/test_helper.rb",
73
+ "spec/rails_app/vendor/plugins/.gitkeep",
74
+ "spec/spec_helper.rb",
75
+ "spec/templates/csv_builder_reports/complex.csv.csvbuilder",
76
+ "spec/templates/csv_builder_reports/encoding.csv.csvbuilder",
77
+ "spec/templates/csv_builder_reports/simple.csv.csvbuilder",
78
+ "spec/templates/csv_builder_reports/simple.html.erb"
79
+ ]
80
+ s.homepage = %q{http://github.com/dasil003/csv_builder}
81
+ s.licenses = ["MIT"]
82
+ s.require_paths = ["lib"]
83
+ s.rubygems_version = %q{1.5.2}
84
+ s.summary = %q{CSV template handler for Rails}
85
+ s.test_files = [
86
+ "spec/controllers/csv_builder_spec.rb",
87
+ "spec/rails_app/app/controllers/application_controller.rb",
88
+ "spec/rails_app/app/helpers/application_helper.rb",
89
+ "spec/rails_app/config/application.rb",
90
+ "spec/rails_app/config/boot.rb",
91
+ "spec/rails_app/config/environment.rb",
92
+ "spec/rails_app/config/environments/development.rb",
93
+ "spec/rails_app/config/environments/production.rb",
94
+ "spec/rails_app/config/environments/test.rb",
95
+ "spec/rails_app/config/initializers/backtrace_silencers.rb",
96
+ "spec/rails_app/config/initializers/inflections.rb",
97
+ "spec/rails_app/config/initializers/mime_types.rb",
98
+ "spec/rails_app/config/initializers/secret_token.rb",
99
+ "spec/rails_app/config/initializers/session_store.rb",
100
+ "spec/rails_app/config/routes.rb",
101
+ "spec/rails_app/db/seeds.rb",
102
+ "spec/rails_app/test/performance/browsing_test.rb",
103
+ "spec/rails_app/test/test_helper.rb",
104
+ "spec/spec_helper.rb"
105
+ ]
106
+
107
+ if s.respond_to? :specification_version then
108
+ s.specification_version = 3
109
+
110
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
111
+ else
112
+ end
113
+ else
114
+ end
115
+ end
116
+
@@ -1,66 +1,16 @@
1
- require 'fastercsv'
2
- require 'iconv'
3
-
4
- module ActionView # :nodoc:
5
- module TemplateHandlers
6
- # Template handler for csv templates
7
- #
8
- # Add rows to your CSV file in the template by pushing arrays of columns into csv
9
- #
10
- # # First row
11
- # csv << [ 'cell 1', 'cell 2' ]
12
- # # Second row
13
- # csv << [ 'another cell value', 'and another' ]
14
- # # etc...
15
- #
16
- # You can set the default filename for that a browser will use for 'save as' by
17
- # setting <tt>@filename</tt> instance variable in your controller's action method
18
- # e.g.
19
- #
20
- # @filename = 'report.csv'
21
- #
22
- # You can also set the input encoding and output encoding by setting
23
- # <tt>@input_encoding</tt> and <tt>@output_encoding</tt> instance variables.
24
- # These default to 'UTF-8' and 'LATIN1' respectively. e.g.
25
- #
26
- # @output_encoding = 'UTF-8'
27
- class CsvBuilder < TemplateHandler
28
- include Compilable
29
-
30
- def self.line_offset
31
- 9
32
- end
33
-
34
- def compile(template)
35
- <<-EOV
36
- begin
37
- output = FasterCSV.generate do |faster_csv|
38
- csv = TransliteratingFilter.new(faster_csv)
39
- #{template.source}
40
- end
1
+ # encoding: utf-8
41
2
 
42
- unless defined?(ActionMailer) && defined?(ActionMailer::Base) && controller.is_a?(ActionMailer::Base)
43
- @filename ||= "\#{controller.action_name}.csv"
44
- if controller.request.env['HTTP_USER_AGENT'] =~ /msie/i
45
- controller.response.headers['Pragma'] = 'public'
46
- controller.response.headers["Content-type"] = "text/plain"
47
- controller.response.headers['Cache-Control'] = 'no-cache, must-revalidate, post-check=0, pre-check=0'
48
- controller.response.headers['Content-Disposition'] = "attachment; filename=\#{@filename}"
49
- controller.response.headers['Expires'] = "0"
50
- else
51
- controller.response.headers["Content-Type"] ||= 'text/csv'
52
- controller.response.headers["Content-Disposition"] = "attachment; filename=\#{@filename}"
53
- controller.response.headers["Content-Transfer-Encoding"] = "binary"
54
- end
55
- end
56
-
57
- output
58
- rescue Exception => e
59
- RAILS_DEFAULT_LOGGER.warn("Exception \#{e} \#{e.message} with class \#{e.class.name} thrown when rendering CSV")
60
- raise e
61
- end
62
- EOV
63
- end
64
- end
3
+ module CsvBuilder
4
+ if RUBY_VERSION.to_f >= 1.9
5
+ require 'csv'
6
+ CSV_LIB = CSV
7
+ else
8
+ require 'fastercsv'
9
+ CSV_LIB = FasterCSV
65
10
  end
66
11
  end
12
+
13
+ require 'iconv'
14
+ require 'csv_builder/transliterating_filter'
15
+ require 'csv_builder/template_handler'
16
+ require 'csv_builder/railtie'
@@ -0,0 +1,5 @@
1
+ class CsvBuilder::Railtie < Rails::Railtie
2
+ initializer "csv_builder.register_template_handler.action_view" do
3
+ ActionView::Template.register_template_handler 'csvbuilder', CsvBuilder::TemplateHandler
4
+ end
5
+ end
@@ -0,0 +1,60 @@
1
+ # encoding: utf-8
2
+
3
+ module CsvBuilder # :nodoc:
4
+
5
+ # Template handler for csv templates
6
+ #
7
+ # Add rows to your CSV file in the template by pushing arrays of columns into csv
8
+ #
9
+ # # First row
10
+ # csv << [ 'cell 1', 'cell 2' ]
11
+ # # Second row
12
+ # csv << [ 'another cell value', 'and another' ]
13
+ # # etc...
14
+ #
15
+ # You can set the default filename for that a browser will use for 'save as' by
16
+ # setting <tt>@filename</tt> instance variable in your controller's action method
17
+ # e.g.
18
+ #
19
+ # @filename = 'report.csv'
20
+ #
21
+ # You can also set the input encoding and output encoding by setting
22
+ # <tt>@input_encoding</tt> and <tt>@output_encoding</tt> instance variables.
23
+ # These default to 'UTF-8' and 'LATIN1' respectively. e.g.
24
+ #
25
+ # @output_encoding = 'UTF-8'
26
+ class TemplateHandler < ActionView::Template::Handler
27
+ include ActionView::Template::Handlers::Compilable
28
+
29
+ def compile(template)
30
+ <<-EOV
31
+ begin
32
+ output = CsvBuilder::CSV_LIB.generate(@csv_options || {}) do |faster_csv|
33
+ csv = CsvBuilder::TransliteratingFilter.new(faster_csv, @input_encoding || 'UTF-8', @output_encoding || 'LATIN1')
34
+ #{template.source}
35
+ end
36
+
37
+ unless defined?(ActionMailer) && defined?(ActionMailer::Base) && controller.is_a?(ActionMailer::Base)
38
+ @filename ||= "\#{controller.action_name}.csv"
39
+ if controller.request.env['HTTP_USER_AGENT'] =~ /msie/i
40
+ controller.response.headers['Pragma'] = 'public'
41
+ controller.response.headers["Content-type"] = "text/plain"
42
+ controller.response.headers['Cache-Control'] = 'no-cache, must-revalidate, post-check=0, pre-check=0'
43
+ controller.response.headers['Content-Disposition'] = "attachment; filename=\#{@filename}"
44
+ controller.response.headers['Expires'] = "0"
45
+ else
46
+ controller.response.headers["Content-Type"] ||= 'text/csv'
47
+ controller.response.headers["Content-Disposition"] = "attachment; filename=\#{@filename}"
48
+ controller.response.headers["Content-Transfer-Encoding"] = "binary"
49
+ end
50
+ end
51
+
52
+ output
53
+ rescue Exception => e
54
+ Rails.logger.warn("Exception \#{e} \#{e.message} with class \#{e.class.name} thrown when rendering CSV")
55
+ raise e
56
+ end
57
+ EOV
58
+ end
59
+ end
60
+ end
@@ -1,6 +1,7 @@
1
- class TransliteratingFilter
1
+ #encoding: utf-8
2
+
3
+ class CsvBuilder::TransliteratingFilter
2
4
  # Transliterate into the required encoding if necessary
3
- # TODO: make defaults configurable
4
5
  def initialize(faster_csv, input_encoding = 'UTF-8', output_encoding = 'LATIN1')
5
6
  @faster_csv = faster_csv
6
7
 
@@ -1,3 +1,3 @@
1
1
  require 'csv_builder'
2
2
 
3
- ActionView::Template.register_template_handler 'csvbuilder', ActionView::TemplateHandlers::CsvBuilder
3
+ ActionView::Template.register_template_handler 'csvbuilder', CsvBuilder::TemplateHandler
@@ -0,0 +1,68 @@
1
+ #encoding: utf-8
2
+
3
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
4
+
5
+ class CsvBuilderReportsController < ApplicationController
6
+ before_filter {|c| c.prepend_view_path(File.expand_path(File.dirname(__FILE__) + '/../templates')) }
7
+
8
+ def simple
9
+ # dummy
10
+ respond_to do |format|
11
+ format.html
12
+ format.csv
13
+ end
14
+ end
15
+
16
+ def complex
17
+ respond_to do |format|
18
+ format.csv do
19
+ @filename = 'some_complex_filename.csv'
20
+ @csv_options = { :col_sep => "\t" }
21
+ @data = TEST_DATA
22
+ end
23
+ end
24
+ end
25
+
26
+ def encoding
27
+ respond_to do |format|
28
+ format.csv { @output_encoding = 'UTF-16' }
29
+ end
30
+ end
31
+
32
+ end
33
+ ActionController::Routing::Routes.draw { |map| map.connect ':controller/:action' }
34
+
35
+
36
+ describe CsvBuilderReportsController do
37
+ render_views
38
+
39
+ describe "Simple layout" do
40
+ it "still responds to HTML" do
41
+ get 'simple'
42
+ response.should be_success
43
+ end
44
+
45
+ it "responds to CSV" do
46
+ get 'simple', :format => 'csv'
47
+ response.should be_success
48
+ end
49
+ end
50
+
51
+ describe "Layout with options" do
52
+ it "sets output encoding correctly" do
53
+ get 'encoding', :format => 'csv'
54
+ correct_output = generate({}, [Iconv.iconv('UTF-16//TRANSLIT//IGNORE', 'UTF-8', 'ąčęėįšųūž')])
55
+ response.body.to_s.should == correct_output
56
+ end
57
+
58
+ it "passes csv options" do
59
+ get 'complex', :format => 'csv'
60
+ response.body.to_s.should == generate({ :col_sep => "\t" })
61
+ end
62
+
63
+ it "sets filename" do
64
+ get 'complex', :format => 'csv'
65
+ response.headers['Content-Disposition'].should match(/filename=some_complex_filename.csv/)
66
+ end
67
+ end
68
+ end