workbook_rails 0.1.0

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.
Files changed (83) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +5 -0
  3. data/Gemfile +21 -0
  4. data/Gemfile.lock +207 -0
  5. data/MIT-LICENSE +20 -0
  6. data/README.md +216 -0
  7. data/Rakefile +29 -0
  8. data/lib/tasks/workbook_rails_tasks.rake +4 -0
  9. data/lib/workbook_rails.rb +5 -0
  10. data/lib/workbook_rails/action_controller.rb +51 -0
  11. data/lib/workbook_rails/engine.rb +25 -0
  12. data/lib/workbook_rails/template_handler.rb +23 -0
  13. data/lib/workbook_rails/version.rb +3 -0
  14. data/spec/ci.rb +3 -0
  15. data/spec/dummy/Rakefile +6 -0
  16. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  17. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  18. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  19. data/spec/dummy/app/controllers/home_controller.rb +60 -0
  20. data/spec/dummy/app/controllers/likes_controller.rb +18 -0
  21. data/spec/dummy/app/controllers/users_controller.rb +16 -0
  22. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  23. data/spec/dummy/app/mailers/notifier.rb +14 -0
  24. data/spec/dummy/app/models/like.rb +3 -0
  25. data/spec/dummy/app/models/user.rb +8 -0
  26. data/spec/dummy/app/views/home/_cover_sheet.xlsx.wb +2 -0
  27. data/spec/dummy/app/views/home/generic.wb +5 -0
  28. data/spec/dummy/app/views/home/index.html.erb +4 -0
  29. data/spec/dummy/app/views/home/index.xls.wb +5 -0
  30. data/spec/dummy/app/views/home/index.xlsx.wb +5 -0
  31. data/spec/dummy/app/views/home/only_html.html.erb +1 -0
  32. data/spec/dummy/app/views/home/useheader.xlsx.wb +5 -0
  33. data/spec/dummy/app/views/home/withpartial.xlsx.wb +6 -0
  34. data/spec/dummy/app/views/layouts/application.html.erb +12 -0
  35. data/spec/dummy/app/views/likes/index.html.erb +17 -0
  36. data/spec/dummy/app/views/likes/index.xlsx.wb +5 -0
  37. data/spec/dummy/app/views/notifier/instructions.html.erb +14 -0
  38. data/spec/dummy/app/views/notifier/instructions.txt.erb +6 -0
  39. data/spec/dummy/app/views/users/index.html.erb +23 -0
  40. data/spec/dummy/app/views/users/mailers/instructions.xlsx.wb +3 -0
  41. data/spec/dummy/app/views/users/respond_with.xlsx.wb +5 -0
  42. data/spec/dummy/bin/bundle +3 -0
  43. data/spec/dummy/bin/rails +4 -0
  44. data/spec/dummy/bin/rake +4 -0
  45. data/spec/dummy/config.ru +4 -0
  46. data/spec/dummy/config/application.rb +34 -0
  47. data/spec/dummy/config/boot.rb +5 -0
  48. data/spec/dummy/config/database.yml +25 -0
  49. data/spec/dummy/config/environment.rb +5 -0
  50. data/spec/dummy/config/environments/development.rb +37 -0
  51. data/spec/dummy/config/environments/production.rb +83 -0
  52. data/spec/dummy/config/environments/test.rb +44 -0
  53. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  54. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
  55. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  56. data/spec/dummy/config/initializers/inflections.rb +16 -0
  57. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  58. data/spec/dummy/config/initializers/secret_token.rb +2 -0
  59. data/spec/dummy/config/initializers/session_store.rb +3 -0
  60. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  61. data/spec/dummy/config/locales/en.yml +23 -0
  62. data/spec/dummy/config/routes.rb +17 -0
  63. data/spec/dummy/config/secrets.yml +22 -0
  64. data/spec/dummy/db/migrate/20120717192452_create_users.rb +12 -0
  65. data/spec/dummy/db/migrate/20121206210955_create_likes.rb +10 -0
  66. data/spec/dummy/db/schema.rb +32 -0
  67. data/spec/dummy/db/test.sqlite3 +0 -0
  68. data/spec/dummy/log/test.log +8575 -0
  69. data/spec/dummy/public/404.html +67 -0
  70. data/spec/dummy/public/422.html +67 -0
  71. data/spec/dummy/public/500.html +66 -0
  72. data/spec/dummy/public/favicon.ico +0 -0
  73. data/spec/spec_helper.rb +29 -0
  74. data/spec/template_handler_spec.rb +35 -0
  75. data/spec/test_3.2.sh +4 -0
  76. data/spec/test_4.0.sh +4 -0
  77. data/spec/test_4.1.sh +4 -0
  78. data/spec/test_4.2.sh +4 -0
  79. data/spec/test_all_rails.sh +4 -0
  80. data/spec/workbook_mailer_spec.rb +16 -0
  81. data/spec/workbook_renderer_spec.rb +21 -0
  82. data/spec/workbook_request_spec.rb +168 -0
  83. metadata +365 -0
@@ -0,0 +1,67 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ body {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body>
58
+ <!-- This file lives in public/404.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>The page you were looking for doesn't exist.</h1>
62
+ <p>You may have mistyped the address or the page may have moved.</p>
63
+ </div>
64
+ <p>If you are the application owner check the logs for more information.</p>
65
+ </div>
66
+ </body>
67
+ </html>
@@ -0,0 +1,67 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ body {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body>
58
+ <!-- This file lives in public/422.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>The change you wanted was rejected.</h1>
62
+ <p>Maybe you tried to change something you didn't have access to.</p>
63
+ </div>
64
+ <p>If you are the application owner check the logs for more information.</p>
65
+ </div>
66
+ </body>
67
+ </html>
@@ -0,0 +1,66 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ body {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body>
58
+ <!-- This file lives in public/500.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>We're sorry, but something went wrong.</h1>
62
+ </div>
63
+ <p>If you are the application owner check the logs for more information.</p>
64
+ </div>
65
+ </body>
66
+ </html>
File without changes
@@ -0,0 +1,29 @@
1
+ require 'coveralls'
2
+ Coveralls.wear!
3
+
4
+ # This file is copied to spec/ when you run 'rails generate rspec:install'
5
+ ENV["RAILS_ENV"] = 'test'
6
+ require File.expand_path("../dummy/config/environment", __FILE__)
7
+ require 'bundler'
8
+ require 'bundler/setup'
9
+ require 'rspec/rails'
10
+ require 'capybara/rspec'
11
+ require 'workbook_rails'
12
+ require 'pry'
13
+
14
+ Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
15
+
16
+ RSpec.configure do |config|
17
+ config.color = true
18
+ config.formatter = 'documentation'
19
+ config.use_transactional_fixtures = false
20
+ config.infer_base_class_for_anonymous_controllers = false
21
+ config.order = "random"
22
+ end
23
+
24
+ module ::RSpec::Core
25
+ class ExampleGroup
26
+ include Capybara::DSL
27
+ include Capybara::RSpecMatchers
28
+ end
29
+ end
@@ -0,0 +1,35 @@
1
+ require'spec_helper'
2
+ describe 'Workbook template handler' do
3
+
4
+ TH = WorkbookRails::TemplateHandler
5
+ VT = Struct.new(:source)
6
+
7
+ let( :handler ) { TH.new }
8
+
9
+ let( :template ) do
10
+ VT.new("workbook.sheet.table = Workbook::Table.new([['one', 'two', 'three'],['a', 'b', 'c']])")
11
+ end
12
+
13
+ context "Rails #{Rails.version}" do
14
+ # for testing if the author is set
15
+ # before do
16
+ # Rails.stub_chain(:application, :config, :axlsx_author).and_return( 'Elmer Fudd' )
17
+ # end
18
+
19
+ it "has xlsx format" do
20
+ expect(handler.default_format).to eq(:xlsx)
21
+ end
22
+
23
+ it "compiles to an excel spreadsheet" do
24
+ workbook, wb = nil
25
+ lookup_context = double(rendered_format: :xlsx)
26
+ eval TH.call(template)
27
+ workbook.write_to_xlsx('/tmp/wb_temp.xlsx')
28
+ expect{ wb = Workbook::Book.open('/tmp/wb_temp.xlsx') }.to_not raise_error
29
+ expect(wb.sheet.table[1][2]).to eq('c')
30
+ end
31
+
32
+ #TODO:
33
+ # Test if author field is set - does roo parse that?
34
+ end
35
+ end
@@ -0,0 +1,4 @@
1
+ export RAILS_ENV=test
2
+ export BUNDLE_GEMFILE=$PWD/gemfiles/Gemfile-3.2
3
+ rm -f spec/dummy/db/test.sqlite3
4
+ spec/ci.rb
@@ -0,0 +1,4 @@
1
+ export RAILS_ENV=test
2
+ export BUNDLE_GEMFILE=$PWD/gemfiles/Gemfile-4.0
3
+ rm -f spec/dummy/db/test.sqlite3
4
+ spec/ci.rb
@@ -0,0 +1,4 @@
1
+ export RAILS_ENV=test
2
+ export BUNDLE_GEMFILE=$PWD/gemfiles/Gemfile-4.1
3
+ rm -f spec/dummy/db/test.sqlite3
4
+ spec/ci.rb
@@ -0,0 +1,4 @@
1
+ export RAILS_ENV=test
2
+ export BUNDLE_GEMFILE=$PWD/Gemfile
3
+ rm -f spec/dummy/db/test.sqlite3
4
+ spec/ci.rb
@@ -0,0 +1,4 @@
1
+ spec/test_3.2.sh
2
+ spec/test_4.0.sh
3
+ spec/test_4.1.sh
4
+ spec/test_4.2.sh
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Mailer", type: :request do
4
+ before :each do
5
+ @user = User.create name: 'Elmer', last_name: 'Fudd', address: '1234 Somewhere, Over NY 11111', email: 'elmer@fudd.com'
6
+ end
7
+
8
+ it "attaches an xlsx file" do
9
+ visit "/users/#{@user.id}/send_instructions"
10
+ last_email = ActionMailer::Base.deliveries.last
11
+ expect(last_email.to).to eq([@user.email])
12
+ expect(last_email.attachments.first).to be
13
+ expect(last_email.attachments.first.body.to_s).not_to be_empty
14
+ expect(last_email.attachments.first.content_type).to eq(Mime::XLSX.to_s + (Rails.version < '4.0' ? '; charset=UTF-8' : ''))
15
+ end
16
+ end
@@ -0,0 +1,21 @@
1
+ require'spec_helper'
2
+ describe 'Workbook renderer' do
3
+
4
+ it "is registered" do
5
+ ActionController::Renderers::RENDERERS.include?(:xlsx)
6
+ ActionController::Renderers::RENDERERS.include?(:xls)
7
+ end
8
+
9
+ it "has xlsx mime type" do
10
+ expect(Mime::XLSX).to be
11
+ expect(Mime::XLSX.to_sym).to eq(:xlsx)
12
+ expect(Mime::XLSX.to_s).to eq("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
13
+ end
14
+
15
+ it "has xls mime type" do
16
+ expect(Mime::XLS).to be
17
+ expect(Mime::XLS.to_sym).to eq(:xls)
18
+ expect(Mime::XLS.to_s).to eq("application/vnd.ms-excel")
19
+ end
20
+
21
+ end
@@ -0,0 +1,168 @@
1
+ require 'spec_helper'
2
+ describe 'Workbook request', :type => :request do
3
+
4
+ it "has a working dummy app" do
5
+ @user1 = User.create name: 'Elmer', last_name: 'Fudd', address: '1234 Somewhere, Over NY 11111', email: 'elmer@fudd.com'
6
+ visit '/'
7
+ expect(page).to have_content("Hey, you")
8
+ end
9
+
10
+ it "downloads an excel file from default respond_to" do
11
+ visit '/home.xlsx'
12
+
13
+ expect(page.response_headers['Content-Type']).to eq(Mime::XLSX.to_s + "; charset=utf-8")
14
+ wb = write_and_open_workbook(page)
15
+ expect(wb.sheet.table[1][0]).to eq('Untie!')
16
+ end
17
+
18
+ it "downloads an xls file from default respond_to" do
19
+ visit '/home.xls'
20
+
21
+ expect(page.response_headers['Content-Type']).to eq(Mime::XLS.to_s + "; charset=utf-8")
22
+ wb = write_and_open_workbook(page, 'xls')
23
+ expect(wb.sheet.table[1][0]).to eq('Untie!')
24
+ end
25
+
26
+ it "downloads an excel file from params format" do
27
+ visit '/home/generic.xlsx'
28
+
29
+ expect(page.response_headers['Content-Type']).to eq(Mime::XLSX.to_s + "; charset=utf-8")
30
+ wb = write_and_open_workbook(page)
31
+ expect(wb.sheet.table[1][0]).to eq('Untie!')
32
+ end
33
+
34
+ it "downloads an xls file from params format" do
35
+ visit '/home/generic.xls'
36
+
37
+ expect(page.response_headers['Content-Type']).to eq(Mime::XLS.to_s + "; charset=utf-8")
38
+ wb = write_and_open_workbook(page, 'xls')
39
+ expect(wb.sheet.table[1][0]).to eq('Untie!')
40
+ end
41
+
42
+ it "downloads an excel file from respond_to while specifying filename" do
43
+ visit '/useheader.xlsx'
44
+
45
+ expect(page.response_headers['Content-Type']).to eq(Mime::XLSX.to_s)
46
+ expect(page.response_headers['Content-Disposition']).to include("filename=\"filename_test.xlsx\"")
47
+
48
+ wb = write_and_open_workbook(page)
49
+ expect(wb.sheet.table[1][0]).to eq('Untie!')
50
+ end
51
+
52
+ it "downloads an excel file from respond_to while specifying filename in direct format" do
53
+ visit '/useheader.xlsx?set_direct=true'
54
+
55
+ expect(page.response_headers['Content-Type']).to eq(Mime::XLSX.to_s + "; charset=utf-8")
56
+ expect(page.response_headers['Content-Disposition']).to include("filename=\"filename_test.xlsx\"")
57
+
58
+ wb = write_and_open_workbook(page)
59
+ expect(wb.sheet.table[1][0]).to eq('Untie!')
60
+ end
61
+
62
+ it "downloads an excel file from render statement with filename" do
63
+ visit '/another.xlsx'
64
+
65
+ expect(page.response_headers['Content-Type']).to eq(Mime::XLSX)
66
+ expect(page.response_headers['Content-Disposition']).to include("filename=\"filename_test.xlsx\"")
67
+
68
+ wb = write_and_open_workbook(page)
69
+ expect(wb.sheet.table[1][0]).to eq('Untie!')
70
+ end
71
+
72
+ it "downloads an excel file with partial" do
73
+ visit '/withpartial.xlsx'
74
+ expect(page.response_headers['Content-Type']).to eq(Mime::XLSX.to_s + "; charset=utf-8")
75
+ wb = write_and_open_workbook(page)
76
+ expect(wb.sheet.table[0][0]).to eq('Cover')
77
+ expect(wb[1].table[1][0]).to eq("Untie!")
78
+ end
79
+
80
+ it "downloads an excel from render with file path" do
81
+ visit '/render_file_path.xlsx'
82
+ expect(page.response_headers['Content-Type']).to eq(Mime::XLSX.to_s)
83
+ wb = write_and_open_workbook(page)
84
+ expect(wb.sheet.table[1][0]).to eq('User!')
85
+ end
86
+
87
+ it "handles nested resources" do
88
+ User.destroy_all
89
+ @user = User.create name: 'Bugs', last_name: 'Bunny', address: '1234 Left Turn, Albuquerque NM 22222', email: 'bugs@bunny.com'
90
+ @user.likes.create(:name => 'Carrots')
91
+ @user.likes.create(:name => 'Celery')
92
+ visit "/users/#{@user.id}/likes.xlsx"
93
+ expect(page.response_headers['Content-Type']).to eq(Mime::XLSX.to_s + "; charset=utf-8")
94
+ wb = write_and_open_workbook(page)
95
+ expect(wb.sheet.table[0][0]).to eq('Bugs')
96
+ expect(wb.sheet.table[1][0]).to eq('Carrots')
97
+ expect(wb.sheet.table[2][0]).to eq('Celery')
98
+ end
99
+
100
+ it "handles reference to absolute paths" do
101
+ User.destroy_all
102
+ @user = User.create name: 'Bugs', last_name: 'Bunny', address: '1234 Left Turn, Albuquerque NM 22222', email: 'bugs@bunny.com'
103
+ visit "/users/#{@user.id}/render_elsewhere.xlsx"
104
+ expect(page.response_headers['Content-Type']).to eq(Mime::XLSX.to_s)
105
+ wb = write_and_open_workbook(page)
106
+ expect(wb.sheet.table[1][0]).to eq('User!')
107
+
108
+ [[1,false], [2,false], [3,true], [4,true], [5,false]].reverse.each do |s|
109
+ visit "/home/render_elsewhere.xlsx?type=#{s[0]}"
110
+ expect(page.response_headers['Content-Type']).to eq(Mime::XLSX.to_s +
111
+ (s[1] ? "; charset=utf-8" : ''))
112
+ wb = write_and_open_workbook(page)
113
+ expect(wb.sheet.table[1][0]).to eq(s[0] == 5 ? 'Untie!' : 'User!')
114
+ end
115
+ end
116
+
117
+ it "uses respond_with" do
118
+ User.destroy_all
119
+ @user = User.create name: 'Responder', last_name: 'Bunny', address: '1234 Right Turn, Albuquerque NM 22222', email: 'bugs@bunny.com'
120
+ expect { visit "/users/#{@user.id}.xlsx" }.to_not raise_error
121
+ wb = write_and_open_workbook(page)
122
+ expect(wb.sheet.table[1][0]).to eq('User!')
123
+ end
124
+
125
+ unless Rails.version < '3.2'
126
+ it "handles missing format with render :xlsx" do
127
+ visit '/another'
128
+
129
+ expect(page.response_headers['Content-Type']).to eq(Mime::XLSX)
130
+ expect(page.response_headers['Content-Disposition']).to include("filename=\"filename_test.xlsx\"")
131
+
132
+ wb = write_and_open_workbook(page)
133
+ expect(wb.sheet.table[1][0]).to eq('Untie!')
134
+ end
135
+ end
136
+
137
+ unless Rails.version < '4.0'
138
+ Capybara.register_driver :mime_all do |app|
139
+ Capybara::RackTest::Driver.new(app, headers: { 'HTTP_ACCEPT' => '*/*' })
140
+ end
141
+
142
+ it "mime all with render :xlsx and then :html" do
143
+ ActionView::Base.default_formats.delete :xlsx # see notes
144
+ Capybara.current_driver = :mime_all
145
+ visit '/another'
146
+ expect{ visit '/home/only_html' }.to_not raise_error
147
+
148
+ # Output:
149
+ # default formats before : [:html, :text, :js, :css, :ics, :csv, :vcf, :png, :jpeg, :gif, :bmp, :tiff, :mpeg, :xml, :rss, :atom, :yaml, :multipart_form, :url_encoded_form, :json, :pdf, :zip, :xlsx]
150
+ # default formats in my project : [:html, :text, :js, :css, :ics, :csv, :vcf, :png, :jpeg, :gif, :bmp, :tiff, :mpeg, :xml, :rss, :atom, :yaml, :multipart_form, :url_encoded_form, :json, :pdf, :zip]
151
+ # default formats after render xlsx with */* : [:xlsx, :text, :js, :css, :ics, :csv, :vcf, :png, :jpeg, :gif, :bmp, :tiff, :mpeg, :xml, :rss, :atom, :yaml, :multipart_form, :url_encoded_form, :json, :pdf, :zip]
152
+
153
+ # Failure/Error: visit '/home/only_html'
154
+ # ActionView::MissingTemplate:
155
+ # Missing template home/only_html, application/only_html with {:locale=>[:en], :formats=>[:xlsx, :text, :js, :css, :ics, :csv, :vcf, :png, :jpeg, :gif, :bmp, :tiff, :mpeg, :xml, :rss, :atom, :yaml, :multipart_form, :url_encoded_form, :json, :pdf, :zip], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :axlsx]}.
156
+ end
157
+ end
158
+
159
+ protected
160
+ def write_and_open_workbook(page, extension = 'xlsx')
161
+ file = "/tmp/workbook_temp.#{extension}"
162
+ File.open(file, 'wb') {|f| f.write(page.source) }
163
+ wb = nil
164
+ expect{ wb = Workbook::Book.open(file) }.to_not raise_error
165
+ File.unlink file
166
+ wb
167
+ end
168
+ end