Compatiblity with edge Rails buffer management.

This commit is contained in:
Nathan Weizenbaum 2008-06-08 20:38:46 -07:00
parent c9ee6bf1d4
commit df04902ca3
1 changed files with 59 additions and 36 deletions

View File

@ -7,56 +7,79 @@ if defined?(ActionView) and not defined?(Merb::Plugins)
end
alias_method :render_without_haml, :render
alias_method :render, :render_with_haml
# Rails >2.1
if instance_methods.include?('output_buffer')
def output_buffer_with_haml
return haml_buffer.buffer if is_haml?
output_buffer_without_haml
end
alias_method :output_buffer_without_haml, :output_buffer
alias_method :output_buffer, :output_buffer_with_haml
def set_output_buffer_with_haml(new)
if is_haml?
haml_buffer.buffer = new
else
set_output_buffer_without_haml new
end
end
alias_method :set_output_buffer_without_haml, :output_buffer=
alias_method :output_buffer=, :set_output_buffer_with_haml
end
end
# This overrides various helpers in ActionView
# to make them work more effectively with Haml.
module Helpers
# :stopdoc:
module CaptureHelper
def capture_with_haml(*args, &block)
# Rails' #capture helper will just return the value of the block
# if it's not actually in the template context,
# as detected by the existance of an _erbout variable.
# We've got to do the same thing for compatibility.
block_is_haml =
begin
eval('_hamlout', block)
true
rescue
false
# Rails <=2.1
unless ActionView::Base.instance_methods.include?('output_buffer')
module CaptureHelper
def capture_with_haml(*args, &block)
# Rails' #capture helper will just return the value of the block
# if it's not actually in the template context,
# as detected by the existance of an _erbout variable.
# We've got to do the same thing for compatibility.
block_is_haml =
begin
eval('_hamlout', block)
true
rescue
false
end
if block_is_haml && is_haml?
capture_haml(*args, &block)
else
capture_without_haml(*args, &block)
end
if block_is_haml && is_haml?
capture_haml(*args, &block)
else
capture_without_haml(*args, &block)
end
end
alias_method :capture_without_haml, :capture
alias_method :capture, :capture_with_haml
alias_method :capture_without_haml, :capture
alias_method :capture, :capture_with_haml
def capture_erb_with_buffer_with_haml(*args, &block)
if is_haml?
capture_haml_with_buffer(*args, &block)
else
capture_erb_with_buffer_without_haml(*args, &block)
def capture_erb_with_buffer_with_haml(*args, &block)
if is_haml?
capture_haml_with_buffer(*args, &block)
else
capture_erb_with_buffer_without_haml(*args, &block)
end
end
alias_method :capture_erb_with_buffer_without_haml, :capture_erb_with_buffer
alias_method :capture_erb_with_buffer, :capture_erb_with_buffer_with_haml
end
alias_method :capture_erb_with_buffer_without_haml, :capture_erb_with_buffer
alias_method :capture_erb_with_buffer, :capture_erb_with_buffer_with_haml
end
module TextHelper
def concat_with_haml(string, binding = nil)
if is_haml?
haml_buffer.buffer.concat(string)
else
concat_without_haml(string, binding)
module TextHelper
def concat_with_haml(string, binding = nil)
if is_haml?
haml_buffer.buffer.concat(string)
else
concat_without_haml(string, binding)
end
end
alias_method :concat_without_haml, :concat
alias_method :concat, :concat_with_haml
end
alias_method :concat_without_haml, :concat
alias_method :concat, :concat_with_haml
end
module TagHelper