Checkpoint

上级 34f058e0
module AbstractController
module Layouts
def self.included(base)
base.extend ClassMethods
end
module ClassMethods
def _layout() end
end
def _render_template(template, options)
_action_view._render_template_with_layout(template, options[:_layout])
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
\ No newline at end of file
......@@ -7,31 +7,5 @@ def render_to_string(options)
super
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
\ No newline at end of file
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
\ No newline at end of file
$:.unshift(File.dirname(__FILE__) + '/../../lib')
$:.unshift(File.dirname(__FILE__) + '/../../../activesupport/lib')
$:.unshift(File.dirname(__FILE__) + '/../lib')
require 'test/unit'
require 'active_support'
require 'active_support/test_case'
require 'action_controller'
require 'action_view/base'
require 'fixture_template'
begin
require 'ruby-debug'
......
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
\ No newline at end of file
$:.unshift(File.dirname(__FILE__) + '/../../lib')
$:.unshift(File.dirname(__FILE__) + '/../../../activesupport/lib')
$:.unshift(File.dirname(__FILE__) + '/../lib')
require 'test/unit'
require 'active_support'
require 'active_support/test_case'
require 'action_controller'
require 'action_view/base'
require 'fixture_template'
begin
require 'ruby-debug'
......@@ -50,42 +52,6 @@ def self.subclasses
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
class Rack::TestCase < ActiveSupport::TestCase
include Rack::Test::Methods
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册