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
|
module ActionView
|
||||||
def self.load_all!
|
def self.load_all!
|
||||||
[Base, InlineTemplate, TemplateError]
|
[Context, Base, InlineTemplate, TemplateError]
|
||||||
end
|
end
|
||||||
|
|
||||||
autoload :Base, 'action_view/base'
|
autoload :Base, 'action_view/base'
|
||||||
|
autoload :Context, 'action_view/context'
|
||||||
autoload :Helpers, 'action_view/helpers'
|
autoload :Helpers, 'action_view/helpers'
|
||||||
autoload :InlineTemplate, 'action_view/template/inline'
|
autoload :InlineTemplate, 'action_view/template/inline'
|
||||||
autoload :MissingTemplate, 'action_view/base'
|
autoload :MissingTemplate, 'action_view/base'
|
||||||
|
|
|
@ -172,8 +172,6 @@ module ActionView #:nodoc:
|
||||||
attr_accessor :controller
|
attr_accessor :controller
|
||||||
attr_internal :captures
|
attr_internal :captures
|
||||||
|
|
||||||
attr_accessor :output_buffer
|
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
delegate :erb_trim_mode=, :to => 'ActionView::TemplateHandlers::ERB'
|
delegate :erb_trim_mode=, :to => 'ActionView::TemplateHandlers::ERB'
|
||||||
delegate :logger, :to => 'ActionController::Base', :allow_nil => true
|
delegate :logger, :to => 'ActionController::Base', :allow_nil => true
|
||||||
|
@ -206,10 +204,7 @@ module ActionView #:nodoc:
|
||||||
|
|
||||||
delegate :find_by_parts, :to => :view_paths
|
delegate :find_by_parts, :to => :view_paths
|
||||||
|
|
||||||
module CompiledTemplates #:nodoc:
|
include Context
|
||||||
# holds compiled template code
|
|
||||||
end
|
|
||||||
include CompiledTemplates
|
|
||||||
|
|
||||||
def self.process_view_paths(value)
|
def self.process_view_paths(value)
|
||||||
ActionView::PathSet.new(Array(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
|
end
|
||||||
|
|
||||||
def load!
|
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|
|
names.each do |name|
|
||||||
Base::CompiledTemplates.class_eval do
|
CompiledTemplates.class_eval do
|
||||||
remove_method(name)
|
remove_method(name)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -56,7 +56,7 @@ module ActionView
|
||||||
def compile(local_assigns)
|
def compile(local_assigns)
|
||||||
render_symbol = method_name(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)
|
compile!(render_symbol, local_assigns)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -74,7 +74,7 @@ module ActionView
|
||||||
end_src
|
end_src
|
||||||
|
|
||||||
begin
|
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
|
rescue Exception => e # errors from template code
|
||||||
if logger = defined?(ActionController) && Base.logger
|
if logger = defined?(ActionController) && Base.logger
|
||||||
logger.debug "ERROR: compiling #{render_symbol} RAISED #{e}"
|
logger.debug "ERROR: compiling #{render_symbol} RAISED #{e}"
|
||||||
|
|
|
@ -75,7 +75,7 @@ module ActionView
|
||||||
end
|
end
|
||||||
|
|
||||||
begin
|
begin
|
||||||
ActionView::Base::CompiledTemplates.module_eval(source, identifier, line)
|
ActionView::CompiledTemplates.module_eval(source, identifier, line)
|
||||||
method_name
|
method_name
|
||||||
rescue Exception => e # errors from template code
|
rescue Exception => e # errors from template code
|
||||||
if logger = (view && view.logger)
|
if logger = (view && view.logger)
|
||||||
|
|
|
@ -3,7 +3,7 @@ require 'controller/fake_models'
|
||||||
|
|
||||||
class CompiledTemplatesTest < Test::Unit::TestCase
|
class CompiledTemplatesTest < Test::Unit::TestCase
|
||||||
def setup
|
def setup
|
||||||
@compiled_templates = ActionView::Base::CompiledTemplates
|
@compiled_templates = ActionView::CompiledTemplates
|
||||||
@compiled_templates.instance_methods.each do |m|
|
@compiled_templates.instance_methods.each do |m|
|
||||||
@compiled_templates.send(:remove_method, m) if m =~ /^_render_template_/
|
@compiled_templates.send(:remove_method, m) if m =~ /^_render_template_/
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue