grover 0.3.0 → 0.3.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.
- checksums.yaml +4 -4
- data/lib/grover.rb +28 -1
- data/lib/grover/middleware.rb +16 -9
- data/lib/grover/utils.rb +10 -0
- data/lib/grover/version.rb +1 -1
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c7d5ea905a539c2326c8f58e7bade296648fa300
|
4
|
+
data.tar.gz: c87e18907dab9181629998302b3e88b90c064f58
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5490e256b29f0684a5c41ea0cdb193347ef9b01eb69e35d52d03302a6d49b4fb9aeb3e3dd7ea77b69bff789fa1491f0c71a6db08bc72b189a7b72daf6cb92a79
|
7
|
+
data.tar.gz: fe20dafde8aa7987f09e60691d9dcfafab7af3366ea6e0892971a4e9b3f29b1d8d9cb37ef04f3fd33d152ad40b1771af243e08000c3181a2120d7f35648dc672
|
data/lib/grover.rb
CHANGED
@@ -32,6 +32,12 @@ class Grover
|
|
32
32
|
} else {
|
33
33
|
await page.goto(`data:text/html,${url}`, { waitUntil: 'networkidle0' });
|
34
34
|
}
|
35
|
+
|
36
|
+
const emulateMedia = options.emulateMedia; delete options.emulateMedia;
|
37
|
+
if (emulateMedia) {
|
38
|
+
await page.emulateMedia(emulateMedia);
|
39
|
+
}
|
40
|
+
|
35
41
|
return await page.pdf(options);
|
36
42
|
} finally {
|
37
43
|
if (browser) {
|
@@ -98,9 +104,30 @@ class Grover
|
|
98
104
|
Processor.new(root_path)
|
99
105
|
end
|
100
106
|
|
107
|
+
def options_with_template_fix
|
108
|
+
options = @options.dup
|
109
|
+
display_url = options.delete :display_url
|
110
|
+
if display_url
|
111
|
+
options[:footer_template] ||= DEFAULT_FOOTER_TEMPLATE
|
112
|
+
|
113
|
+
%i[header_template footer_template].each do |key|
|
114
|
+
next unless options[key].is_a? String
|
115
|
+
options[key] = options[key].gsub(DISPLAY_URL_PLACEHOLDER, display_url)
|
116
|
+
end
|
117
|
+
end
|
118
|
+
options
|
119
|
+
end
|
120
|
+
|
101
121
|
def normalized_options(path)
|
102
|
-
options = Utils.normalize_object
|
122
|
+
options = Utils.normalize_object options_with_template_fix
|
103
123
|
options['path'] = path if path
|
104
124
|
options
|
105
125
|
end
|
126
|
+
|
127
|
+
DISPLAY_URL_PLACEHOLDER = '{{display_url}}'.freeze
|
128
|
+
|
129
|
+
DEFAULT_FOOTER_TEMPLATE = Utils.strip_heredoc(<<-HTML).freeze
|
130
|
+
<div class='text left grow'>#{DISPLAY_URL_PLACEHOLDER}</div>
|
131
|
+
<div class='text right'><span class='pageNumber'></span>/<span class='totalPages'></span></div>
|
132
|
+
HTML
|
106
133
|
end
|
data/lib/grover/middleware.rb
CHANGED
@@ -47,8 +47,8 @@ class Grover
|
|
47
47
|
body = response.respond_to?(:body) ? response.body : response.join
|
48
48
|
body = body.join if body.is_a?(Array)
|
49
49
|
|
50
|
-
body = HTMLPreprocessor.process body,
|
51
|
-
Grover.new(body).to_pdf
|
50
|
+
body = HTMLPreprocessor.process body, root_url, protocol
|
51
|
+
Grover.new(body, display_url: request_url).to_pdf
|
52
52
|
end
|
53
53
|
|
54
54
|
def update_headers(headers, body)
|
@@ -63,11 +63,8 @@ class Grover
|
|
63
63
|
def configure_env_for_pdf_request(env)
|
64
64
|
@render_pdf = true
|
65
65
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
%w[PATH_INFO REQUEST_URI].each { |e| env[e] = path }
|
70
|
-
|
66
|
+
env['PATH_INFO'] = path_without_extension
|
67
|
+
env['REQUEST_URI'] = path_without_extension
|
71
68
|
env['HTTP_ACCEPT'] = concat(env['HTTP_ACCEPT'], Rack::Mime.mime_type('.html'))
|
72
69
|
end
|
73
70
|
|
@@ -75,14 +72,24 @@ class Grover
|
|
75
72
|
(accepts || '').split(',').unshift(type).compact.join(',')
|
76
73
|
end
|
77
74
|
|
78
|
-
def
|
79
|
-
"#{env['rack.url_scheme']}://#{env['HTTP_HOST']}/"
|
75
|
+
def root_url
|
76
|
+
@root_url ||= "#{env['rack.url_scheme']}://#{env['HTTP_HOST']}/"
|
80
77
|
end
|
81
78
|
|
82
79
|
def protocol
|
83
80
|
env['rack.url_scheme']
|
84
81
|
end
|
85
82
|
|
83
|
+
def path_without_extension
|
84
|
+
return @path_without_extension if defined? @path_without_extension
|
85
|
+
path = @request.path.sub(PDF_REGEX, '')
|
86
|
+
@path_without_extension = path.sub(@request.script_name, '')
|
87
|
+
end
|
88
|
+
|
89
|
+
def request_url
|
90
|
+
"#{root_url.sub(%r{/\z}, '')}#{path_without_extension}"
|
91
|
+
end
|
92
|
+
|
86
93
|
def env
|
87
94
|
@request.env
|
88
95
|
end
|
data/lib/grover/utils.rb
CHANGED
@@ -20,6 +20,16 @@ class Grover
|
|
20
20
|
gsub(/[[:space:]]+/, ' ')
|
21
21
|
end
|
22
22
|
|
23
|
+
#
|
24
|
+
# Remove minimum spaces from the front of all lines within a string
|
25
|
+
#
|
26
|
+
# Based on active_support/core_ext/string/strip.rb
|
27
|
+
#
|
28
|
+
def self.strip_heredoc(string, inline: false)
|
29
|
+
string = string.gsub(/^#{string.scan(/^[ \t]*(?=\S)/).min}/, ''.freeze)
|
30
|
+
inline ? string.delete("\n") : string
|
31
|
+
end
|
32
|
+
|
23
33
|
#
|
24
34
|
# Recursively normalizes hash objects with camelized string keys
|
25
35
|
#
|
data/lib/grover/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grover
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Bromwich
|
@@ -25,33 +25,33 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0.2'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '1.3'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '1.3'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: pdf-reader
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '1
|
47
|
+
version: '2.1'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '1
|
54
|
+
version: '2.1'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rack-test
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|