command_wrap 0.5 → 0.5.1

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.

Potentially problematic release.


This version of command_wrap might be problematic. Click here for more details.

data/lib/command_wrap.rb CHANGED
@@ -9,9 +9,71 @@ module CommandWrap
9
9
  `#{command}`
10
10
  end
11
11
 
12
- def self.htmltopdf (source, target)
13
- command = CommandWrap::Config::Xvfb.command(File.dirname(__FILE__) + "/../bin/wkhtmltopdf --print-media-type #{source} #{target}")
12
+ INJECT_SCRIPT = "
13
+ <script type='text/javascript'>
14
+ function subst() {
15
+ var vars = {};
16
+ var params = window.location.search.substring(1).split('&');
17
+ for (var i = 0; i < params.length; i++) {
18
+ var parts = params[i].split('=');
19
+ vars[parts[0]] = unescape(parts[1]);
20
+ }
21
+ var opts = [ 'frompage', 'topage', 'page', 'webpage', 'section', 'subsection', 'subsubsection' ];
22
+ for (var i in opts) {
23
+ var elems = document.getElementsByClassName(key[i]);
24
+ for (var j = 0; j < elems.length; j++) {
25
+ elems[j].textContent = vars[key[i]];
26
+ }
27
+ }
28
+ }
29
+ window.onload = subst;
30
+ </script>
31
+ "
32
+
33
+ def self.htmltopdf (source, target, options = {})
34
+ header_html = ''
35
+ footer_html = ''
36
+
37
+ params = ''
38
+
39
+ options.each do |key, value|
40
+ key = key.to_s
41
+ if value.nil? || value == ''
42
+ params += " --#{key}"
43
+ elsif key == 'header'
44
+ header_html = CommandWrap.temp('html')
45
+ # Inject parameters
46
+ if value.index('<head>')
47
+ value = value.gsub('<head>', '<head>' + INJECT_SCRIPT)
48
+ end
49
+
50
+ File.open(header_html, 'w') do |f|
51
+ f.write value
52
+ end
53
+
54
+ params += " --header-html #{header_html}"
55
+ elsif key == 'footer'
56
+ footer_html = CommandWrap.temp('html')
57
+ # Inject parameters
58
+ if value.index('<head>')
59
+ value = value.gsub('<head>', '<head>' + INJECT_SCRIPT)
60
+ end
61
+
62
+ File.open(footer_html, 'w') do |f|
63
+ f.write value
64
+ end
65
+
66
+ params += " --footer-html #{footer_html}"
67
+ else
68
+ params += " --#{key} #{value}"
69
+ end
70
+ end
71
+
72
+ command = CommandWrap::Config::Xvfb.command(File.dirname(__FILE__) + "/../bin/wkhtmltopdf --print-media-type #{source} #{params} #{target}")
14
73
  `#{command}`
74
+
75
+ File.delete(header_html) if header_html != '' && File.exist?(header_html)
76
+ File.delete(footer_html) if footer_html != '' && File.exist?(footer_html)
15
77
  end
16
78
 
17
79
  # Sources consists of paths followed by the filename that must be used in the zip
@@ -122,4 +122,18 @@ class CommandWrapTest < Test::Unit::TestCase
122
122
  end
123
123
  end
124
124
 
125
+ def test_htmltopdf_with_commands
126
+ sleep 1
127
+ source = File.dirname(__FILE__) + "/../helpers/test.html"
128
+ target = CommandWrap.temp('pdf')
129
+ assert_nothing_raised do
130
+ footer = "<html><head><title>Footer</title></head><body><p>testing\nmultiple\nlines</p></body></html>"
131
+ header = "<html><head><title>Header</title></head><body><p>testing\nmultiple\nlines</p></body></html>"
132
+ CommandWrap.htmltopdf(source, target, :footer => footer, :header => header)
133
+ puts target
134
+ assert File.exists?(target)
135
+ File.delete(target)
136
+ end
137
+ end
138
+
125
139
  end
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: command_wrap
3
3
  version: !ruby/object:Gem::Version
4
- hash: 1
4
+ hash: 9
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 5
9
- version: "0.5"
9
+ - 1
10
+ version: 0.5.1
10
11
  platform: ruby
11
12
  authors:
12
13
  - Stefaan Colman
@@ -14,7 +15,7 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2011-03-19 00:00:00 +01:00
18
+ date: 2011-05-30 00:00:00 +02:00
18
19
  default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency