chili_pdf 0.4.1 → 0.4.3

Sign up to get free protection for your applications and to get access to all the features.
data.tar.gz.sig CHANGED
Binary file
data/History.txt CHANGED
@@ -1,3 +1,21 @@
1
+ === 0.4.3 / 2011-06-20
2
+
3
+ * Bugfix:
4
+ * Yanked 0.4.2 release...this release fixes a mistake tests did not
5
+ catch...no features other than that on top of 0.4.2
6
+
7
+ === 0.4.2 / 2011-06-20
8
+
9
+ * Minor enhancements:
10
+ * Updates added style for logo image in plugin settings to reflect
11
+ the size it will render as within a PDF.
12
+
13
+ * Bugfix:
14
+ * Fixed the issue with relative links not working. All links will point
15
+ to URLs for the time-being (vs in-document chapter links), as the
16
+ anchor-tag-to-chapter-link conversion doesn't seem to be working for
17
+ some reason. [closes #16]
18
+
1
19
  === 0.4.1 / 2011-06-19
2
20
 
3
21
  * New features:
@@ -112,6 +112,35 @@ module ChiliPdfHelper
112
112
  end
113
113
  end
114
114
 
115
+ # Public: Converts 'href' attributes of any <a> tags to be compatible with
116
+ # the `wkhtmltopdf` executable requirements (to absolute URLs).
117
+ # Capable of handling URLs to both other domains and relative URLS.
118
+ #
119
+ # content - the String of HTML content to normalize/update
120
+ #
121
+ # Returns content un-modified if wants_html is true. Otherwise returns
122
+ # the content string with the modified 'href' attribute on all
123
+ # <a>-tags in content.
124
+ def update_a_hrefs(content)
125
+ update_tag_attribute(:a, :href, content, false, :absolute_url)
126
+ end
127
+
128
+ # Public: Converts 'href' attributes of any <a> tags and any 'src' attributes
129
+ # of <img> tags contained in 'content' to be compatible with
130
+ # the `wkhtmltopdf` executable (to absolute & 'file://-based' URLs).
131
+ #
132
+ # content - the String of HTML content to normalize/update
133
+ # wants_html - specifies whether the attribute should be formatted
134
+ # for HTML or PDF requests (local vs. relative paths). Added to
135
+ # keep excessive boolean logic out of views.
136
+ #
137
+ # Returns content un-modified if wants_html is true. Otherwise returns
138
+ # the content string with the modified 'href' attribute on all
139
+ # <a>-tags in content.
140
+ def update_link_and_image_urls(content, wants_html)
141
+ update_a_hrefs(update_img_src_tags_of(content, wants_html))
142
+ end
143
+
115
144
  private
116
145
  # Updates the value of the specified attribute of any `tag_type` tags
117
146
  # contained in `content` to be compatible with the `wkhtmltopdf`
@@ -124,12 +153,12 @@ module ChiliPdfHelper
124
153
  # wants_html - specifies whether the attribute should be formatted
125
154
  # for HTML or PDF requests (local vs. relative paths). Added to
126
155
  # keep excessive boolean logic out of views.
127
- def update_tag_attribute(tag_type, attribute, content, wants_html)
156
+ def update_tag_attribute(tag_type, attribute, content, wants_html, url_type = :file)
128
157
  return content if wants_html
129
158
 
130
159
  doc = ::Nokogiri::HTML(content)
131
160
  doc.xpath("//#{tag_type.to_s}[@#{attribute.to_s}]").each do |a_tag|
132
- a_tag["#{attribute.to_s}"] = mangle(a_tag["#{attribute.to_s}"])
161
+ a_tag["#{attribute.to_s}"] = mangle(a_tag["#{attribute.to_s}"], url_type)
133
162
  end
134
163
  doc.to_s
135
164
  end
@@ -148,8 +177,7 @@ module ChiliPdfHelper
148
177
  # wants_html - specifies whether the 'src' attribute should be formatted
149
178
  # for HTML or PDF requests (local vs. relative paths). Added to
150
179
  # keep excessive boolean logic out of views.
151
- # &block - code to execute on each matching filename (filename is
152
- # passed in as a parameter to &block)
180
+ #
153
181
  # Returns an Array of the results of the &block executions.
154
182
  def file_type_list(file_ext, src_dir, wants_html, &block)
155
183
  # We want/need to prepend the Prototype script-tag before all other script-tags
@@ -164,9 +192,13 @@ module ChiliPdfHelper
164
192
 
165
193
  # Converts the specified String to PDF-format-friendly version of itself.
166
194
  # Supports the '/attachments/:id/:filename' and '/attachments/download/:id' routes
167
- # of ChiliProject as well as standard static assets (nested under RAILS_ROOT/public).
195
+ # of ChiliProject as well as standard static assets (nested under RAILS_ROOT/public),
196
+ # and URLs (relative & absolute).
168
197
  #
169
- # content - String to convert
198
+ # content - String to convert
199
+ # url_type - symbol of the type of url to convert (default: :file)
200
+ # :file - process as a local-file URL, if valid
201
+ # :absolute_url - process as if the content were a web URL
170
202
  #
171
203
  # Examples
172
204
  #
@@ -177,9 +209,14 @@ module ChiliPdfHelper
177
209
  # => "file:///path/to/rails_root/files/38278327_image.png"
178
210
  #
179
211
  # Returns modified String, unless requested asset either doesn't exist
180
- # or is an invalid request (to, say, an asset located above
181
- # the 'RAILS_ROOT/public' sub-directory.
182
- def mangle(content)
183
- TagMangler.new(content).to_local_src
212
+ # or is an invalid request (eg: an asset located above the 'RAILS_ROOT/public'
213
+ # sub-directory).
214
+ def mangle(content, url_type = :file)
215
+ case url_type
216
+ when :file then TagMangler.new(content).to_local_src
217
+ when :absolute_url then TagMangler.new(content, request).to_absolute_url
218
+ else
219
+ raise ArgumentError, "invalid url_type passed to #mangle (received: #{url_type.inspect})"
220
+ end
184
221
  end
185
222
  end
@@ -8,4 +8,4 @@
8
8
  <%= logo_img_tag(@requesting_html_version) %>
9
9
 
10
10
  <%- html_content = textilizable(@content.text, :attachments => @content.page.attachments) %>
11
- <%= update_img_src_tags_of(html_content, @requesting_html_version) %>
11
+ <%= update_link_and_image_urls(html_content, @requesting_html_version) %>
@@ -9,5 +9,5 @@ have uploaded to this site, or any public URL.
9
9
 
10
10
  <%- if ChiliPDF::Config.logo_url? %>
11
11
  <h4>Current logo</h4>
12
- <%= image_tag ChiliPDF::Config.logo_url %>
12
+ <%= image_tag ChiliPDF::Config.logo_url, :id => 'chili-pdf-logo' %>
13
13
  <%- end %>
@@ -13,3 +13,5 @@ p.chili-pdf-instructions {padding-left: 0;}
13
13
  #pdf-token-help table {width: 100%; border: 1px #AAA solid;}
14
14
  #pdf-token-help td {border-bottom: 1px dotted #CCC;}
15
15
  #pdf-token-help thead td {font-weight: bold; border-bottom: 2px solid #CCC;}
16
+
17
+ #chili-pdf-logo {max-height:50px; border:none;}
data/lib/chili_pdf.rb CHANGED
@@ -5,5 +5,5 @@ require 'chili_pdf/string_token'
5
5
  require 'chili_pdf/tag_mangler'
6
6
 
7
7
  module ChiliPDF
8
- VERSION = '0.4.1'
8
+ VERSION = '0.4.3'
9
9
  end
@@ -1,13 +1,28 @@
1
1
  class TagMangler
2
- def initialize(src)
3
- @src_attribute = src
2
+ def initialize(src, request_like_object = nil)
3
+ @src_attribute = src # /roy
4
+ @request_like = request_like_object
4
5
  end
5
6
 
6
7
  def to_local_src
7
8
  full_file_path.blank? ? @src_attribute : "file://#{full_file_path}"
8
9
  end
9
10
 
11
+ def to_absolute_url
12
+ if relative_url?
13
+ "#{base_url}#{relative_url}"
14
+ elsif anchor_tag
15
+ "#{@request_like.url}#{anchor_tag}"
16
+ else
17
+ @src_attribute
18
+ end
19
+ end
20
+
10
21
  private
22
+ def base_url
23
+ @request_like.url.sub(@request_like.request_uri, '/')
24
+ end
25
+
11
26
  def full_file_path
12
27
  if requesting_valid_static_asset?
13
28
  requested_path
@@ -16,6 +31,22 @@ class TagMangler
16
31
  end
17
32
  end
18
33
 
34
+ def anchor_tag
35
+ @src_attribute[%r!^(#.*)!]
36
+ end
37
+
38
+ def anchor_tag?
39
+ !anchor_tag.blank
40
+ end
41
+
42
+ def relative_url
43
+ @src_attribute.match(%r!^/(.*)!) && $1
44
+ end
45
+
46
+ def relative_url?
47
+ !relative_url.blank?
48
+ end
49
+
19
50
  def attachment
20
51
  Attachment.find_by_id(attachment_id)
21
52
  end
@@ -1,7 +1,7 @@
1
1
  require File.dirname(__FILE__) + '/../test_helper'
2
2
 
3
- def make_mangler_with(asset_path)
4
- TagMangler.new(asset_path)
3
+ def make_mangler_with(asset_path, request_like = nil)
4
+ TagMangler.new(asset_path, request_like)
5
5
  end
6
6
 
7
7
  # Stolen from the Rails.root test_helper...
@@ -112,4 +112,54 @@ class TokenManagerTest < Test::Unit::TestCase
112
112
  end
113
113
  end
114
114
  end
115
+
116
+ context "#to_absolute_url" do
117
+ context "when the content passed in has a link to another domain" do
118
+ setup do
119
+ @requested_asset = "http://someotherhost.com/page.html"
120
+ @mangler = make_mangler_with(@requested_asset)
121
+ end
122
+
123
+ should "not be modified" do
124
+ assert_equal @requested_asset, @mangler.to_absolute_url
125
+ end
126
+ end
127
+
128
+ context "when the content passed in has a relative link" do
129
+ setup do
130
+ @base_url = "http://example.com"
131
+ @requested_asset = "/page"
132
+ @absolute_url = "#{@base_url}#{@requested_asset}"
133
+
134
+ mock_request = 'Mocked Request'
135
+ mock_request.stubs(:url).returns(@absolute_url)
136
+ mock_request.stubs(:request_uri).returns(@requested_asset)
137
+
138
+ @mangler = make_mangler_with(@requested_asset, mock_request)
139
+ end
140
+
141
+ should "should return an absolute URL to the original page" do
142
+ assert_equal @absolute_url, @mangler.to_absolute_url
143
+ end
144
+ end
145
+
146
+ context "when the content passed in has an anchor to another location in the current page" do
147
+ setup do
148
+ @base_url = "http://example.com"
149
+ @current_page = "/current_page"
150
+ @absolute_url = "#{@base_url}#{@current_page}"
151
+
152
+ mock_request = 'Mocked Request'
153
+ mock_request.stubs(:request_uri).returns(@current_page)
154
+ mock_request.stubs(:url).returns(@absolute_url)
155
+
156
+ @requested_asset = "#HeadingOnPage"
157
+ @mangler = make_mangler_with(@requested_asset, mock_request)
158
+ end
159
+
160
+ should "should return an absolute URL to the original page" do
161
+ assert_equal "#{@absolute_url}#{@requested_asset}", @mangler.to_absolute_url
162
+ end
163
+ end
164
+ end
115
165
  end
@@ -3,6 +3,14 @@ require File.dirname(__FILE__) + '/../../test_helper'
3
3
  class ChiliPdfHelperTest < HelperTestCase
4
4
  include ChiliPdfHelper
5
5
 
6
+ def root_url
7
+ "http://example.com/"
8
+ end
9
+
10
+ def request
11
+ @request ||= ActionController::TestRequest.new
12
+ end
13
+
6
14
  context "#chili_pdf_stylesheets" do
7
15
  should "include the pdf.css stylesheet" do
8
16
  assert_match %r(<link.*href=['"].*pdf\.css['"].*>), chili_pdf_stylesheets(false)
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chili_pdf
3
3
  version: !ruby/object:Gem::Version
4
- hash: 13
4
+ hash: 9
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 4
9
- - 1
10
- version: 0.4.1
9
+ - 3
10
+ version: 0.4.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Tom Kersten
@@ -36,7 +36,7 @@ cert_chain:
36
36
  NVADJA==
37
37
  -----END CERTIFICATE-----
38
38
 
39
- date: 2011-06-19 00:00:00 -05:00
39
+ date: 2011-06-20 00:00:00 -05:00
40
40
  default_executable:
41
41
  dependencies:
42
42
  - !ruby/object:Gem::Dependency
metadata.gz.sig CHANGED
Binary file