wisepdf 1.0.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 (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