Removed Hoe code, dependency.
[merb_radiant.git] / app / controllers / site.rb
blob076c03b264cb5a2bdd483c682da7afbc316e242c
1 class Site < Application
2   session :off
3   
4   no_login_required
5   
6   attr_accessor :config, :cache
7   
8   def initialize
9     @config = MerbRadiant::Config
10     @cache = ResponseCache.instance
11   end
12   
13   def show_page
14     response.headers.delete('Cache-Control')
15     
16     url = params[:url]
17     if Array === url
18       url = url.join('/')
19     else
20       url = url.to_s
21     end
22     
23     if (request.get? || request.head?) and live? and (@cache.response_cached?(url))
24       @cache.update_response(url, response, request)
25       @performed_render = true
26     else
27       show_uncached_page(url)
28     end
29   end
30   
31   private
32     
33     def find_page(url)
34       found = Page.find_by_url(url, live?)
35       found if found and (found.published? or dev?)
36     end
38     def process_page(page)
39       page.process(request, response)
40     end
41     
42     def show_uncached_page(url)
43       @page = find_page(url)
44       unless @page.nil?
45         process_page(@page)
46         @cache.cache_response(url, response) if request.get? and live? and @page.cache?
47         @performed_render = true
48       else
49         render :template => 'site/not_found', :status => 404
50       end
51     rescue Page::MissingRootPageError
52       redirect_to welcome_url
53     end
55     def dev?
56       if dev_host = @config['dev.host']
57         request.host == dev_host
58       else
59         request.host =~ /^dev\./
60       end
61     end
62     
63     def live?
64       not dev?
65     end
67 end