adjusting layout css/js rendering
Oleg
committed Oct 01, 2010
commit 0a78f42735a541dd145d1062b2c23ea69158c747
Showing 6
changed files with
26 additions
and 47 deletions
app/controllers/cms_content_controller.rb
+13
-9
| @@ | @@ -1,21 +1,19 @@ |
| class CmsContentController < ApplicationController | |
| - | before_filter :load_cms_page |
| + | |
| + | before_filter :load_cms_page, :only => :render_html |
| + | before_filter :load_cms_layout, :only => [:render_css, :render_js] |
| - | def render_page |
| + | def render_html |
| # TODO | |
| - | render :text => 'found' |
| + | render :inline => @cms_page.content |
| end | |
| def render_css | |
| - | send_data @cms_page.cms_layout.merged_css, |
| - | :filename => 'styles.css', |
| - | :type => 'text/css' |
| + | render :text => @cms_layout.merged_css, :content_type => 'text/css' |
| end | |
| def render_js | |
| - | send_data @cms_page.cms_layout.merged_js, |
| - | :filename => 'jscript.js', |
| - | :type => 'text/javascript' |
| + | render :text => @cms_layout.merged_js, :content_type => 'text/javascript' |
| end | |
| protected | |
| @@ | @@ -26,4 +24,10 @@ protected |
| render :text => 'Page not found', :status => 404 | |
| end | |
| + | def load_cms_layout |
| + | @cms_layout = CmsLayout.find(params[:id]) |
| + | rescue ActiveRecord::RecordNotFound |
| + | render :nothing => true, :status => 404 |
| + | end |
| + | |
| end | |
app/models/cms_layout.rb
+2
-4
| @@ | @@ -39,13 +39,11 @@ class CmsLayout < ActiveRecord::Base |
| end | |
| def merged_css | |
| - | delimeter = '\n/* -------------------- */\n' |
| - | self.ancestors.inject([self.css]){|result, l| result << l.css}.join(delimeter) |
| + | self.parent ? self.parent.merged_css + self.css : self.css.to_s |
| end | |
| def merged_js | |
| - | delimeter = '\n// --------------------\n' |
| - | self.ancestors.inject([self.js]){|result, l| result << l.js}.join(delimeter) |
| + | self.parent ? self.parent.merged_js + self.js : self.js.to_s |
| end | |
| end | |
config/routes.rb
+4
-4
| @@ | @@ -11,10 +11,10 @@ Rails.application.routes.draw do |
| resources :uploads | |
| end | |
| - | scope :controller => :cms_content, :path => '(*cms_path)' do |
| - | get '/styles.css' => :render_css |
| - | get '/jscript.js' => :render_js |
| - | get '/' => :render_page |
| + | scope :controller => :cms_content do |
| + | get '/cms-css/:id' => :render_css, :format => 'css' |
| + | get '/cms-js/:id' => :render_js, :format => 'js' |
| + | get '/' => :render_html, :path => '(*cms_path)' |
| end | |
| end | |
test/fixtures/cms_pages.yml
+0
-9
| @@ | @@ -14,13 +14,4 @@ child: |
| slug: 'child-page' | |
| full_path: '/child-page' | |
| children_count: 0 | |
| - | position: 0 |
| - | |
| - | with_nested_layout: |
| - | parent: default |
| - | cms_layout: child |
| - | label: Page with nested layout |
| - | slug: 'with-nested_layout' |
| - | full_path: '/with-nested_layout' |
| - | children_count: 0 |
| position: 0 | |
| \ No newline at end of file | |
test/functional/cms_content_controller_test.rb
+5
-19
| @@ | @@ -3,43 +3,29 @@ require File.dirname(__FILE__) + '/../test_helper' |
| class CmsContentControllerTest < ActionController::TestCase | |
| def test_render_page | |
| - | get :render_page, :cms_path => '' |
| + | get :render_html, :cms_path => '' |
| assert_equal assigns(:cms_page), cms_pages(:default) | |
| assert_response :success | |
| end | |
| def test_render_css | |
| - | get :render_css, :cms_path => '' |
| + | get :render_css, :id => cms_layouts(:default) |
| assert_response :success | |
| assert_match %r{text\/css}, @response.headers["Content-Type"] | |
| assert_equal cms_layouts(:default).css, @response.body | |
| end | |
| - | def test_render_nested_css |
| - | get :render_css, :cms_path => 'with-nested_layout' |
| - | assert_response :success |
| - | assert_match %r{text\/css}, @response.headers["Content-Type"] |
| - | assert_equal assigns(:cms_page).cms_layout.merged_css, @response.body |
| - | end |
| - | |
| def test_render_js | |
| - | get :render_js, :cms_path => '' |
| + | get :render_js, :id => cms_layouts(:default) |
| assert_response :success | |
| assert_match %r{text\/javascript}, @response.headers["Content-Type"] | |
| assert_equal cms_layouts(:default).js, @response.body | |
| end | |
| - | def test_render_nested_js |
| - | get :render_js, :cms_path => 'with-nested_layout' |
| - | assert_response :success |
| - | assert_match %r{text\/javascript}, @response.headers["Content-Type"] |
| - | assert_equal assigns(:cms_page).cms_layout.merged_js, @response.body |
| - | end |
| - | |
| def test_render_css_and_js_for_nonexistent_layout | |
| - | get :render_css, :cms_path => 'bogus' |
| + | get :render_css, :id => 'bogus' |
| assert_response 404 | |
| - | get :render_js, :cms_path => 'bogus' |
| + | get :render_js, :id => 'bogus' |
| assert_response 404 | |
| end | |
test/unit/cms_layout_test.rb
+2
-2
| @@ | @@ -32,12 +32,12 @@ class CmsLayoutTest < ActiveSupport::TestCase |
| end | |
| def test_merged_css | |
| - | merged_css = [cms_layouts(:child).css, cms_layouts(:nested).css].join('\n/* -------------------- */\n') |
| + | merged_css = cms_layouts(:nested).css + cms_layouts(:child).css |
| assert_equal merged_css, cms_layouts(:child).merged_css | |
| end | |
| def test_merged_js | |
| - | merged_js = [cms_layouts(:child).js, cms_layouts(:nested).js].join('\n// --------------------\n') |
| + | merged_js = cms_layouts(:nested).js + cms_layouts(:child).js |
| assert_equal merged_js, cms_layouts(:child).merged_js | |
| end | |