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:
parent
bb530923bc
commit
0f2914be40
6 changed files with 49 additions and 13 deletions
|
@ -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'
|
||||
|
|
|
@ -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))
|
||||
|
|
40
actionpack/lib/action_view/context.rb
Normal file
40
actionpack/lib/action_view/context.rb
Normal 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
|
|
@ -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}"
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue