grover 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/grover.rb +32 -6
  3. data/lib/grover/version.rb +1 -1
  4. metadata +15 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7c6a07a0ade8c23210286b3501d87f9634c7f66d
4
- data.tar.gz: 149a9096b926444174cd1c4ef1b2425bac25ea9f
3
+ metadata.gz: 90037348478ac60c7205f57ff6b3fc2013c2cebc
4
+ data.tar.gz: 9b8762974d7b150b0056495ddd4a116719849ffc
5
5
  SHA512:
6
- metadata.gz: 6ba6d666daec6b31fabb7484ad74c00787b18184ccb583c6c71fc923c0ac7ee6b9557d45a06a89e0627426af2ad11c2d886970a1eb7776f976d799d8f9280108
7
- data.tar.gz: a7d4fd2f0b140f37b3c3cb5f7d33abcfb67cbe414c6eb79caf9c1ac10f954dfc46f7233e5df04ff3b946a6b1bd6433d1d74ca2bc1713246d4b5bf921ce02f338
6
+ metadata.gz: 4b7cfa2449f703ca0ee14cea8560c051d8f81997f439d90a2d733b622addfc493c9224af8684b6ef0f4bcfa0dd8a7fbad4ced12bd6490d237099b7b26cd5aafc
7
+ data.tar.gz: d37e206d291939ef8771e5ca2999a462aa952ddc266237c54544b99a65f381eab9b656a41e82c1f2da0ceffe1fb7b0e61aa98eb6533b9342b59b2f37c4667b7f
@@ -6,6 +6,7 @@ require 'grover/middleware'
6
6
  require 'grover/configuration'
7
7
 
8
8
  require 'schmooze'
9
+ require 'nokogiri'
9
10
 
10
11
  #
11
12
  # Grover interface for converting HTML to PDF
@@ -112,8 +113,14 @@ class Grover
112
113
  Processor.new(root_path)
113
114
  end
114
115
 
115
- def options_with_template_fix
116
+ def base_options
116
117
  options = @options.dup
118
+ options.merge! meta_options unless url_source?
119
+ options
120
+ end
121
+
122
+ def options_with_template_fix
123
+ options = base_options
117
124
  display_url = options.delete :display_url
118
125
  if display_url
119
126
  options[:footer_template] ||= DEFAULT_FOOTER_TEMPLATE
@@ -128,27 +135,46 @@ class Grover
128
135
 
129
136
  def normalized_options(path)
130
137
  options = Utils.normalize_object options_with_template_fix
131
- options.merge! meta_options unless url_source?
138
+ fix_boolean_options! options
139
+ fix_numeric_options! options
132
140
  options['path'] = path if path
133
141
  options
134
142
  end
135
143
 
144
+ def fix_boolean_options!(options)
145
+ %w[displayHeaderFooter printBackground landscape preferCSSPageSize].each do |opt|
146
+ next unless options.key? opt
147
+ options[opt] = !FALSE_VALUES.include?(options[opt])
148
+ end
149
+ end
150
+
151
+ FALSE_VALUES = [nil, false, 0, '0', 'f', 'F', 'false', 'FALSE', 'off', 'OFF'].freeze
152
+
153
+ def fix_numeric_options!(options)
154
+ return unless options.key? 'scale'
155
+ options['scale'] = options['scale'].to_f
156
+ end
157
+
136
158
  #
137
159
  # Extract out options from meta tags in the source - based on code from PDFKit project
138
160
  #
139
161
  def meta_options
140
162
  meta_opts = {}
141
163
 
142
- @url.scan(/<meta [^>]*>/) do |meta|
143
- tag_name = meta[/name=["']#{Grover.configuration.meta_tag_prefix}([a-z_-]+)["']/, 1]
144
- next if tag_name.nil?
164
+ meta_tags.each do |meta|
165
+ tag_name = meta['name'] && meta['name'][/#{Grover.configuration.meta_tag_prefix}([a-z_-]+)/, 1]
166
+ next unless tag_name
145
167
 
146
- Utils.deep_assign meta_opts, tag_name.split('-'), meta[/content=["']([^"']+)["']/, 1]
168
+ Utils.deep_assign meta_opts, tag_name.split('-'), meta['content']
147
169
  end
148
170
 
149
171
  meta_opts
150
172
  end
151
173
 
174
+ def meta_tags
175
+ Nokogiri::HTML(@url).xpath('//meta')
176
+ end
177
+
152
178
  def url_source?
153
179
  @url.match(/^http/i)
154
180
  end
@@ -1,3 +1,3 @@
1
1
  class Grover
2
- VERSION = '0.4.1'.freeze
2
+ VERSION = '0.4.2'.freeze
3
3
  end
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.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Bromwich
@@ -10,6 +10,20 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2018-09-08 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: nokogiri
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 1.8.4
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 1.8.4
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: schmooze
15
29
  requirement: !ruby/object:Gem::Requirement