shrimp 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +9 -0
- data/README.md +17 -0
- data/lib/shrimp/config.json +7 -0
- data/lib/shrimp/configuration.rb +9 -8
- data/lib/shrimp/middleware.rb +1 -1
- data/lib/shrimp/phantom.rb +11 -10
- data/lib/shrimp/rasterize.js +3 -2
- data/lib/shrimp/version.rb +1 -1
- data/shrimp.gemspec +1 -0
- data/spec/shrimp/middleware_spec.rb +1 -2
- metadata +54 -11
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
[![Build Status](https://travis-ci.org/adeven/shrimp.png?branch=master)](https://travis-ci.org/adeven/shrimp)
|
3
3
|
Creates PDFs from URLs using phantomjs
|
4
4
|
|
5
|
+
Read our [blogpost](http://big-elephants.com/2012-12/pdf-rendering-with-phantomjs/) about how it works.
|
6
|
+
|
5
7
|
## Installation
|
6
8
|
|
7
9
|
Add this line to your application's Gemfile:
|
@@ -61,9 +63,24 @@ Shrimp.configure do |config|
|
|
61
63
|
# the timeout for the phantomjs rendering process in ms
|
62
64
|
# this needs always to be higher than rendering_time
|
63
65
|
# config.rendering_timeout = 90000
|
66
|
+
|
67
|
+
# the path to a json configuration file for command-line options
|
68
|
+
# config.command_config_file = "#{Rails.root.join('config', 'shrimp', 'config.json')}"
|
64
69
|
end
|
65
70
|
```
|
66
71
|
|
72
|
+
### Command Configuration
|
73
|
+
|
74
|
+
```
|
75
|
+
{
|
76
|
+
"diskCache": false,
|
77
|
+
"ignoreSslErrors": false,
|
78
|
+
"loadImages": true,
|
79
|
+
"outputEncoding": "utf8",
|
80
|
+
"webSecurity": true
|
81
|
+
}
|
82
|
+
```
|
83
|
+
|
67
84
|
## Middleware
|
68
85
|
|
69
86
|
Shrimp comes with a middleware that allows users to get a PDF view of any page on your site by appending .pdf to the URL.
|
data/lib/shrimp/configuration.rb
CHANGED
@@ -4,7 +4,7 @@ module Shrimp
|
|
4
4
|
attr_accessor :default_options
|
5
5
|
attr_writer :phantomjs
|
6
6
|
|
7
|
-
[:format, :margin, :zoom, :orientation, :tmpdir, :rendering_timeout, :rendering_time].each do |m|
|
7
|
+
[:format, :margin, :zoom, :orientation, :tmpdir, :rendering_timeout, :rendering_time, :command_config_file].each do |m|
|
8
8
|
define_method("#{m}=") do |val|
|
9
9
|
@default_options[m]=val
|
10
10
|
end
|
@@ -12,13 +12,14 @@ module Shrimp
|
|
12
12
|
|
13
13
|
def initialize
|
14
14
|
@default_options = {
|
15
|
-
:format
|
16
|
-
:margin
|
17
|
-
:zoom
|
18
|
-
:orientation
|
19
|
-
:tmpdir
|
20
|
-
:rendering_timeout
|
21
|
-
:rendering_time
|
15
|
+
:format => 'A4',
|
16
|
+
:margin => '1cm',
|
17
|
+
:zoom => 1,
|
18
|
+
:orientation => 'portrait',
|
19
|
+
:tmpdir => Dir.tmpdir,
|
20
|
+
:rendering_timeout => 90000,
|
21
|
+
:rendering_time => 1000,
|
22
|
+
:command_config_file => File.expand_path('../config.json', __FILE__)
|
22
23
|
}
|
23
24
|
end
|
24
25
|
|
data/lib/shrimp/middleware.rb
CHANGED
data/lib/shrimp/phantom.rb
CHANGED
@@ -56,19 +56,20 @@ module Shrimp
|
|
56
56
|
format, zoom, margin, orientation = options[:format], options[:zoom], options[:margin], options[:orientation]
|
57
57
|
rendering_time, timeout = options[:rendering_time], options[:rendering_timeout]
|
58
58
|
@outfile ||= "#{options[:tmpdir]}/#{Digest::MD5.hexdigest((Time.now.to_i + rand(9001)).to_s)}.pdf"
|
59
|
-
|
60
|
-
[Shrimp.configuration.phantomjs, SCRIPT_FILE, @source.to_s, @outfile, format, zoom, margin, orientation, cookie_file, rendering_time, timeout].join(" ")
|
59
|
+
command_config_file = "--config=#{options[:command_config_file]}"
|
60
|
+
[Shrimp.configuration.phantomjs, command_config_file, SCRIPT_FILE, @source.to_s, @outfile, format, zoom, margin, orientation, cookie_file, rendering_time, timeout].join(" ")
|
61
61
|
end
|
62
62
|
|
63
63
|
# Public: initializes a new Phantom Object
|
64
64
|
#
|
65
|
-
# url_or_file
|
66
|
-
# options
|
67
|
-
# * format
|
68
|
-
# * zoom
|
69
|
-
# * margin
|
70
|
-
#
|
71
|
-
#
|
65
|
+
# url_or_file - The url of the html document to render
|
66
|
+
# options - a hash with options for rendering
|
67
|
+
# * format - the paper format for the output eg: "5in*7.5in", "10cm*20cm", "A4", "Letter"
|
68
|
+
# * zoom - the viewport zoom factor
|
69
|
+
# * margin - the margins for the pdf
|
70
|
+
# * command_config_file - the path to a json configuration file for command-line options
|
71
|
+
# cookies - hash with cookies to use for rendering
|
72
|
+
# outfile - optional path for the output file a Tempfile will be created if not given
|
72
73
|
#
|
73
74
|
# Returns self
|
74
75
|
def initialize(url_or_file, options = { }, cookies={ }, outfile = nil)
|
@@ -124,7 +125,7 @@ module Shrimp
|
|
124
125
|
private
|
125
126
|
def dump_cookies
|
126
127
|
host = @source.url? ? URI::parse(@source.to_s).host : "/"
|
127
|
-
json = @cookies.inject([]) { |a, (k, v)| a.push({ name
|
128
|
+
json = @cookies.inject([]) { |a, (k, v)| a.push({ :name => k, :value => v, :domain => host }); a }.to_json
|
128
129
|
File.open("#{options[:tmpdir]}/#{rand}.cookies", 'w') { |f| f.puts json; f }.path
|
129
130
|
end
|
130
131
|
end
|
data/lib/shrimp/rasterize.js
CHANGED
@@ -74,8 +74,9 @@ if (system.args.length < 3 || system.args.length > 10) {
|
|
74
74
|
fs.move(output + '_tmp.pdf', output);
|
75
75
|
}
|
76
76
|
catch (e) {
|
77
|
-
|
78
|
-
|
77
|
+
console.log(e);
|
78
|
+
phantom.exit(1);
|
79
|
+
throw e
|
79
80
|
}
|
80
81
|
console.log('rendered to: ' + output, new Date().getTime());
|
81
82
|
phantom.exit();
|
data/lib/shrimp/version.rb
CHANGED
data/shrimp.gemspec
CHANGED
@@ -23,4 +23,5 @@ Gem::Specification.new do |gem|
|
|
23
23
|
gem.add_development_dependency(%q<rake>, [">=0.9.2"])
|
24
24
|
gem.add_development_dependency(%q<rspec>, [">= 2.2.0"])
|
25
25
|
gem.add_development_dependency(%q<rack-test>, [">= 0.5.6"])
|
26
|
+
gem.add_development_dependency(%q<rack>, ["= 1.4.1"])
|
26
27
|
end
|
@@ -18,7 +18,6 @@ def mock_app(options = { }, conditions = { })
|
|
18
18
|
|
19
19
|
@middleware = Shrimp::Middleware.new(main_app, options, conditions)
|
20
20
|
@app = Rack::Session::Cookie.new(@middleware, :key => 'rack.session')
|
21
|
-
@middleware.should_receive(:fire_phantom).any_number_of_times
|
22
21
|
end
|
23
22
|
|
24
23
|
|
@@ -64,7 +63,7 @@ describe Shrimp::Middleware do
|
|
64
63
|
end
|
65
64
|
|
66
65
|
it "should return a pdf with 200 after rendering" do
|
67
|
-
mock_file =
|
66
|
+
mock_file = double(File, :read => "Hello World", :close => true, :mtime => Time.now)
|
68
67
|
File.should_receive(:'exists?').and_return true
|
69
68
|
File.should_receive(:'size').and_return 1000
|
70
69
|
File.should_receive(:'open').and_return mock_file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shrimp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-08-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: rake
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ! '>='
|
@@ -32,10 +37,15 @@ dependencies:
|
|
32
37
|
version: 0.9.2
|
33
38
|
type: :development
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 0.9.2
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: rspec
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ! '>='
|
@@ -43,10 +53,15 @@ dependencies:
|
|
43
53
|
version: 2.2.0
|
44
54
|
type: :development
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 2.2.0
|
47
62
|
- !ruby/object:Gem::Dependency
|
48
63
|
name: rack-test
|
49
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
50
65
|
none: false
|
51
66
|
requirements:
|
52
67
|
- - ! '>='
|
@@ -54,7 +69,28 @@ dependencies:
|
|
54
69
|
version: 0.5.6
|
55
70
|
type: :development
|
56
71
|
prerelease: false
|
57
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 0.5.6
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: rack
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - '='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: 1.4.1
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - '='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 1.4.1
|
58
94
|
description: html to pdf with phantomjs
|
59
95
|
email:
|
60
96
|
- manuel@adeven.com
|
@@ -70,6 +106,7 @@ files:
|
|
70
106
|
- README.md
|
71
107
|
- Rakefile
|
72
108
|
- lib/shrimp.rb
|
109
|
+
- lib/shrimp/config.json
|
73
110
|
- lib/shrimp/configuration.rb
|
74
111
|
- lib/shrimp/middleware.rb
|
75
112
|
- lib/shrimp/phantom.rb
|
@@ -94,16 +131,22 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
94
131
|
- - ! '>='
|
95
132
|
- !ruby/object:Gem::Version
|
96
133
|
version: '0'
|
134
|
+
segments:
|
135
|
+
- 0
|
136
|
+
hash: 2078211269578037741
|
97
137
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
98
138
|
none: false
|
99
139
|
requirements:
|
100
140
|
- - ! '>='
|
101
141
|
- !ruby/object:Gem::Version
|
102
142
|
version: '0'
|
143
|
+
segments:
|
144
|
+
- 0
|
145
|
+
hash: 2078211269578037741
|
103
146
|
requirements:
|
104
147
|
- phantomjs, v1.6 or greater
|
105
148
|
rubyforge_project:
|
106
|
-
rubygems_version: 1.8.
|
149
|
+
rubygems_version: 1.8.25
|
107
150
|
signing_key:
|
108
151
|
specification_version: 3
|
109
152
|
summary: a phantomjs based pdf renderer
|