absolutize 0.0.9 → 0.0.10

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.
@@ -16,12 +16,15 @@ class Absolutize
16
16
  def url(relative_url)
17
17
  # encode the url if the new url contains spaces but doesn't contain %, i.e isn't already encoded
18
18
  relative_url = relative_url.split("#").first if relative_url.include?"#" and @options[:remove_anchors]
19
- relative_url = URI.encode(relative_url, " <>\{\}|\\\^\[\]|`") if @options[:force_escaping]
19
+ if @options[:force_escaping]
20
+ relative_url = URI.decode(relative_url)#force the decode of the URL
21
+ relative_url = URI.encode(relative_url, " <>\{\}|\\\^\[\]|`")
22
+ end
20
23
 
21
24
  absolute_url = nil
22
25
  begin
23
26
  absolute_url = URI.join(@base_url, relative_url)
24
- rescue URI::InvalidURIError => urie
27
+ rescue URI::InvalidURIError => uri
25
28
  puts "Unable to use URI.join attempting manually" if @options[:output_debug]
26
29
  if @base_url =~ /\Ahttp/ and relative_url =~ /\A\//
27
30
  puts "base url starts with http and relative_url is relative to root" if @options[:output_debug]
@@ -35,7 +38,7 @@ class Absolutize
35
38
  #new url is absolute anyway
36
39
  absolute_url = URI.parse(relative_url)
37
40
  else
38
- raise "Unable to absolutize #{base_url} and #{relative_url}"
41
+ raise "Unable to absolutize #{@base_url} and #{relative_url}"
39
42
  end
40
43
  end
41
44
 
@@ -19,8 +19,15 @@ describe Absolutize do
19
19
  @absolutize.url("http://www.bbc.co.uk/").to_s.should == "http://www.bbc.co.uk/"
20
20
  end
21
21
  it "should return the same url for an absolute url" do
22
- @absolutize.url("http://www.bbc.co.uk//asdf/asdf.html").to_s.should == "http://www.bbc.co.uk/asdf/asdf.html"
22
+ @absolutize.url("http://www.bbc.co.uk//asdf/asdf.html").to_s.should == "http://www.bbc.co.uk//asdf/asdf.html"
23
23
  end
24
+
25
+ it "should return the correct absolute URL when the url is already encoded" do
26
+ ab = Absolutize.new("http://www.baseurl.com/top_folder/index.html")
27
+ ab.url("%2ftop_folder%2fsub_folder%2findex.html").to_s.should == "http://www.baseurl.com/top_folder/sub_folder/index.html"
28
+ ab.url("/top_folder/sub_folder/index.html").to_s.should == "http://www.baseurl.com/top_folder/sub_folder/index.html"
29
+ end
30
+
24
31
  it "should return the absolute url for a relative to root url" do
25
32
  @absolutize.url("/asdf.html").to_s.should == "http://www.baseurl.com/asdf.html"
26
33
  end
@@ -58,7 +65,15 @@ describe Absolutize do
58
65
  @absolutize = Absolutize.new(@base_url, :force_escaping => false)
59
66
  end
60
67
  it "should not escape invalid characters" do
61
- lambda { @absolutize.url("/root folder/asdf.html#anchor")}.should raise_error
68
+ lambda { @absolutize.url("/root folder/asdf.html#anchor")}.should raise_error
69
+
70
+ ab = Absolutize.new("http://www.baseurl.com/top_folder/index.html", :force_escaping => false)
71
+ #this is actually wrong, but we have not forced escaping
72
+ ab.url("%2ftop_folder%2fsub_folder%2findex.html").to_s.should == "http://www.baseurl.com/top_folder/%2ftop_folder%2fsub_folder%2findex.html"
73
+ #should work fine
74
+ ab.url("/top_folder/sub_folder/index.html").to_s.should == "http://www.baseurl.com/top_folder/sub_folder/index.html"
75
+
62
76
  end
77
+
63
78
  end
64
79
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: absolutize
3
3
  version: !ruby/object:Gem::Version
4
- hash: 13
4
+ hash: 11
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 9
10
- version: 0.0.9
9
+ - 10
10
+ version: 0.0.10
11
11
  platform: ruby
12
12
  authors:
13
13
  - Stewart McKee
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-08-12 00:00:00 +01:00
18
+ date: 2010-08-18 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies: []
21
21
 
@@ -34,7 +34,6 @@ files:
34
34
  - spec/absolutize/absolutize_spec.rb
35
35
  - spec/absolutize/absolutize_spec.rb~
36
36
  - lib/absolutize.rb
37
- - lib/absolutize.rb~
38
37
  - README.textile
39
38
  has_rdoc: false
40
39
  homepage: http://github.com/vamosa/absolutize
@@ -1,47 +0,0 @@
1
- require 'rubygems'
2
- require 'uri'
3
- require File.expand_path(File.dirname(__FILE__) + '/absolutize')
4
-
5
- class Absolutize
6
-
7
- def initialize(base_url, options = {})
8
- @base_url = base_url
9
- @options = options
10
-
11
- @options[:remove_anchors] = false if @options[:remove_anchors].nil?
12
- @options[:force_escaping] = true if @options[:force_escaping].nil?
13
- @options[:output_debug] = false if @options[:output_debug].nil?
14
- end
15
-
16
- def url(relative_url)
17
- # encode the url if the new url contains spaces but doesn't contain %, i.e isn't already encoded
18
- relative_url = relative_url.split("#").first if relative_url.include?"#" and @options[:remove_anchors]
19
- relative_url = URI.encode(relative_url, " <>\{\}|\\\^\[\]|`") if @options[:force_escaping]
20
-
21
- absolute_url = nil
22
- begin
23
- absolute_url = URI.join(@base_url, relative_url)
24
- rescue URI::InvalidURIError => urie
25
- puts "Unable to use URI.join attempting manually" if @options[:output_debug]
26
- if @base_url =~ /\Ahttp/ and relative_url =~ /\A\//
27
- puts "base url starts with http and relative_url is relative to root" if @options[:output_debug]
28
- uri = URI.parse(@base_url)
29
- if uri.port
30
- absolute_url = URI.parse("#{uri.scheme}://#{uri.host}:#{uri.port}#{relative_url}")
31
- else
32
- absolute_url = URI.parse("#{uri.scheme}://#{uri.host}#{relative_url}")
33
- end
34
- elsif relative_url =~ /\Ahttp/
35
- #new url is absolute anyway
36
- absolute_url = URI.parse(relative_url)
37
- else
38
- raise "Unable to absolutize #{base_url} and #{relative_url}"
39
- end
40
- end
41
-
42
- # remove any double slashes in the path
43
- absolute_url.path = absolute_url.path.gsub("//", "/") unless absolute_url.path.nil?
44
-
45
- absolute_url
46
- end
47
- end