Changeset 704

Show
Ignore:
Timestamp:
01/28/08 11:31:40 (7 months ago)
Author:
seancribbs
Message:

share_layouts: Allow RailsPage? models to be stored in the database so custom controllers can use the page tree for generated content.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/extensions/share_layouts/lib/share_layouts/helper.rb

    r586 r704  
    11module ShareLayouts::Helper 
    2   class TransactionBreak < StandardError; end 
    32   
    43  def radiant_layout(name = @radiant_layout) 
    54    returning String.new do |output| 
    6       page = ShareLayouts::RailsPage.new(:class_name => "ShareLayouts::RailsPage") 
     5      page = find_page 
    76      assign_attributes!(page, name) 
    87      page.build_parts_from_hash!(extract_captures)  
     
    1312  def assign_attributes!(page, name = @radiant_layout) 
    1413    page._layout = Layout.find_by_name(name) 
    15     page.title = @title || @content_for_title || '' 
    16     page.breadcrumbs = @breadcrumbs || @content_for_breadcrumbs || '' 
     14    page.title = @title || @content_for_title || page.title || '' 
     15    page.breadcrumbs = @breadcrumbs || @content_for_breadcrumbs || page.breadcrumbs || '' 
    1716    page.request_uri = request.request_uri 
    1817    page.request = request 
     
    3231    end 
    3332  end 
     33   
     34  def find_page 
     35    page = Page.find_by_url(request.request_uri) rescue nil 
     36    page.is_a?(RailsPage) ? page : RailsPage.new(:class_name => "RailsPage") 
     37  end 
    3438end 
  • trunk/extensions/share_layouts/share_layouts_extension.rb

    r586 r704  
    33 
    44class ShareLayoutsExtension < Radiant::Extension 
    5   version "0.2
     5  version "0.3
    66  description "Allows Radiant layouts to be used as layouts for standard Rails actions." 
    77  url "http://wiki.radiantcms.org/Thirdparty_Extensions" 
    88 
    99  def activate 
     10    RailsPage 
    1011    ActionController::Base.send :include, ShareLayouts::RadiantLayouts 
    1112    ApplicationController.send :helper, ShareLayouts::Helper 
  • trunk/extensions/share_layouts/test/functional/share_layouts_test.rb

    r586 r704  
    104104    get :normal_erb_with_different_erb_layout 
    105105    assert_response :success 
    106     assert_match "Radiant CMS", @response.body 
    107106    assert_match "#{@erb_content}", @response.body 
    108107  end 
  • trunk/extensions/share_layouts/test/unit/rails_page_test.rb

    r494 r704  
    44class RailsPageTest < Test::Unit::TestCase 
    55  test_helper :render, :page 
     6  fixtures :pages 
    67  def setup 
    7     @page = ShareLayouts::RailsPage.new(page_params(:class_name => "ShareLayouts::RailsPage", :request_uri => "http://example.com/some/page")) 
     8    @page = RailsPage.new(page_params(:class_name => "RailsPage", :request_uri => "http://example.com/some/page")) 
    89  end 
    910   
     
    3334    assert_equal hash.keys.size, @page.parts.size 
    3435  end 
     36   
     37  def test_should_find_rails_page_for_all_sub_urls 
     38    assert_equal pages(:rails_page), Page.find_by_url('/app/') 
     39    assert_equal pages(:other), Page.find_by_url('/other/') 
     40    assert_equal pages(:rails_page), Page.find_by_url('/app/some-other-url/') 
     41    assert_equal pages(:rails_page), Page.find_by_url('/app/some-other-url/sub-url/') 
     42  end 
     43   
     44  def test_should_defer_to_default_url_when_not_initialized 
     45    assert_equal '/app/', pages(:rails_page).url 
     46  end 
    3547end 
  • trunk/extensions/share_layouts/test/unit/share_layouts_helper_test.rb

    r586 r704  
    33class ShareLayoutsHelperTest < Test::Unit::TestCase 
    44  include ShareLayouts::Helper 
    5   fixtures :layouts 
     5  fixtures :layouts, :pages 
    66  test_helper :page 
    77  attr_accessor :request, :response 
     
    1919 
    2020  def setup 
    21     @page = ShareLayouts::RailsPage.new(page_params(:class_name => "ShareLayouts::RailsPage")) 
     21    @page = RailsPage.new(page_params(:class_name => "RailsPage")) 
    2222    @content_for_layout = "something" 
    2323    @radiant_layout = layouts(:main).name 
     
    6060  end     
    6161 
     62  def test_should_assign_title_from_existing_page_title_when_not_specified 
     63    assign_attributes!(@page) 
     64    assert_equal 'New Page', @page.title 
     65  end 
     66 
    6267  def test_should_assign_empty_title_if_missing 
     68    @page.title = nil 
    6369    assert_nil @title 
    6470    assert_nil @content_for_title 
     71    assert_nil @page.title 
    6572    assign_attributes!(@page) 
    6673    assert_equal '', @page.title 
     
    6875   
    6976  def test_should_assign_empty_breadcrumbs_if_missing 
     77    @page.breadcrumbs = nil 
    7078    assert_nil @breadcrumbs 
    7179    assert_nil @content_for_breadcrumbs 
     80    assert_nil @page.breadcrumbs 
    7281    assign_attributes!(@page) 
    73     assert_equal '', @page.title 
     82    assert_equal '', @page.breadcrumbs 
    7483  end 
    7584 
     
    8493    assert_equal MAIN_RESULT.strip, radiant_layout.strip 
    8594  end 
     95   
     96  def test_should_find_page 
     97    @request.request_uri = "/app/something/" 
     98    assert_equal pages(:rails_page), find_page 
     99    assert_kind_of RailsPage, find_page 
     100    @request.request_uri = "/some-other/url/" 
     101    assert_not_equal pages(:rails_page), find_page 
     102    assert_kind_of RailsPage, find_page 
     103  end 
    86104end