wisepdf 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. data/Gemfile +10 -0
  2. data/Gemfile.lock +102 -0
  3. data/MIT-LICENSE +20 -0
  4. data/README.md +243 -0
  5. data/Rakefile +43 -0
  6. data/VERSION +1 -0
  7. data/generators/pdf/pdf_generator.rb +7 -0
  8. data/generators/pdf/templates/configure_pdf.rb +6 -0
  9. data/lib/generators/pdf_generator.rb +9 -0
  10. data/lib/wisepdf/configuration.rb +47 -0
  11. data/lib/wisepdf/errors.rb +13 -0
  12. data/lib/wisepdf/helper.rb +59 -0
  13. data/lib/wisepdf/rails/engine.rb +10 -0
  14. data/lib/wisepdf/rails/legacy.rb +5 -0
  15. data/lib/wisepdf/rails/railtie.rb +10 -0
  16. data/lib/wisepdf/rails.rb +17 -0
  17. data/lib/wisepdf/render.rb +92 -0
  18. data/lib/wisepdf/tempfile.rb +11 -0
  19. data/lib/wisepdf/writer.rb +177 -0
  20. data/lib/wisepdf.rb +10 -0
  21. data/pdf.gemspec +66 -0
  22. data/test/application_controller_test.rb +27 -0
  23. data/test/dummy/README.rdoc +261 -0
  24. data/test/dummy/Rakefile +7 -0
  25. data/test/dummy/app/assets/javascripts/application.js +15 -0
  26. data/test/dummy/app/assets/javascripts/wisepdf.js +1 -0
  27. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  28. data/test/dummy/app/assets/stylesheets/wisepdf.css +1 -0
  29. data/test/dummy/app/controllers/application_controller.rb +3 -0
  30. data/test/dummy/app/helpers/application_helper.rb +2 -0
  31. data/test/dummy/app/mailers/.gitkeep +0 -0
  32. data/test/dummy/app/models/.gitkeep +0 -0
  33. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  34. data/test/dummy/config/application.rb +57 -0
  35. data/test/dummy/config/boot.rb +10 -0
  36. data/test/dummy/config/database.yml +3 -0
  37. data/test/dummy/config/environment.rb +5 -0
  38. data/test/dummy/config/environments/development.rb +37 -0
  39. data/test/dummy/config/environments/production.rb +67 -0
  40. data/test/dummy/config/environments/test.rb +37 -0
  41. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  42. data/test/dummy/config/initializers/inflections.rb +15 -0
  43. data/test/dummy/config/initializers/mime_types.rb +5 -0
  44. data/test/dummy/config/initializers/secret_token.rb +7 -0
  45. data/test/dummy/config/initializers/session_store.rb +8 -0
  46. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  47. data/test/dummy/config/locales/en.yml +5 -0
  48. data/test/dummy/config/routes.rb +58 -0
  49. data/test/dummy/config.ru +4 -0
  50. data/test/dummy/lib/assets/.gitkeep +0 -0
  51. data/test/dummy/log/.gitkeep +0 -0
  52. data/test/dummy/log/test.log +274 -0
  53. data/test/dummy/public/404.html +26 -0
  54. data/test/dummy/public/422.html +26 -0
  55. data/test/dummy/public/500.html +25 -0
  56. data/test/dummy/public/favicon.ico +0 -0
  57. data/test/dummy/public/javascripts/wisepdf.js +1 -0
  58. data/test/dummy/public/stylesheets/wisepdf.css +1 -0
  59. data/test/dummy/script/rails +6 -0
  60. data/test/dummy/tmp/cache/assets/CA9/590/sprockets%2F260d19b0714b39b217abfe83309458b7 +0 -0
  61. data/test/dummy/tmp/cache/assets/D13/4A0/sprockets%2Fc857f4fea90e731182fa7000ea6833e9 +0 -0
  62. data/test/dummy/tmp/cache/assets/D1C/0F0/sprockets%2F13dc05c787589dd73a669e0ad23d54e8 +0 -0
  63. data/test/dummy/tmp/cache/assets/D6E/B20/sprockets%2F2669d77f5dd55e82ba092accac21871a +0 -0
  64. data/test/dummy/tmp/cache/assets/D93/BA0/sprockets%2Fe162e2a148480db4edf41c7ca8a527cb +0 -0
  65. data/test/dummy/tmp/cache/assets/E1B/1A0/sprockets%2Fbdc3a3ccd7d2f02dddd41712ed4c8e31 +0 -0
  66. data/test/helper.rb +23 -0
  67. data/test/helper_assets_test.rb +25 -0
  68. data/test/helper_legacy_test.rb +25 -0
  69. data/test/writer_test.rb +204 -0
  70. data/wisepdf.gemspec +120 -0
  71. metadata +177 -0
@@ -0,0 +1,274 @@
1
+  (0.2ms) begin transaction
2
+  (0.1ms) rollback transaction
3
+  (0.2ms) begin transaction
4
+  (0.1ms) rollback transaction
5
+  (0.2ms) begin transaction
6
+  (0.1ms) rollback transaction
7
+  (0.2ms) begin transaction
8
+  (0.0ms) rollback transaction
9
+  (0.2ms) begin transaction
10
+  (0.0ms) rollback transaction
11
+  (0.0ms) begin transaction
12
+  (0.0ms) rollback transaction
13
+  (0.2ms) begin transaction
14
+  (0.2ms) rollback transaction
15
+  (0.1ms) begin transaction
16
+  (0.1ms) rollback transaction
17
+  (0.2ms) begin transaction
18
+  (0.1ms) rollback transaction
19
+  (0.0ms) begin transaction
20
+  (0.1ms) rollback transaction
21
+  (0.2ms) begin transaction
22
+  (0.0ms) rollback transaction
23
+  (0.2ms) begin transaction
24
+  (0.0ms) rollback transaction
25
+  (0.2ms) begin transaction
26
+  (0.1ms) rollback transaction
27
+  (0.0ms) begin transaction
28
+  (0.0ms) rollback transaction
29
+  (0.2ms) begin transaction
30
+  (0.0ms) rollback transaction
31
+  (0.0ms) begin transaction
32
+  (0.0ms) rollback transaction
33
+  (0.2ms) begin transaction
34
+  (0.0ms) rollback transaction
35
+  (0.0ms) begin transaction
36
+  (0.0ms) rollback transaction
37
+  (0.0ms) begin transaction
38
+  (0.0ms) rollback transaction
39
+  (0.2ms) begin transaction
40
+  (0.0ms) rollback transaction
41
+  (0.0ms) begin transaction
42
+  (0.0ms) rollback transaction
43
+  (0.0ms) begin transaction
44
+  (0.0ms) rollback transaction
45
+  (0.0ms) begin transaction
46
+  (0.0ms) rollback transaction
47
+  (0.2ms) begin transaction
48
+  (0.0ms) rollback transaction
49
+  (0.0ms) begin transaction
50
+  (0.0ms) rollback transaction
51
+  (0.0ms) begin transaction
52
+  (0.0ms) rollback transaction
53
+  (0.0ms) begin transaction
54
+  (0.0ms) rollback transaction
55
+  (0.2ms) begin transaction
56
+  (0.0ms) rollback transaction
57
+  (0.0ms) begin transaction
58
+  (0.0ms) rollback transaction
59
+  (0.0ms) begin transaction
60
+  (0.0ms) rollback transaction
61
+  (0.0ms) begin transaction
62
+  (0.0ms) rollback transaction
63
+  (0.2ms) begin transaction
64
+  (0.0ms) rollback transaction
65
+  (0.0ms) begin transaction
66
+  (0.0ms) rollback transaction
67
+  (0.0ms) begin transaction
68
+  (0.0ms) rollback transaction
69
+  (0.0ms) begin transaction
70
+  (0.1ms) rollback transaction
71
+  (0.2ms) begin transaction
72
+  (0.0ms) rollback transaction
73
+  (0.0ms) begin transaction
74
+  (0.0ms) rollback transaction
75
+  (0.0ms) begin transaction
76
+  (0.0ms) rollback transaction
77
+  (0.0ms) begin transaction
78
+  (0.0ms) rollback transaction
79
+  (0.2ms) begin transaction
80
+  (0.0ms) rollback transaction
81
+  (0.0ms) begin transaction
82
+  (0.0ms) rollback transaction
83
+  (0.0ms) begin transaction
84
+  (0.0ms) rollback transaction
85
+  (0.0ms) begin transaction
86
+  (0.0ms) rollback transaction
87
+  (0.2ms) begin transaction
88
+  (0.0ms) rollback transaction
89
+  (0.0ms) begin transaction
90
+  (0.0ms) rollback transaction
91
+  (0.0ms) begin transaction
92
+  (0.0ms) rollback transaction
93
+  (0.0ms) begin transaction
94
+  (0.1ms) rollback transaction
95
+  (0.2ms) begin transaction
96
+  (0.0ms) rollback transaction
97
+  (0.0ms) begin transaction
98
+  (0.0ms) rollback transaction
99
+  (0.0ms) begin transaction
100
+  (0.0ms) rollback transaction
101
+  (0.0ms) begin transaction
102
+  (0.0ms) rollback transaction
103
+  (0.2ms) begin transaction
104
+  (0.1ms) rollback transaction
105
+  (0.1ms) begin transaction
106
+  (0.0ms) rollback transaction
107
+  (0.0ms) begin transaction
108
+  (0.0ms) rollback transaction
109
+  (0.1ms) begin transaction
110
+  (0.1ms) rollback transaction
111
+  (0.2ms) begin transaction
112
+  (0.0ms) rollback transaction
113
+  (0.0ms) begin transaction
114
+  (0.0ms) rollback transaction
115
+  (0.0ms) begin transaction
116
+  (0.0ms) rollback transaction
117
+  (0.0ms) begin transaction
118
+  (0.0ms) rollback transaction
119
+  (0.2ms) begin transaction
120
+  (0.0ms) rollback transaction
121
+  (0.0ms) begin transaction
122
+  (0.0ms) rollback transaction
123
+  (0.0ms) begin transaction
124
+  (0.0ms) rollback transaction
125
+  (0.0ms) begin transaction
126
+  (0.0ms) rollback transaction
127
+  (0.2ms) begin transaction
128
+  (0.1ms) rollback transaction
129
+  (0.1ms) begin transaction
130
+  (0.1ms) rollback transaction
131
+  (0.0ms) begin transaction
132
+  (0.1ms) rollback transaction
133
+  (0.0ms) begin transaction
134
+  (0.0ms) rollback transaction
135
+  (0.0ms) begin transaction
136
+  (0.0ms) rollback transaction
137
+  (0.2ms) begin transaction
138
+  (0.0ms) rollback transaction
139
+  (0.0ms) begin transaction
140
+  (0.0ms) rollback transaction
141
+  (0.0ms) begin transaction
142
+  (0.0ms) rollback transaction
143
+  (0.0ms) begin transaction
144
+  (0.0ms) rollback transaction
145
+  (0.0ms) begin transaction
146
+  (0.0ms) rollback transaction
147
+  (0.2ms) begin transaction
148
+  (0.0ms) rollback transaction
149
+  (0.0ms) begin transaction
150
+  (0.0ms) rollback transaction
151
+  (0.0ms) begin transaction
152
+  (0.0ms) rollback transaction
153
+  (0.0ms) begin transaction
154
+  (0.0ms) rollback transaction
155
+  (0.0ms) begin transaction
156
+  (0.0ms) rollback transaction
157
+  (0.2ms) begin transaction
158
+  (0.0ms) rollback transaction
159
+  (0.0ms) begin transaction
160
+  (0.0ms) rollback transaction
161
+  (0.0ms) begin transaction
162
+  (0.0ms) rollback transaction
163
+  (0.0ms) begin transaction
164
+  (0.0ms) rollback transaction
165
+  (0.0ms) begin transaction
166
+  (0.0ms) rollback transaction
167
+  (0.0ms) begin transaction
168
+  (0.0ms) rollback transaction
169
+  (0.0ms) begin transaction
170
+  (0.0ms) rollback transaction
171
+  (0.2ms) begin transaction
172
+  (0.0ms) rollback transaction
173
+  (0.0ms) begin transaction
174
+  (0.0ms) rollback transaction
175
+  (0.0ms) begin transaction
176
+  (0.0ms) rollback transaction
177
+  (0.0ms) begin transaction
178
+  (0.0ms) rollback transaction
179
+  (0.0ms) begin transaction
180
+  (0.0ms) rollback transaction
181
+  (0.0ms) begin transaction
182
+  (0.0ms) rollback transaction
183
+  (0.0ms) begin transaction
184
+  (0.0ms) rollback transaction
185
+  (0.2ms) begin transaction
186
+  (0.0ms) rollback transaction
187
+  (0.0ms) begin transaction
188
+  (0.0ms) rollback transaction
189
+  (0.0ms) begin transaction
190
+  (0.0ms) rollback transaction
191
+  (0.0ms) begin transaction
192
+  (0.0ms) rollback transaction
193
+  (0.0ms) begin transaction
194
+  (0.0ms) rollback transaction
195
+  (0.0ms) begin transaction
196
+  (0.0ms) rollback transaction
197
+  (0.0ms) begin transaction
198
+  (0.0ms) rollback transaction
199
+  (0.0ms) begin transaction
200
+  (0.0ms) rollback transaction
201
+  (0.0ms) begin transaction
202
+  (0.0ms) rollback transaction
203
+  (0.0ms) begin transaction
204
+  (0.0ms) rollback transaction
205
+  (0.0ms) begin transaction
206
+  (0.0ms) rollback transaction
207
+  (0.2ms) begin transaction
208
+  (0.0ms) rollback transaction
209
+  (0.0ms) begin transaction
210
+  (0.0ms) rollback transaction
211
+  (0.0ms) begin transaction
212
+  (0.0ms) rollback transaction
213
+  (0.0ms) begin transaction
214
+  (0.0ms) rollback transaction
215
+  (0.0ms) begin transaction
216
+  (0.0ms) rollback transaction
217
+  (0.0ms) begin transaction
218
+  (0.0ms) rollback transaction
219
+  (0.0ms) begin transaction
220
+  (0.0ms) rollback transaction
221
+  (0.0ms) begin transaction
222
+  (0.0ms) rollback transaction
223
+  (0.0ms) begin transaction
224
+  (0.0ms) rollback transaction
225
+  (0.0ms) begin transaction
226
+  (0.0ms) rollback transaction
227
+  (0.0ms) begin transaction
228
+  (0.0ms) rollback transaction
229
+  (0.2ms) begin transaction
230
+  (0.0ms) rollback transaction
231
+  (0.0ms) begin transaction
232
+  (0.0ms) rollback transaction
233
+  (0.0ms) begin transaction
234
+  (0.0ms) rollback transaction
235
+  (0.0ms) begin transaction
236
+  (0.1ms) rollback transaction
237
+  (0.0ms) begin transaction
238
+ Compiled wisepdf.js (0ms) (pid 6915)
239
+  (0.1ms) rollback transaction
240
+  (0.0ms) begin transaction
241
+  (0.1ms) rollback transaction
242
+  (0.0ms) begin transaction
243
+ Compiled wisepdf.css (0ms) (pid 6915)
244
+  (0.1ms) rollback transaction
245
+  (0.1ms) begin transaction
246
+  (0.1ms) rollback transaction
247
+  (0.1ms) begin transaction
248
+  (0.1ms) rollback transaction
249
+  (0.0ms) begin transaction
250
+  (0.0ms) rollback transaction
251
+  (0.0ms) begin transaction
252
+  (0.0ms) rollback transaction
253
+  (0.2ms) begin transaction
254
+  (0.0ms) rollback transaction
255
+  (0.0ms) begin transaction
256
+  (0.0ms) rollback transaction
257
+  (0.0ms) begin transaction
258
+  (0.0ms) rollback transaction
259
+  (0.0ms) begin transaction
260
+  (0.1ms) rollback transaction
261
+  (0.0ms) begin transaction
262
+  (0.0ms) rollback transaction
263
+  (0.0ms) begin transaction
264
+  (0.0ms) rollback transaction
265
+  (0.0ms) begin transaction
266
+  (0.0ms) rollback transaction
267
+  (0.0ms) begin transaction
268
+  (0.0ms) rollback transaction
269
+  (0.0ms) begin transaction
270
+  (0.0ms) rollback transaction
271
+  (0.0ms) begin transaction
272
+  (0.0ms) rollback transaction
273
+  (0.0ms) begin transaction
274
+  (0.0ms) rollback transaction
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/404.html -->
21
+ <div class="dialog">
22
+ <h1>The page you were looking for doesn't exist.</h1>
23
+ <p>You may have mistyped the address or the page may have moved.</p>
24
+ </div>
25
+ </body>
26
+ </html>
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/422.html -->
21
+ <div class="dialog">
22
+ <h1>The change you wanted was rejected.</h1>
23
+ <p>Maybe you tried to change something you didn't have access to.</p>
24
+ </div>
25
+ </body>
26
+ </html>
@@ -0,0 +1,25 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/500.html -->
21
+ <div class="dialog">
22
+ <h1>We're sorry, but something went wrong.</h1>
23
+ </div>
24
+ </body>
25
+ </html>
File without changes
@@ -0,0 +1 @@
1
+ // Wisepdf javascript
@@ -0,0 +1 @@
1
+ /* Wisepdf styles */
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
5
+ require File.expand_path('../../config/boot', __FILE__)
6
+ require 'rails/commands'
data/test/helper.rb ADDED
@@ -0,0 +1,23 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+
4
+ ENV['RAILS_ENV'] = 'test'
5
+ require "dummy/config/environment"
6
+ require "rails/test_help"
7
+
8
+ begin
9
+ Bundler.setup(:default, :development)
10
+ rescue Bundler::BundlerError => e
11
+ $stderr.puts e.message
12
+ $stderr.puts "Run `bundle install` to install missing gems"
13
+ exit e.status_code
14
+ end
15
+ require 'test/unit'
16
+ require 'shoulda'
17
+
18
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
19
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
20
+ require 'wisepdf'
21
+
22
+ class Test::Unit::TestCase
23
+ end
@@ -0,0 +1,25 @@
1
+ require 'helper'
2
+
3
+ class AssetsHelperTest < ActionView::TestCase
4
+ include Wisepdf::Helper::Assets
5
+
6
+ context "wisepdf_stylesheet_tag" do
7
+ should 'include stylesheet if no extension is given' do
8
+ assert_match wisepdf_stylesheet_tag('wisepdf').strip, /Wisepdf styles/
9
+ end
10
+
11
+ should 'include stylesheet if .css extension is given' do
12
+ assert_match wisepdf_stylesheet_tag('wisepdf.css').strip, /Wisepdf styles/
13
+ end
14
+ end
15
+
16
+ context "wisepdf_javascript_tag" do
17
+ should 'include javascript if no extension is given' do
18
+ assert_match wisepdf_javascript_tag('wisepdf').strip, /Wisepdf javascript/
19
+ end
20
+
21
+ should 'include javascript if .js extension is given' do
22
+ assert_match wisepdf_javascript_tag('wisepdf.js').strip, /Wisepdf javascript/
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,25 @@
1
+ require 'helper'
2
+
3
+ class LegacyHelperTest < ActionView::TestCase
4
+ include Wisepdf::Helper::Legacy
5
+
6
+ context "wisepdf_stylesheet_tag" do
7
+ should 'include stylesheet if no extension is given' do
8
+ assert_match wisepdf_stylesheet_tag('wisepdf').strip, /Wisepdf styles/
9
+ end
10
+
11
+ should 'include stylesheet if .css extension is given' do
12
+ assert_match wisepdf_stylesheet_tag('wisepdf.css').strip, /Wisepdf styles/
13
+ end
14
+ end
15
+
16
+ context "wisepdf_javascript_tag" do
17
+ should 'include javascript if no extension is given' do
18
+ assert_match wisepdf_javascript_tag('wisepdf').strip, /Wisepdf javascript/
19
+ end
20
+
21
+ should 'include javascript if .js extension is given' do
22
+ assert_match wisepdf_javascript_tag('wisepdf.js').strip, /Wisepdf javascript/
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,204 @@
1
+ require 'helper'
2
+
3
+ HTML_DOCUMENT = "<html><body>Hello World</body></html>"
4
+
5
+ # Provide a public accessor to the normally-private parse_options function
6
+ class Wisepdf::Writer
7
+ public :parse_options
8
+ end
9
+
10
+ class WriterTest < Test::Unit::TestCase
11
+ context "Default configuration" do
12
+ setup do
13
+ Wisepdf::Configuration.reset!
14
+ end
15
+
16
+ should 'read default configuration' do
17
+ assert_equal 'pdf.html', Wisepdf::Configuration.options[:layout]
18
+ assert_equal false, Wisepdf::Configuration.options[:use_xserver]
19
+ end
20
+
21
+ if RbConfig::CONFIG['target_os'] != 'mingw32'
22
+ should 'try to find wkhtmltopdf if not on windows' do
23
+ path = (defined?(Bundler) ? `bundle exec which wkhtmltopdf` : `which wkhtmltopdf`).chomp
24
+
25
+ assert_equal path, Wisepdf::Configuration.wkhtmltopdf
26
+ end
27
+ end
28
+ end
29
+
30
+ context "Configuration" do
31
+ setup do
32
+ Wisepdf::Configuration.reset!
33
+ end
34
+
35
+ should 'accept and override default configuration' do
36
+ Wisepdf::Configuration.configure do |config|
37
+ config.wkhtmltopdf = '/path/to/wkhtmltopdf'
38
+ config.options = {
39
+ :layout => "layout.html",
40
+ :use_xserver => true,
41
+ :footer => {
42
+ :right => "#{Date.today.year}",
43
+ :font_size => 8,
44
+ :spacing => 8
45
+ },
46
+ :margin => {
47
+ :bottom => 15
48
+ }
49
+ }
50
+ end
51
+ assert_equal '/path/to/wkhtmltopdf', Wisepdf::Configuration.wkhtmltopdf
52
+
53
+ assert_equal 'layout.html', Wisepdf::Configuration.options[:layout]
54
+ assert_equal true, Wisepdf::Configuration.options[:use_xserver]
55
+ assert_equal "#{Date.today.year}", Wisepdf::Configuration.options[:footer][:right]
56
+ assert_equal 8, Wisepdf::Configuration.options[:footer][:font_size]
57
+ assert_equal 8, Wisepdf::Configuration.options[:footer][:spacing]
58
+ assert_equal 15, Wisepdf::Configuration.options[:margin][:bottom]
59
+ end
60
+ end
61
+
62
+ context "Option parsing" do
63
+ setup do
64
+ Wisepdf::Configuration.reset!
65
+ end
66
+
67
+ should "parse header and footer options" do
68
+ wp = Wisepdf::Writer.new
69
+
70
+ [:header, :footer].each do |hf|
71
+ [:center, :font_name, :left, :right].each do |o|
72
+ assert_equal "--#{hf.to_s}-#{o.to_s.gsub('_', '-')} \"header_footer\"",
73
+ wp.parse_options(hf => {o => "header_footer"}).strip
74
+ end
75
+
76
+ [:font_size, :spacing].each do |o|
77
+ assert_equal "--#{hf.to_s}-#{o.to_s.gsub('_', '-')} 12",
78
+ wp.parse_options(hf => {o => "12"}).strip
79
+ end
80
+
81
+ assert_equal "--#{hf.to_s}-line",
82
+ wp.parse_options(hf => {:line => true}).strip
83
+ assert_equal "--#{hf.to_s}-html \"http://www.abc.com\"",
84
+ wp.parse_options(hf => {:html => {:url => 'http://www.abc.com'}}).strip
85
+ end
86
+ end
87
+
88
+ should "parse toc options" do
89
+ wp = Wisepdf::Writer.new
90
+
91
+ [:level_indentation, :header_text].each do |o|
92
+ assert_equal "toc --toc-#{o.to_s.gsub('_', '-')} \"toc\"",
93
+ wp.parse_options(:toc => {o => "toc"}).strip
94
+ end
95
+
96
+ [:text_size_shrink].each do |o|
97
+ assert_equal "toc --toc-#{o.to_s.gsub('_', '-')} 5",
98
+ wp.parse_options(:toc => {o => 5}).strip
99
+ end
100
+
101
+ [:disable_toc_links, :disable_dotted_lines].each do |o|
102
+ assert_equal "toc --#{o.to_s.gsub('_', '-')}",
103
+ wp.parse_options(:toc => {o => true}).strip
104
+ end
105
+ end
106
+
107
+ should "parse outline options" do
108
+ wp = Wisepdf::Writer.new
109
+
110
+ assert_equal "--outline", wp.parse_options(:outline => {:outline => true}).strip
111
+ assert_equal "--outline-depth 5", wp.parse_options(:outline => {:outline_depth => 5}).strip
112
+ end
113
+
114
+ should "parse margins options" do
115
+ wp = Wisepdf::Writer.new
116
+
117
+ [:top, :bottom, :left, :right].each do |o|
118
+ assert_equal "--margin-#{o.to_s} 12", wp.parse_options(:margin => {o => "12"}).strip
119
+ end
120
+ end
121
+
122
+ should "parse other options" do
123
+ wp = Wisepdf::Writer.new
124
+
125
+ [ :orientation, :page_size, :proxy, :username, :password, :cover, :dpi,
126
+ :encoding, :user_style_sheet
127
+ ].each do |o|
128
+ assert_equal "--#{o.to_s.gsub('_', '-')} \"opts\"", wp.parse_options(o => "opts").strip
129
+ end
130
+
131
+ [:cookie, :post].each do |o|
132
+ assert_equal "--#{o.to_s.gsub('_', '-')} name value", wp.parse_options(o => "name value").strip
133
+
134
+ nv_formatter = ->(number){ "--#{o.to_s.gsub('_', '-')} par#{number} val#{number}" }
135
+ assert_equal "#{nv_formatter.call(1)} #{nv_formatter.call(2)}", wp.parse_options(o => ['par1 val1', 'par2 val2']).strip
136
+ end
137
+
138
+ [:redirect_delay, :zoom, :page_offset].each do |o|
139
+ assert_equal "--#{o.to_s.gsub('_', '-')} 5", wp.parse_options(o => 5).strip
140
+ end
141
+
142
+ [ :book, :default_header, :disable_javascript, :greyscale, :lowquality,
143
+ :enable_plugins, :disable_internal_links, :disable_external_links,
144
+ :print_media_type, :disable_smart_shrinking, :use_xserver, :no_background
145
+ ].each do |o|
146
+ assert_equal "--#{o.to_s.gsub('_', '-')}", wp.parse_options(o => true).strip
147
+ end
148
+ end
149
+
150
+ end
151
+
152
+ context "PDF generation" do
153
+ should "generate PDF from html document" do
154
+ writer = Wisepdf::Writer.new
155
+ pdf = writer.to_pdf(HTML_DOCUMENT)
156
+ assert pdf.start_with?("%PDF-1.4")
157
+ assert pdf.rstrip.end_with?("%%EOF")
158
+ assert pdf.length > 100
159
+ end
160
+
161
+ should "raise exception when no path to wkhtmltopdf" do
162
+ assert_raise Wisepdf::NoExecutableError do
163
+ writer = Wisepdf::Writer.new(" ")
164
+ writer.to_pdf(HTML_DOCUMENT)
165
+ end
166
+ end
167
+
168
+ should "raise exception when wkhtmltopdf path is wrong" do
169
+ assert_raise Wisepdf::NoExecutableError do
170
+ writer = Wisepdf::Writer.new("/i/do/not/exist/notwkhtmltopdf")
171
+ writer.to_pdf(HTML_DOCUMENT)
172
+ end
173
+ end
174
+
175
+ should "raise exception when wkhtmltopdf is not executable" do
176
+ begin
177
+ tmp = Tempfile.new('wkhtmltopdf')
178
+ fp = tmp.path
179
+ File.chmod 0000, fp
180
+ assert_raise Wisepdf::WriteError do
181
+ writer = Wisepdf::Writer.new(fp)
182
+ writer.to_pdf(HTML_DOCUMENT)
183
+ end
184
+ ensure
185
+ tmp.delete
186
+ end
187
+ end
188
+
189
+
190
+ should "raise exception when pdf generation fails" do
191
+ begin
192
+ tmp = Tempfile.new('wkhtmltopdf')
193
+ fp = tmp.path
194
+ File.chmod 0777, fp
195
+ assert_raise Wisepdf::WriteError do
196
+ writer = Wisepdf::Writer.new(fp)
197
+ writer.to_pdf(HTML_DOCUMENT)
198
+ end
199
+ ensure
200
+ tmp.delete
201
+ end
202
+ end
203
+ end
204
+ end