diff --git a/README.md b/README.md index a0eb27c..b1a1411 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,7 @@ url.scheme # => "http" url.trd # => "www" url.sld # => "twingly" url.tld # => "co.uk" +url.ttld # => "uk" url.domain # => "twingly.co.uk" url.host # => "www.twingly.co.uk" url.origin # => "http://www.twingly.co.uk" @@ -43,6 +44,7 @@ url.scheme # => "https" url.trd # => "" url.sld # => "example" url.tld # => "com" +url.ttld # => "com" url.domain # => "example.com" url.host # => "example.com" url.origin # => "https://example.com" @@ -77,7 +79,9 @@ Note that this isn't a benchmark, we're using [ruby-prof] which will slow things ## Release workflow -* Update the [examples] in this README if needed. +* Update the [examples] in this README if needed, generate the output with + + ruby examples/url.rb * Bump the version in `lib/twingly/version.rb` in a commit, no need to push (the release task does that). diff --git a/examples/url.rb b/examples/url.rb index 3100ea8..63c36e7 100644 --- a/examples/url.rb +++ b/examples/url.rb @@ -1,4 +1,5 @@ -require "twingly/url" +require "bundler/setup" +require_relative "../lib/twingly/url" url_as_string = "http://www.twingly.co.uk/search" url = Twingly::URL.parse(url_as_string) @@ -12,6 +13,7 @@ puts "url.trd # => \"#{url.trd}\"" puts "url.sld # => \"#{url.sld}\"" puts "url.tld # => \"#{url.tld}\"" +puts "url.ttld # => \"#{url.ttld}\"" puts "url.domain # => \"#{url.domain}\"" puts "url.host # => \"#{url.host}\"" puts "url.origin # => \"#{url.origin}\"" @@ -29,6 +31,7 @@ puts "url.trd # => \"#{url.trd}\"" puts "url.sld # => \"#{url.sld}\"" puts "url.tld # => \"#{url.tld}\"" +puts "url.ttld # => \"#{url.ttld}\"" puts "url.domain # => \"#{url.domain}\"" puts "url.host # => \"#{url.host}\"" puts "url.origin # => \"#{url.origin}\"" diff --git a/lib/twingly/url.rb b/lib/twingly/url.rb index fc64507..0386cb2 100644 --- a/lib/twingly/url.rb +++ b/lib/twingly/url.rb @@ -100,6 +100,14 @@ def tld public_suffix_domain.tld end + # Many ccTLDs have a second level[1] underneath their ccTLD, use this when + # you don't care about the second level. + # + # [1]: https://en.wikipedia.org/wiki/Second-level_domain + def ttld + tld.split(".").last + end + def domain public_suffix_domain.domain end diff --git a/spec/lib/twingly/url/null_url_spec.rb b/spec/lib/twingly/url/null_url_spec.rb index a11c3e0..107a8d0 100644 --- a/spec/lib/twingly/url/null_url_spec.rb +++ b/spec/lib/twingly/url/null_url_spec.rb @@ -35,6 +35,11 @@ it { is_expected.to eq("") } end + describe "#ttld" do + subject { url.ttld } + it { is_expected.to eq("") } + end + describe "#domain" do subject { url.domain } it { is_expected.to eq("") } diff --git a/spec/lib/twingly/url_spec.rb b/spec/lib/twingly/url_spec.rb index 62b173e..31504b0 100644 --- a/spec/lib/twingly/url_spec.rb +++ b/spec/lib/twingly/url_spec.rb @@ -171,6 +171,17 @@ def valid_urls it { is_expected.to eq("co.uk") } end + describe "#ttld" do + subject { url.ttld } + it { is_expected.to eq("uk") } + + context "when the TLD is just one level" do + let(:test_url){ "http://twingly.com" } + + it { is_expected.to eq("com") } + end + end + describe "#domain" do subject { url.domain } it { is_expected.to eq("twingly.co.uk") }