absolutize 0.0.10 → 0.0.11

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.
@@ -1,5 +1,5 @@
1
1
 
2
- h1. Absolutize v0.0.9
2
+ h1. Absolutize v0.0.11
3
3
 
4
4
  h2. Intro
5
5
 
@@ -23,6 +23,7 @@ Creates a new absolutize object based on a base_url
23
23
  ** :remove_anchors - removes any anchor tags (false)
24
24
  ** :force_escaping - forces escaping of urls if it hasn't been done already (true)
25
25
  ** :output_debug - puts debug info while processing the url (false)
26
+ ** :raise_exceptions - raises exceptions when it can't parse a url, otherwise returns passed in value (false)
26
27
 
27
28
  bq. absolutizer = Absolutize.new("http://www.vamosa.com/mainfolder/", :remove_anchors => true)
28
29
 
@@ -11,6 +11,8 @@ class Absolutize
11
11
  @options[:remove_anchors] = false if @options[:remove_anchors].nil?
12
12
  @options[:force_escaping] = true if @options[:force_escaping].nil?
13
13
  @options[:output_debug] = false if @options[:output_debug].nil?
14
+ @options[:raise_exceptions] = false if @options[:output_debug].nil?
15
+
14
16
  end
15
17
 
16
18
  def url(relative_url)
@@ -25,23 +27,29 @@ class Absolutize
25
27
  begin
26
28
  absolute_url = URI.join(@base_url, relative_url)
27
29
  rescue URI::InvalidURIError => uri
28
- puts "Unable to use URI.join attempting manually" if @options[:output_debug]
29
- if @base_url =~ /\Ahttp/ and relative_url =~ /\A\//
30
- puts "base url starts with http and relative_url is relative to root" if @options[:output_debug]
31
- uri = URI.parse(@base_url)
32
- if uri.port
33
- absolute_url = URI.parse("#{uri.scheme}://#{uri.host}:#{uri.port}#{relative_url}")
30
+ begin
31
+ puts "Unable to use URI.join attempting manually" if @options[:output_debug]
32
+ if @base_url =~ /\Ahttp/ and relative_url =~ /\A\//
33
+ puts "base url starts with http and relative_url is relative to root" if @options[:output_debug]
34
+ uri = URI.parse(@base_url)
35
+ if uri.port
36
+ absolute_url = URI.parse("#{uri.scheme}://#{uri.host}:#{uri.port}#{relative_url}")
37
+ else
38
+ absolute_url = URI.parse("#{uri.scheme}://#{uri.host}#{relative_url}")
39
+ end
40
+ elsif relative_url =~ /\Ahttp/
41
+ #new url is absolute anyway
42
+ absolute_url = URI.parse(relative_url)
34
43
  else
35
- absolute_url = URI.parse("#{uri.scheme}://#{uri.host}#{relative_url}")
44
+ raise "Unable to absolutize #{@base_url} and #{relative_url}" if @options[:raise_exceptions]
45
+ absolute_url = relative_url
36
46
  end
37
- elsif relative_url =~ /\Ahttp/
38
- #new url is absolute anyway
39
- absolute_url = URI.parse(relative_url)
40
- else
41
- raise "Unable to absolutize #{@base_url} and #{relative_url}"
47
+ rescue URI::InvalidURIError => uri_2
48
+ # ok, givin it a fair go trying to get this url, raise an exception if the option is set otherwise give up and return original relative url
49
+ raise "Unable to absolutize #{@base_url} and #{relative_url}" if @options[:raise_exceptions]
50
+ absolute_url = relative_url
42
51
  end
43
52
  end
44
-
45
53
  absolute_url
46
54
  end
47
55
  end
@@ -49,6 +49,9 @@ describe Absolutize do
49
49
  it "should encode with pipes" do
50
50
  @absolutize.url("/root%20folder/asdf.html?lang=en|us").to_s.should == "http://www.baseurl.com/root%20folder/asdf.html?lang=en%7Cus"
51
51
  end
52
+ it "should not raise an exception with really bad url" do
53
+ @absolutize.url("http://.asdf.com/").to_s.should == "http://.asdf.com/"
54
+ end
52
55
  end
53
56
 
54
57
  describe "with remove_anchors true" do
@@ -65,15 +68,27 @@ describe Absolutize do
65
68
  @absolutize = Absolutize.new(@base_url, :force_escaping => false)
66
69
  end
67
70
  it "should not escape invalid characters" do
68
- lambda { @absolutize.url("/root folder/asdf.html#anchor")}.should raise_error
69
-
70
71
  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
+
73
+ #this example should be decoded first, but we are checking that when force_escaping is off it does not
72
74
  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
75
  ab.url("/top_folder/sub_folder/index.html").to_s.should == "http://www.baseurl.com/top_folder/sub_folder/index.html"
75
-
76
76
  end
77
-
77
+ end
78
+
79
+ describe "with raise_exceptions true" do
80
+ before(:each) do
81
+ @absolutize = Absolutize.new(@base_url, :raise_exceptions => true)
82
+ end
83
+ it "should raise an exception when absolutize can't fix a url" do
84
+ lambda { @absolutize.url("http://.asdf.com/root folder/asdf.html#anchor")}.should raise_error
85
+ end
86
+ it "should not raise an exception when a valid url is given" do
87
+ lambda { @absolutize.url("http://www.asdf.com/rootfolder/asdf.html#anchor")}.should_not raise_error
88
+ end
89
+
90
+ it "should not raise an exception when a fixable url is given" do
91
+ lambda { @absolutize.url("http://www.asdf.com/root folder[1]/asdf.html#anchor")}.should_not raise_error
92
+ end
78
93
  end
79
94
  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: 11
4
+ hash: 9
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 10
10
- version: 0.0.10
9
+ - 11
10
+ version: 0.0.11
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-18 00:00:00 +01:00
18
+ date: 2010-08-23 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies: []
21
21