addressabler 0.0.7 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG.md +4 -0
- data/README.md +26 -12
- data/lib/addressabler/uri.rb +62 -0
- data/lib/addressabler/uri_deprecation.rb +23 -0
- data/lib/addressabler.rb +83 -71
- data/spec/addressable/idna_spec.rb +238 -0
- data/spec/addressable/net_http_compat_spec.rb +28 -0
- data/spec/addressable/template_spec.rb +1152 -0
- data/spec/{uri_spec.rb → addressable/uri_spec.rb} +694 -19
- data/spec/addressabler/uri_deprecation_spec.rb +39 -0
- data/spec/addressabler/uri_spec.rb +116 -0
- data/spec/addressabler_spec.rb +11 -108
- metadata +37 -36
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'addressabler/uri_deprecation'
|
2
|
+
|
3
|
+
describe Addressabler, "deprecation" do
|
4
|
+
describe "TLDS" do
|
5
|
+
it "returns public TLDS" do
|
6
|
+
Addressabler::TLDS.should == Addressabler.public_tlds
|
7
|
+
end
|
8
|
+
|
9
|
+
it "warns about the deprecated TLD constant" do
|
10
|
+
Addressabler.should_receive(:deprecation_warning)
|
11
|
+
Addressabler::TLDS
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe Addressable::URI, "deprecation" do
|
17
|
+
describe "custom_tlds" do
|
18
|
+
it "returns the Addressabler custom_tlds" do
|
19
|
+
Addressabler.custom_tlds = {foo: "bar"}
|
20
|
+
Addressable::URI.custom_tlds.should == {foo: "bar"}
|
21
|
+
end
|
22
|
+
|
23
|
+
it "sets the Addressabler custom_tlds" do
|
24
|
+
Addressable::URI.custom_tlds = {gert: "B. Frobe"}
|
25
|
+
Addressabler.custom_tlds.should == {gert: "B. Frobe"}
|
26
|
+
end
|
27
|
+
|
28
|
+
it "warns about the deprecated custom_tlds getter" do
|
29
|
+
Addressabler.should_receive(:deprecation_warning)
|
30
|
+
Addressable::URI.custom_tlds
|
31
|
+
end
|
32
|
+
|
33
|
+
it "warns about the deprecated custom_tlds setter" do
|
34
|
+
Addressabler.should_receive(:deprecation_warning)
|
35
|
+
Addressable::URI.custom_tlds = {bring_me: "a sandwich"}
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,116 @@
|
|
1
|
+
require 'addressabler/uri'
|
2
|
+
|
3
|
+
describe Addressabler::URI do
|
4
|
+
it "does not prevent Addressable::URI from parsing" do
|
5
|
+
uri = Addressable::URI.parse("http://www.google.com/path?foo=bar#anchor")
|
6
|
+
uri.should be_instance_of(Addressable::URI)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "resets when the host changes" do
|
10
|
+
uri = Addressable::URI.heuristic_parse("www.google.com")
|
11
|
+
uri.tld.should == 'com'
|
12
|
+
uri.domain.should == 'google'
|
13
|
+
uri.subdomain.should == 'www'
|
14
|
+
uri.host = 'www2.google.co.uk'
|
15
|
+
uri.tld.should == 'co.uk'
|
16
|
+
uri.domain.should == 'google'
|
17
|
+
uri.subdomain.should == 'www2'
|
18
|
+
end
|
19
|
+
|
20
|
+
it "does not explode on empty strings" do
|
21
|
+
uri = Addressable::URI.parse("")
|
22
|
+
uri.host.should be_nil
|
23
|
+
uri.domain.should be_nil
|
24
|
+
uri.tld.should be_nil
|
25
|
+
uri.subdomain.should be_nil
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "#tld" do
|
29
|
+
it "returns a TLD" do
|
30
|
+
uri = Addressable::URI.parse("http://www.google.com/path?foo=bar#anchor")
|
31
|
+
uri.tld.should == 'com'
|
32
|
+
end
|
33
|
+
|
34
|
+
it "knows about complex TLDs" do
|
35
|
+
uri = Addressable::URI.parse("http://www.foo.bar.baz.co.uk/gjadgsg#sdgs?adg=f")
|
36
|
+
uri.tld.should == 'co.uk'
|
37
|
+
end
|
38
|
+
|
39
|
+
it "knows about newer TLDs" do
|
40
|
+
uri = Addressable::URI.parse("http://www.bart-blabla.cc")
|
41
|
+
uri.tld.should == 'cc'
|
42
|
+
end
|
43
|
+
|
44
|
+
it "doesn't know non-existant TLDs" do
|
45
|
+
uri = Addressable::URI.parse("http://www.bart-blabla.foobar")
|
46
|
+
uri.tld.should == ''
|
47
|
+
end
|
48
|
+
|
49
|
+
it "accepts custom TLDs" do
|
50
|
+
Addressabler.custom_tlds = { 'foobar' => {} }
|
51
|
+
uri = Addressable::URI.parse("http://www.bart-blabla.foobar")
|
52
|
+
uri.tld.should == 'foobar'
|
53
|
+
end
|
54
|
+
|
55
|
+
it "accepts nested custom TLDs" do
|
56
|
+
Addressabler.custom_tlds = { 'bar' => { 'foo' => {} } }
|
57
|
+
uri = Addressable::URI.parse("http://www.bart-blabla.foo.bar")
|
58
|
+
uri.tld.should == 'foo.bar'
|
59
|
+
end
|
60
|
+
|
61
|
+
it "is changeable" do
|
62
|
+
uri = Addressable::URI.heuristic_parse("www.google.com")
|
63
|
+
uri.tld = 'co.uk'
|
64
|
+
uri.to_s.should == 'http://www.google.co.uk'
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe "#domain" do
|
69
|
+
it "returns the domain" do
|
70
|
+
uri = Addressable::URI.heuristic_parse("i.am.a.subdomain.co.uk")
|
71
|
+
uri.domain.should == "subdomain"
|
72
|
+
end
|
73
|
+
|
74
|
+
it "is changeable" do
|
75
|
+
uri = Addressable::URI.heuristic_parse("www.google.com")
|
76
|
+
uri.domain = 'amazon'
|
77
|
+
uri.to_s.should == 'http://www.amazon.com'
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
describe "#subdomain" do
|
82
|
+
it "returns the subdomain" do
|
83
|
+
uri = Addressable::URI.heuristic_parse("i.am.a.subdomain.co.uk")
|
84
|
+
uri.subdomain.should == "i.am.a"
|
85
|
+
end
|
86
|
+
|
87
|
+
it "is changeable" do
|
88
|
+
uri = Addressable::URI.heuristic_parse("www.google.com")
|
89
|
+
uri.subdomain = 'www2'
|
90
|
+
uri.to_s.should == 'http://www2.google.com'
|
91
|
+
end
|
92
|
+
|
93
|
+
it "is blank when none exists" do
|
94
|
+
uri = Addressable::URI.parse("http://google.com")
|
95
|
+
uri.host.should == "google.com"
|
96
|
+
uri.domain.should == "google"
|
97
|
+
uri.tld.should == "com"
|
98
|
+
uri.subdomain.should == ""
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
describe "#query_hash" do
|
103
|
+
it "supports adding keys to the query" do
|
104
|
+
uri = Addressable::URI.parse("http://www.foo.bar.baz.co.uk/gjadgsg?adg=f")
|
105
|
+
uri.query_hash.should == {'adg' => 'f'}
|
106
|
+
uri.query_hash[:foo] = "bar"
|
107
|
+
uri.to_s.should == "http://www.foo.bar.baz.co.uk/gjadgsg?adg=f&foo=bar"
|
108
|
+
end
|
109
|
+
|
110
|
+
it "supports adding nested values to the query" do
|
111
|
+
uri = Addressable::URI.parse("http://www.amazon.ca")
|
112
|
+
uri.query_hash[:foo] = {:bar => "baz", :sommat => [:else, 1, true, false]}
|
113
|
+
uri.to_s.should == "http://www.amazon.ca?foo[bar]=baz&foo[sommat][]=else&foo[sommat][]=1&foo[sommat][]=true&foo[sommat][]=false"
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
data/spec/addressabler_spec.rb
CHANGED
@@ -1,115 +1,18 @@
|
|
1
|
-
require
|
1
|
+
require "addressabler"
|
2
2
|
|
3
3
|
describe Addressabler do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
it "should get the scheme of a URI" do
|
10
|
-
uri = Addressable::URI.parse("http://www.google.com/path?foo=bar#anchor")
|
11
|
-
uri.scheme.should == "http"
|
12
|
-
end
|
13
|
-
|
14
|
-
describe "TLD parsing" do
|
15
|
-
it "returns a TLD" do
|
16
|
-
uri = Addressable::URI.parse("http://www.google.com/path?foo=bar#anchor")
|
17
|
-
uri.tld.should == 'com'
|
18
|
-
end
|
19
|
-
|
20
|
-
it "knows about complex TLDs" do
|
21
|
-
uri = Addressable::URI.parse("http://www.foo.bar.baz.co.uk/gjadgsg#sdgs?adg=f")
|
22
|
-
uri.tld.should == 'co.uk'
|
23
|
-
end
|
24
|
-
|
25
|
-
it "knows about newer TLDs" do
|
26
|
-
uri = Addressable::URI.parse("http://www.bart-blabla.cc")
|
27
|
-
uri.tld.should == 'cc'
|
4
|
+
describe ".parse_tlds" do
|
5
|
+
it "doesn't return private TLDs by default" do
|
6
|
+
host = 'fwefweewf.blogspot.com'
|
7
|
+
tld = Addressabler.parse_tld(host)
|
8
|
+
tld.should == 'com'
|
28
9
|
end
|
29
10
|
|
30
|
-
it "
|
31
|
-
|
32
|
-
|
11
|
+
it "can switch private tlds on" do
|
12
|
+
Addressabler.use_private_tlds = true
|
13
|
+
host = 'fwefweewf.blogspot.com'
|
14
|
+
tld = Addressabler.parse_tld(host)
|
15
|
+
tld.should == 'blogspot.com'
|
33
16
|
end
|
34
|
-
|
35
|
-
it "accepts custom TLDs" do
|
36
|
-
Addressable::URI.custom_tlds = { 'foobar' => {} }
|
37
|
-
uri = Addressable::URI.parse("http://www.bart-blabla.foobar")
|
38
|
-
uri.tld.should == 'foobar'
|
39
|
-
end
|
40
|
-
|
41
|
-
it "accepts nested custom TLDs" do
|
42
|
-
Addressable::URI.custom_tlds = { 'bar' => { 'foo' => {} } }
|
43
|
-
uri = Addressable::URI.parse("http://www.bart-blabla.foo.bar")
|
44
|
-
uri.tld.should == 'foo.bar'
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
it "should support adding keys to the query" do
|
49
|
-
uri = Addressable::URI.parse("http://www.foo.bar.baz.co.uk/gjadgsg?adg=f")
|
50
|
-
uri.query_hash.should == {'adg' => 'f'}
|
51
|
-
uri.query_hash[:foo] = "bar"
|
52
|
-
uri.to_s.should == "http://www.foo.bar.baz.co.uk/gjadgsg?adg=f&foo=bar"
|
53
|
-
end
|
54
|
-
|
55
|
-
it "should support adding nested values to the query" do
|
56
|
-
uri = Addressable::URI.parse("http://www.amazon.ca")
|
57
|
-
uri.query_hash[:foo] = {:bar => "baz", :sommat => [:else, 1, true, false]}
|
58
|
-
uri.to_s.should == "http://www.amazon.ca?foo[bar]=baz&foo[sommat][]=else&foo[sommat][]=1&foo[sommat][]=true&foo[sommat][]=false"
|
59
|
-
end
|
60
|
-
|
61
|
-
it "should support subdomains" do
|
62
|
-
uri = Addressable::URI.heuristic_parse("i.am.a.subdomain.co.uk")
|
63
|
-
uri.subdomain.should == "i.am.a"
|
64
|
-
end
|
65
|
-
|
66
|
-
it "should support domains" do
|
67
|
-
uri = Addressable::URI.heuristic_parse("i.am.a.subdomain.co.uk")
|
68
|
-
uri.domain.should == "subdomain"
|
69
|
-
end
|
70
|
-
|
71
|
-
it "should change stuff when the host changes" do
|
72
|
-
uri = Addressable::URI.heuristic_parse("www.google.com")
|
73
|
-
uri.tld.should == 'com'
|
74
|
-
uri.domain.should == 'google'
|
75
|
-
uri.subdomain.should == 'www'
|
76
|
-
uri.host = 'www2.google.co.uk'
|
77
|
-
uri.tld.should == 'co.uk'
|
78
|
-
uri.domain.should == 'google'
|
79
|
-
uri.subdomain.should == 'www2'
|
80
|
-
end
|
81
|
-
|
82
|
-
it "should let me change the subdomain" do
|
83
|
-
uri = Addressable::URI.heuristic_parse("www.google.com")
|
84
|
-
uri.subdomain = 'www2'
|
85
|
-
uri.to_s.should == 'http://www2.google.com'
|
86
|
-
end
|
87
|
-
|
88
|
-
it "should let me change the domain" do
|
89
|
-
uri = Addressable::URI.heuristic_parse("www.google.com")
|
90
|
-
uri.domain = 'amazon'
|
91
|
-
uri.to_s.should == 'http://www.amazon.com'
|
92
|
-
end
|
93
|
-
|
94
|
-
it "should let me change the tld" do
|
95
|
-
uri = Addressable::URI.heuristic_parse("www.google.com")
|
96
|
-
uri.tld = 'co.uk'
|
97
|
-
uri.to_s.should == 'http://www.google.co.uk'
|
98
|
-
end
|
99
|
-
|
100
|
-
it "should handle things with no subdomain" do
|
101
|
-
uri = Addressable::URI.parse("http://google.com")
|
102
|
-
uri.host.should == "google.com"
|
103
|
-
uri.domain.should == "google"
|
104
|
-
uri.tld.should == "com"
|
105
|
-
uri.subdomain.should == ""
|
106
|
-
end
|
107
|
-
|
108
|
-
it "should handle empty strings" do
|
109
|
-
uri = Addressable::URI.parse("")
|
110
|
-
uri.host.should be_nil
|
111
|
-
uri.domain.should be_nil
|
112
|
-
uri.tld.should be_nil
|
113
|
-
uri.subdomain.should be_nil
|
114
17
|
end
|
115
18
|
end
|
metadata
CHANGED
@@ -1,65 +1,58 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: addressabler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Flip Sasser
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-01-21 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: addressable
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version: '
|
19
|
+
version: '2.3'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version: '
|
26
|
+
version: '2.3'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rspec
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
|
-
version: '
|
33
|
+
version: '0'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
|
-
version: '
|
40
|
+
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
|
-
name:
|
42
|
+
name: jeweler
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '>='
|
52
46
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
54
|
-
type: :
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - '>='
|
60
53
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
62
|
-
description:
|
54
|
+
version: '0'
|
55
|
+
description: "\n Addressabler extends the Addressable::URI class to provide information
|
63
56
|
about, and manipulation of, specific parts of URI strings. It adds a `tld' method,
|
64
57
|
a `domain' method,\n and a `subdomain' method.\n\nIt also allows users to easily
|
65
58
|
modify the URL's query values as a hash.\n "
|
@@ -74,39 +67,47 @@ files:
|
|
74
67
|
- LICENSE
|
75
68
|
- lib/addressabler.rb
|
76
69
|
- lib/addressabler/query.rb
|
70
|
+
- lib/addressabler/uri.rb
|
71
|
+
- lib/addressabler/uri_deprecation.rb
|
77
72
|
- lib/tlds
|
78
73
|
- README.md
|
74
|
+
- spec/addressable/idna_spec.rb
|
75
|
+
- spec/addressable/net_http_compat_spec.rb
|
76
|
+
- spec/addressable/template_spec.rb
|
77
|
+
- spec/addressable/uri_spec.rb
|
78
|
+
- spec/addressabler/uri_deprecation_spec.rb
|
79
|
+
- spec/addressabler/uri_spec.rb
|
79
80
|
- spec/addressabler_spec.rb
|
80
81
|
- spec/spec_helper.rb
|
81
|
-
- spec/uri_spec.rb
|
82
82
|
homepage: http://github.com/flipsasser/addressabler
|
83
83
|
licenses: []
|
84
|
+
metadata: {}
|
84
85
|
post_install_message:
|
85
86
|
rdoc_options: []
|
86
87
|
require_paths:
|
87
88
|
- lib
|
88
89
|
required_ruby_version: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
90
|
requirements:
|
91
|
-
- -
|
91
|
+
- - '='
|
92
92
|
- !ruby/object:Gem::Version
|
93
|
-
version:
|
94
|
-
segments:
|
95
|
-
- 0
|
96
|
-
hash: -879587546668061627
|
93
|
+
version: 1.9.3
|
97
94
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
98
|
-
none: false
|
99
95
|
requirements:
|
100
|
-
- -
|
96
|
+
- - '>='
|
101
97
|
- !ruby/object:Gem::Version
|
102
98
|
version: '0'
|
103
99
|
requirements: []
|
104
100
|
rubyforge_project:
|
105
|
-
rubygems_version: 1.
|
101
|
+
rubygems_version: 2.1.10
|
106
102
|
signing_key:
|
107
|
-
specification_version:
|
103
|
+
specification_version: 4
|
108
104
|
summary: An Addressable::URI extension adding support for TLDs and query part editing
|
109
105
|
test_files:
|
106
|
+
- spec/addressable/idna_spec.rb
|
107
|
+
- spec/addressable/net_http_compat_spec.rb
|
108
|
+
- spec/addressable/template_spec.rb
|
109
|
+
- spec/addressable/uri_spec.rb
|
110
|
+
- spec/addressabler/uri_deprecation_spec.rb
|
111
|
+
- spec/addressabler/uri_spec.rb
|
110
112
|
- spec/addressabler_spec.rb
|
111
113
|
- spec/spec_helper.rb
|
112
|
-
- spec/uri_spec.rb
|