From 6ce3aa2667637ee1a1342c7ad24f0077d73f1c5a Mon Sep 17 00:00:00 2001 From: Thibaut Date: Sun, 7 Jun 2015 16:54:16 -0400 Subject: [PATCH] Always use full-app mode for user-enabled docs Fixes #209. --- lib/app.rb | 20 +++++++++++++------- test/app_test.rb | 18 ++++++++++++++++-- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/lib/app.rb b/lib/app.rb index 9bbb463d..659d95fa 100644 --- a/lib/app.rb +++ b/lib/app.rb @@ -98,15 +98,19 @@ class App < Sinatra::Application browser.ie? && %w(6 7 8 9).include?(browser.version) end - def doc_index_urls - cookie = cookies[:docs] - - docs = if cookie.nil? || cookie.empty? - settings.default_docs - else - cookie.split('/') + def docs + @docs ||= begin + cookie = cookies[:docs] + + docs = if cookie.nil? || cookie.empty? + settings.default_docs + else + cookie.split('/') + end end + end + def doc_index_urls docs.inject [] do |result, slug| if doc = settings.docs[slug] result << File.join('', settings.docs_prefix, doc['index_path']) + "?#{doc['mtime']}" @@ -212,6 +216,8 @@ class App < Sinatra::Application redirect "/#{doc}#{type}/#{query_string_for_redirection}" elsif rest.length > 1 && rest.end_with?('/') redirect "/#{doc}#{type}#{rest[0...-1]}#{query_string_for_redirection}" + elsif docs.include?(doc) && browser.modern? + redirect "/##{request.path}", 302 else erb :other end diff --git a/test/app_test.rb b/test/app_test.rb index 74dd01ce..ab1d6990 100644 --- a/test/app_test.rb +++ b/test/app_test.rb @@ -95,8 +95,22 @@ class AppTest < MiniTest::Spec end describe "/[doc]" do - it "works when the doc exists" do - get '/html/' + it "renders when the doc exists and isn't enabled" do + set_cookie('docs=css') + get '/html/', {}, 'HTTP_USER_AGENT' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:39.0) Gecko/20100101 Firefox/39.0' + assert last_response.ok? + end + + it "redirects to root when the doc exists and is enabled" do + set_cookie('docs=html') + get '/html/', {}, 'HTTP_USER_AGENT' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:39.0) Gecko/20100101 Firefox/39.0' + assert last_response.redirect? + assert_equal 'http://example.org/#/html/', last_response['Location'] + end + + it "renders when the doc exists and is enabled, and the request is from Googlebot" do + set_cookie('docs=html') + get '/html/', {}, 'HTTP_USER_AGENT' => 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)' assert last_response.ok? end