Skip to content

Commit

Permalink
Checkpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
wycats committed Mar 23, 2009
1 parent 34f058e commit a501638
Show file tree
Hide file tree
Showing 6 changed files with 139 additions and 62 deletions.
36 changes: 36 additions & 0 deletions actionpack/lib/action_controller/abstract/layouts.rb
Original file line number Original file line Diff line number Diff line change
@@ -1,7 +1,43 @@
module AbstractController module AbstractController
module Layouts module Layouts

def self.included(base)
base.extend ClassMethods
end

module ClassMethods
def _layout() end
end

def _render_template(template, options) def _render_template(template, options)
_action_view._render_template_with_layout(template, options[:_layout]) _action_view._render_template_with_layout(template, options[:_layout])
end end

private

def _layout_for_option(name)
case name
when String then _layout_for_name(name)
when true then _default_layout(true)
when false then nil
end
end

def _layout_for_name(name)
view_paths.find_by_parts(name, formats, "layouts")
end

def _default_layout(require_layout = false)
# begin
# _layout_for_name(controller_path)
# rescue ActionView::MissingTemplate
# begin
# _layout_for_name("application")
# rescue ActionView::MissingTemplate => e
# raise e if require_layout
# end
# end
_layout_for_option(self.class._layout)
end
end end
end end
26 changes: 0 additions & 26 deletions actionpack/lib/action_controller/new_base/layouts.rb
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -7,31 +7,5 @@ def render_to_string(options)


super super
end end

private

def _layout_for_option(name)
case name
when String then _layout_for_name(name)
when true then _default_layout(true)
when false then nil
end
end

def _layout_for_name(name)
view_paths.find_by_parts(name, formats, "layouts")
end

def _default_layout(require_layout = false)
begin
_layout_for_name(controller_path)
rescue ActionView::MissingTemplate
begin
_layout_for_name("application")
rescue ActionView::MissingTemplate => e
raise e if require_layout
end
end
end
end end
end end
64 changes: 64 additions & 0 deletions actionpack/test/abstract_controller/layouts_test.rb
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,64 @@
require File.join(File.expand_path(File.dirname(__FILE__)), "test_helper")

module AbstractControllerTests
module Layouts

# Base controller for these tests
class Base < AbstractController::Base
include AbstractController::Renderer
include AbstractController::Layouts

self.view_paths = [ActionView::FixtureTemplate::FixturePath.new(
"layouts/hello.html.erb" => "With String <%= yield %>"
)]

def render_to_string(options)
options[:_layout] = _default_layout
super
end
end

class Blank < Base
self.view_paths = []

def index
render :_template => ActionView::TextTemplate.new("Hello blank!")
end
end

class WithString < Base
layout "hello"

def index
render :_template => ActionView::TextTemplate.new("Hello string!")
end
end

class WithMissingLayout < Base
layout "missing"

def index
render :_template => ActionView::TextTemplate.new("Hello missing!")
end
end


class TestBase < ActiveSupport::TestCase
test "when no layout is specified, and no default is available, render without a layout" do
result = Blank.process(:index)
assert_equal "Hello blank!", result.response_obj[:body]
end

test "when layout is specified as a string, render with that layout" do
result = Blank.process(:index)
assert_equal "With String Hello string!", result.response_obj[:body]
end

test "when layout is specified as a string, but the layout is missing, raise an exception" do
assert_raises(ActionView::MissingTemplate) { WithMissingLayout.process(:index) }
end
end


end
end
2 changes: 2 additions & 0 deletions actionpack/test/abstract_controller/test_helper.rb
Original file line number Original file line Diff line number Diff line change
@@ -1,11 +1,13 @@
$:.unshift(File.dirname(__FILE__) + '/../../lib') $:.unshift(File.dirname(__FILE__) + '/../../lib')
$:.unshift(File.dirname(__FILE__) + '/../../../activesupport/lib') $:.unshift(File.dirname(__FILE__) + '/../../../activesupport/lib')
$:.unshift(File.dirname(__FILE__) + '/../lib')


require 'test/unit' require 'test/unit'
require 'active_support' require 'active_support'
require 'active_support/test_case' require 'active_support/test_case'
require 'action_controller' require 'action_controller'
require 'action_view/base' require 'action_view/base'
require 'fixture_template'


begin begin
require 'ruby-debug' require 'ruby-debug'
Expand Down
35 changes: 35 additions & 0 deletions actionpack/test/lib/fixture_template.rb
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,35 @@
module ActionView #:nodoc:
class FixtureTemplate < Template
class FixturePath < Template::Path
def initialize(hash = {})
@hash = {}

hash.each do |k, v|
@hash[k.sub(/\.\w+$/, '')] = FixtureTemplate.new(v, k.split("/").last, self)
end

super("fixtures://root")
end

def find_template(path)
@hash[path]
end
end

def initialize(body, *args)
@body = body
super(*args)
end

def source
@body
end

private

def find_full_path(path, load_paths)
return '/', path
end

end
end
38 changes: 2 additions & 36 deletions actionpack/test/new_base/test_helper.rb
Original file line number Original file line Diff line number Diff line change
@@ -1,11 +1,13 @@
$:.unshift(File.dirname(__FILE__) + '/../../lib') $:.unshift(File.dirname(__FILE__) + '/../../lib')
$:.unshift(File.dirname(__FILE__) + '/../../../activesupport/lib') $:.unshift(File.dirname(__FILE__) + '/../../../activesupport/lib')
$:.unshift(File.dirname(__FILE__) + '/../lib')


require 'test/unit' require 'test/unit'
require 'active_support' require 'active_support'
require 'active_support/test_case' require 'active_support/test_case'
require 'action_controller' require 'action_controller'
require 'action_view/base' require 'action_view/base'
require 'fixture_template'


begin begin
require 'ruby-debug' require 'ruby-debug'
Expand Down Expand Up @@ -50,42 +52,6 @@ def self.subclasses
end end
end end


module ActionView #:nodoc:
class FixtureTemplate < Template
class FixturePath < Template::Path
def initialize(hash = {})
@hash = {}

hash.each do |k, v|
@hash[k.sub(/\.\w+$/, '')] = FixtureTemplate.new(v, k.split("/").last, self)
end

super("fixtures://root")
end

def find_template(path)
@hash[path]
end
end

def initialize(body, *args)
@body = body
super(*args)
end

def source
@body
end

private

def find_full_path(path, load_paths)
return '/', path
end

end
end

# Temporary base class # Temporary base class
class Rack::TestCase < ActiveSupport::TestCase class Rack::TestCase < ActiveSupport::TestCase
include Rack::Test::Methods include Rack::Test::Methods
Expand Down

0 comments on commit a501638

Please sign in to comment.