1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Separate ActionView::Context so something else can easily be made into an AV context

This commit is contained in:
Yehuda Katz 2009-07-19 22:12:15 +09:00
parent bb530923bc
commit 0f2914be40
6 changed files with 49 additions and 13 deletions

View file

@ -30,10 +30,11 @@ require File.join(File.dirname(__FILE__), "action_pack")
module ActionView
def self.load_all!
[Base, InlineTemplate, TemplateError]
[Context, Base, InlineTemplate, TemplateError]
end
autoload :Base, 'action_view/base'
autoload :Context, 'action_view/context'
autoload :Helpers, 'action_view/helpers'
autoload :InlineTemplate, 'action_view/template/inline'
autoload :MissingTemplate, 'action_view/base'

View file

@ -172,8 +172,6 @@ module ActionView #:nodoc:
attr_accessor :controller
attr_internal :captures
attr_accessor :output_buffer
class << self
delegate :erb_trim_mode=, :to => 'ActionView::TemplateHandlers::ERB'
delegate :logger, :to => 'ActionController::Base', :allow_nil => true
@ -206,10 +204,7 @@ module ActionView #:nodoc:
delegate :find_by_parts, :to => :view_paths
module CompiledTemplates #:nodoc:
# holds compiled template code
end
include CompiledTemplates
include Context
def self.process_view_paths(value)
ActionView::PathSet.new(Array(value))

View file

@ -0,0 +1,40 @@
module ActionView
module CompiledTemplates #:nodoc:
# holds compiled template code
end
# ActionView contexts are supplied to ActionController
# to render template. The default ActionView context
# is ActionView::Base.
#
# In order to work with ActionController, a Context
# must implement:
#
# Context.for_controller[controller] Create a new ActionView instance for a
# controller
# Context#_render_partial_from_controller[options]
# - responsible for setting options[:_template]
# - Returns String with the rendered partial
# options<Hash>:: see _render_partial in ActionView::Base
# Context#_render_template_from_controller[template, layout, options, partial]
# - Returns String with the rendered template
# template<ActionView::Template>:: The template to render
# layout<ActionView::Template>:: The layout to render around the template
# options<Hash>:: See _render_template_with_layout in ActionView::Base
# partial<Boolean>:: Whether or not the template to render is a partial
#
# An ActionView context can also mix in ActionView's
# helpers. In order to mix in helpers, a context must
# implement:
#
# Context#controller
# - Returns an instance of AbstractController
#
# In any case, a context must mix in ActionView::Context,
# which stores compiled template and provides the output
# buffer.
module Context
include CompiledTemplates
attr_accessor :output_buffer
end
end

View file

@ -12,9 +12,9 @@ module ActionView
end
def load!
names = Base::CompiledTemplates.instance_methods.grep(/#{method_name_without_locals}/)
names = CompiledTemplates.instance_methods.grep(/#{method_name_without_locals}/)
names.each do |name|
Base::CompiledTemplates.class_eval do
CompiledTemplates.class_eval do
remove_method(name)
end
end
@ -56,7 +56,7 @@ module ActionView
def compile(local_assigns)
render_symbol = method_name(local_assigns)
if !Base::CompiledTemplates.method_defined?(render_symbol) || recompile?
if !CompiledTemplates.method_defined?(render_symbol) || recompile?
compile!(render_symbol, local_assigns)
end
end
@ -74,7 +74,7 @@ module ActionView
end_src
begin
ActionView::Base::CompiledTemplates.module_eval(source, filename.to_s, 0)
ActionView::CompiledTemplates.module_eval(source, filename.to_s, 0)
rescue Exception => e # errors from template code
if logger = defined?(ActionController) && Base.logger
logger.debug "ERROR: compiling #{render_symbol} RAISED #{e}"

View file

@ -75,7 +75,7 @@ module ActionView
end
begin
ActionView::Base::CompiledTemplates.module_eval(source, identifier, line)
ActionView::CompiledTemplates.module_eval(source, identifier, line)
method_name
rescue Exception => e # errors from template code
if logger = (view && view.logger)

View file

@ -3,7 +3,7 @@ require 'controller/fake_models'
class CompiledTemplatesTest < Test::Unit::TestCase
def setup
@compiled_templates = ActionView::Base::CompiledTemplates
@compiled_templates = ActionView::CompiledTemplates
@compiled_templates.instance_methods.each do |m|
@compiled_templates.send(:remove_method, m) if m =~ /^_render_template_/
end