From cbf4b6570f4e999b69ffdaad7057d5a51213bd1e Mon Sep 17 00:00:00 2001
From: AR <aleiphoenix@gmail.com>
Date: Sun, 15 Sep 2013 21:56:22 +0800
Subject: fix old style gist url not found issue

---
 plugins/gist_tag.rb | 32 ++++++++++++++++++++++++--------
 1 file changed, 24 insertions(+), 8 deletions(-)

(limited to 'plugins')

diff --git a/plugins/gist_tag.rb b/plugins/gist_tag.rb
index 16203450..62c490d0 100644
--- a/plugins/gist_tag.rb
+++ b/plugins/gist_tag.rb
@@ -46,7 +46,7 @@ module Jekyll
     end
 
     def get_gist_url_for(gist, file)
-      "https://raw.github.com/gist/#{gist}/#{file}"
+      "https://gist.github.com/raw/#{gist}/#{file}"
     end
 
     def cache(gist, file, data)
@@ -72,7 +72,29 @@ module Jekyll
 
     def get_gist_from_web(gist, file)
       gist_url          = get_gist_url_for gist, file
-      raw_uri           = URI.parse gist_url
+      data = get_web_content gist_url
+      data = handle_gist_redirecting data
+      if data.code.to_i != 200
+        raise RuntimeError, "Gist replied with #{data.code} for #{gist_url}"
+      end
+      data            = data.body
+      cache gist, file, data unless @cache_disabled
+      data
+    end
+
+    def handle_gist_redirecting(data)
+      if data.code.to_i == 302
+        redirected_url  = data.header['Location']
+        data = get_web_content redirected_url
+        if data.code.to_i != 200
+          raise RuntimeError, "Gist replied with #{data.code} for #{gist_url}"
+        end
+      end
+      data
+    end
+
+    def get_web_content(url)
+      raw_uri           = URI.parse url
       proxy             = ENV['http_proxy']
       if proxy
         proxy_uri       = URI.parse(proxy)
@@ -84,12 +106,6 @@ module Jekyll
       https.verify_mode = OpenSSL::SSL::VERIFY_NONE
       request           = Net::HTTP::Get.new raw_uri.request_uri
       data              = https.request request
-      if data.code.to_i != 200
-        raise RuntimeError, "Gist replied with #{data.code} for #{gist_url}"
-      end
-      data              = data.body
-      cache gist, file, data unless @cache_disabled
-      data
     end
   end
 
-- 
cgit v1.2.1