From eaef66a4231ab19ef69affb1f8c56854b2203fa6 Mon Sep 17 00:00:00 2001
From: Tijmen Brommet <tijmen@gmail.com>
Date: Sat, 2 Mar 2013 00:46:55 +0100
Subject: [PATCH] Fix display host for onebox

---
 lib/oneboxer/base_onebox.rb                    |  7 ++++++-
 lib/oneboxer/handlebars_onebox.rb              |  7 +------
 lib/oneboxer/oembed_onebox.rb                  |  8 +-------
 lib/oneboxer/open_graph_onebox.rb              |  9 +--------
 .../oneboxer/android_app_store_onebox_spec.rb  |  2 +-
 .../oneboxer/apple_app_onebox_spec.rb          |  2 +-
 .../oneboxer/wikipedia_onebox_spec.rb          |  2 +-
 spec/components/oneboxer_spec.rb               | 18 ++++++++++++++++++
 8 files changed, 30 insertions(+), 25 deletions(-)

diff --git a/lib/oneboxer/base_onebox.rb b/lib/oneboxer/base_onebox.rb
index 74da125987e..f0d4c3e53b3 100644
--- a/lib/oneboxer/base_onebox.rb
+++ b/lib/oneboxer/base_onebox.rb
@@ -43,6 +43,11 @@ module Oneboxer
       @url
     end
 
+    def nice_host
+      host = URI.parse(@url).host
+      host.nil? ? '' : host.gsub('www.', '')
+    rescue URI::InvalidURIError
+      '' # In case there is a problem with the URL, we just won't set the host
+    end
   end
-
 end
diff --git a/lib/oneboxer/handlebars_onebox.rb b/lib/oneboxer/handlebars_onebox.rb
index 48047b2a0b9..f000a500aa9 100644
--- a/lib/oneboxer/handlebars_onebox.rb
+++ b/lib/oneboxer/handlebars_onebox.rb
@@ -32,12 +32,7 @@ module Oneboxer
       args[:original_url] = @url
       args[:lang] = @lang || ""
       args[:favicon] = ActionController::Base.helpers.image_path(self.class.favicon_file) if self.class.favicon_file.present?
-      begin
-        parsed = URI.parse(@url)
-        args[:host] = parsed.host.split('.').last(2).join('.')
-      rescue URI::InvalidURIError
-        # In case there is a problem with the URL, we just won't set the host
-      end
+      args[:host] = nice_host
 
       Mustache.render(File.read(template), args)
     rescue => ex
diff --git a/lib/oneboxer/oembed_onebox.rb b/lib/oneboxer/oembed_onebox.rb
index d0de7919581..3ddb15eaba2 100644
--- a/lib/oneboxer/oembed_onebox.rb
+++ b/lib/oneboxer/oembed_onebox.rb
@@ -33,13 +33,7 @@ module Oneboxer
       end
 
       parsed['html'] ||= parsed['abstract']
-
-      begin
-        parsed_uri = URI.parse(@url)
-        parsed['host'] = parsed_uri.host.split('.').last(2).join('.')
-      rescue URI::InvalidURIError
-        # In case there is a problem with the URL, we just won't set the host
-      end
+      parsed['host'] = nice_host
 
 
       Mustache.render(File.read(template), parsed)
diff --git a/lib/oneboxer/open_graph_onebox.rb b/lib/oneboxer/open_graph_onebox.rb
index 53e4a4349ff..30ca1274ec3 100644
--- a/lib/oneboxer/open_graph_onebox.rb
+++ b/lib/oneboxer/open_graph_onebox.rb
@@ -21,16 +21,9 @@ module Oneboxer
       @opts[:original_url] = @url
       @opts[:text] = @opts['description']
       @opts[:unsafe] = true
-
-      begin
-        parsed = URI.parse(@url)
-        @opts[:host] = parsed.host.split('.').last(2).join('.')
-      rescue URI::InvalidURIError
-        # In case there is a problem with the URL, we just won't set the host
-      end
+      @opts[:host] = nice_host
 
       Mustache.render(File.read(template), @opts)
     end
-
   end
 end
diff --git a/spec/components/oneboxer/android_app_store_onebox_spec.rb b/spec/components/oneboxer/android_app_store_onebox_spec.rb
index fca6cf19160..ec4cd66ccaa 100644
--- a/spec/components/oneboxer/android_app_store_onebox_spec.rb
+++ b/spec/components/oneboxer/android_app_store_onebox_spec.rb
@@ -21,7 +21,7 @@ private
     <div class='source'>
       <div class='info'>
         <a href='https://play.google.com/store/apps/details?id=com.moosoft.parrot' target="_blank">
-          <img class='favicon' src="/assets/favicons/google_play.png"> google.com
+          <img class='favicon' src="/assets/favicons/google_play.png"> play.google.com
         </a>
       </div>
     </div>
diff --git a/spec/components/oneboxer/apple_app_onebox_spec.rb b/spec/components/oneboxer/apple_app_onebox_spec.rb
index e1ab1f0a858..5cb50cbb26d 100644
--- a/spec/components/oneboxer/apple_app_onebox_spec.rb
+++ b/spec/components/oneboxer/apple_app_onebox_spec.rb
@@ -21,7 +21,7 @@ private
     <div class='source'>
       <div class='info'>
         <a href='https://itunes.apple.com/us/app/minecraft-pocket-edition-lite/id479651754' target="_blank">
-          <img class='favicon' src="/assets/favicons/apple.png"> apple.com
+          <img class='favicon' src="/assets/favicons/apple.png"> itunes.apple.com
         </a>
       </div>
     </div>
diff --git a/spec/components/oneboxer/wikipedia_onebox_spec.rb b/spec/components/oneboxer/wikipedia_onebox_spec.rb
index 75bd6cc0599..b27aa7b718c 100644
--- a/spec/components/oneboxer/wikipedia_onebox_spec.rb
+++ b/spec/components/oneboxer/wikipedia_onebox_spec.rb
@@ -22,7 +22,7 @@ private
     <div class='source'>
       <div class='info'>
         <a href='http://en.wikipedia.org/wiki/Ruby' target="_blank">
-          <img class='favicon' src="/assets/favicons/wikipedia.png"> wikipedia.org
+          <img class='favicon' src="/assets/favicons/wikipedia.png"> en.wikipedia.org
         </a>
       </div>
     </div>
diff --git a/spec/components/oneboxer_spec.rb b/spec/components/oneboxer_spec.rb
index 5ddec3f29df..d085aa31e6e 100644
--- a/spec/components/oneboxer_spec.rb
+++ b/spec/components/oneboxer_spec.rb
@@ -72,6 +72,24 @@ describe Oneboxer do
 
   end
 
+  describe '#nice_host' do
+    it 'strips www from the domain' do
+      DummyOnebox.new('http://www.cnn.com/thing').nice_host.should eq 'cnn.com'
+    end
+
+    it 'respects double TLDs' do
+      DummyOnebox.new('http://news.bbc.co.uk/thing').nice_host.should eq 'news.bbc.co.uk'
+    end
+
+    it 'returns an empty string if the URL is bogus' do
+      DummyOnebox.new('whatever').nice_host.should eq ''
+    end
+
+    it 'returns an empty string if the URL unparsable' do
+      DummyOnebox.new(nil).nice_host.should eq ''
+    end
+  end
+
   context 'without caching' do
     it 'calls the onebox method of our matched class' do
       Oneboxer.onebox_nocache(@dummy_onebox_url).should == 'dummy!'