aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--actionpack/lib/action_view/helpers.rb1
-rw-r--r--actionpack/lib/action_view/helpers/capture_helper.rb14
-rw-r--r--actionpack/lib/action_view/helpers/deprecated_block_helpers.rb52
-rw-r--r--actionpack/lib/action_view/helpers/form_helper.rb23
-rw-r--r--actionpack/lib/action_view/helpers/form_options_helper.rb2
-rw-r--r--actionpack/lib/action_view/helpers/form_tag_helper.rb20
-rw-r--r--actionpack/lib/action_view/helpers/javascript_helper.rb8
-rw-r--r--actionpack/lib/action_view/helpers/tag_helper.rb26
-rw-r--r--actionpack/lib/action_view/template/handlers/erb.rb54
-rw-r--r--actionpack/test/template/date_helper_test.rb14
-rw-r--r--actionpack/test/template/erb/tag_helper_test.rb82
-rw-r--r--actionpack/test/template/form_helper_test.rb144
-rw-r--r--actionpack/test/template/form_options_helper_test.rb22
-rw-r--r--actionpack/test/template/form_tag_helper_test.rb18
-rw-r--r--actionpack/test/template/javascript_helper_test.rb12
-rw-r--r--actionpack/test/template/tag_helper_test.rb16
-rw-r--r--rails.gemspec1
17 files changed, 331 insertions, 178 deletions
diff --git a/actionpack/lib/action_view/helpers.rb b/actionpack/lib/action_view/helpers.rb
index b4f649385a..e359b0bdac 100644
--- a/actionpack/lib/action_view/helpers.rb
+++ b/actionpack/lib/action_view/helpers.rb
@@ -10,6 +10,7 @@ module ActionView #:nodoc:
autoload :CsrfHelper, 'action_view/helpers/csrf_helper'
autoload :DateHelper, 'action_view/helpers/date_helper'
autoload :DebugHelper, 'action_view/helpers/debug_helper'
+ autoload :DeprecatedBlockHelpers, 'action_view/helpers/deprecated_block_helpers'
autoload :FormHelper, 'action_view/helpers/form_helper'
autoload :FormOptionsHelper, 'action_view/helpers/form_options_helper'
autoload :FormTagHelper, 'action_view/helpers/form_tag_helper'
diff --git a/actionpack/lib/action_view/helpers/capture_helper.rb b/actionpack/lib/action_view/helpers/capture_helper.rb
index 8c48300ed3..75fc2fddeb 100644
--- a/actionpack/lib/action_view/helpers/capture_helper.rb
+++ b/actionpack/lib/action_view/helpers/capture_helper.rb
@@ -30,14 +30,10 @@ module ActionView
# <b><%= @greeting %></b>
# </body></html>
#
- def capture(*args, &block)
- # Return captured buffer in erb.
- if block_called_from_erb?(block)
- with_output_buffer { block.call(*args) }
- else
- # Return block result otherwise, but protect buffer also.
- with_output_buffer { return block.call(*args) }
- end
+ def capture(*args)
+ value = nil
+ buffer = with_output_buffer { value = yield *args }
+ buffer.presence || value
end
# Calling content_for stores a block of markup in an identifier for later use.
@@ -143,7 +139,7 @@ module ActionView
# Defaults to a new empty string.
def with_output_buffer(buf = nil) #:nodoc:
unless buf
- buf = ActiveSupport::SafeBuffer.new
+ buf = ActionView::OutputBuffer.new
buf.force_encoding(output_buffer.encoding) if buf.respond_to?(:force_encoding)
end
self.output_buffer, old_buffer = buf, output_buffer
diff --git a/actionpack/lib/action_view/helpers/deprecated_block_helpers.rb b/actionpack/lib/action_view/helpers/deprecated_block_helpers.rb
new file mode 100644
index 0000000000..3d0657e873
--- /dev/null
+++ b/actionpack/lib/action_view/helpers/deprecated_block_helpers.rb
@@ -0,0 +1,52 @@
+module ActionView
+ module Helpers
+ module DeprecatedBlockHelpers
+ extend ActiveSupport::Concern
+
+ include ActionView::Helpers::TagHelper
+ include ActionView::Helpers::TextHelper
+ include ActionView::Helpers::JavaScriptHelper
+ include ActionView::Helpers::FormHelper
+
+ def content_tag(*, &block)
+ block_called_from_erb?(block) ? safe_concat(super) : super
+ end
+
+ def javascript_tag(*, &block)
+ block_called_from_erb?(block) ? safe_concat(super) : super
+ end
+
+ def form_for(*, &block)
+ block_called_from_erb?(block) ? safe_concat(super) : super
+ end
+
+ def form_tag(*, &block)
+ block_called_from_erb?(block) ? safe_concat(super) : super
+ end
+
+ def fields_for(*, &block)
+ block_called_from_erb?(block) ? safe_concat(super) : super
+ end
+
+ def field_set_tag(*, &block)
+ block_called_from_erb?(block) ? safe_concat(super) : super
+ end
+
+ BLOCK_CALLED_FROM_ERB = 'defined? __in_erb_template'
+
+ if RUBY_VERSION < '1.9.0'
+ # Check whether we're called from an erb template.
+ # We'd return a string in any other case, but erb <%= ... %>
+ # can't take an <% end %> later on, so we have to use <% ... %>
+ # and implicitly concat.
+ def block_called_from_erb?(block)
+ block && eval(BLOCK_CALLED_FROM_ERB, block)
+ end
+ else
+ def block_called_from_erb?(block)
+ block && eval(BLOCK_CALLED_FROM_ERB, block.binding)
+ end
+ end
+ end
+ end
+end \ No newline at end of file
diff --git a/actionpack/lib/action_view/helpers/form_helper.rb b/actionpack/lib/action_view/helpers/form_helper.rb
index 742e873a49..48df26efaa 100644
--- a/actionpack/lib/action_view/helpers/form_helper.rb
+++ b/actionpack/lib/action_view/helpers/form_helper.rb
@@ -92,6 +92,10 @@ module ActionView
# link:classes/ActionView/Helpers/DateHelper.html, and
# link:classes/ActionView/Helpers/ActiveRecordHelper.html
module FormHelper
+ extend ActiveSupport::Concern
+
+ include FormTagHelper
+
# Creates a form and a scope around a specific model object that is used
# as a base for questioning about values for the fields.
#
@@ -309,9 +313,9 @@ module ActionView
options[:html][:remote] = true if options.delete(:remote)
- safe_concat(form_tag(options.delete(:url) || {}, options.delete(:html) || {}))
- fields_for(object_name, *(args << options), &proc)
- safe_concat('</form>')
+ output = form_tag(options.delete(:url) || {}, options.delete(:html) || {})
+ output << fields_for(object_name, *(args << options), &proc)
+ output.safe_concat('</form>')
end
def apply_form_for_options!(object_or_array, options) #:nodoc:
@@ -528,7 +532,10 @@ module ActionView
end
builder = options[:builder] || ActionView::Base.default_form_builder
- yield builder.new(object_name, object, self, options, block)
+
+ with_output_buffer do
+ yield builder.new(object_name, object, self, options, block)
+ end
end
# Returns a label tag tailored for labelling an input field for a specified attribute (identified by +method+) on an object
@@ -1183,9 +1190,11 @@ module ActionView
if association.is_a?(Array)
explicit_child_index = options[:child_index]
- association.map do |child|
- fields_for_nested_model("#{name}[#{explicit_child_index || nested_child_index(name)}]", child, options, block)
- end.join
+ output = ActiveSupport::SafeBuffer.new
+ association.each do |child|
+ output << fields_for_nested_model("#{name}[#{explicit_child_index || nested_child_index(name)}]", child, options, block)
+ end
+ output
elsif association
fields_for_nested_model(name, association, options, block)
end
diff --git a/actionpack/lib/action_view/helpers/form_options_helper.rb b/actionpack/lib/action_view/helpers/form_options_helper.rb
index 7f74be27cb..7039ecd233 100644
--- a/actionpack/lib/action_view/helpers/form_options_helper.rb
+++ b/actionpack/lib/action_view/helpers/form_options_helper.rb
@@ -97,7 +97,9 @@ module ActionView
# </select>
#
module FormOptionsHelper
+ # ERB::Util can mask some helpers like textilize. Make sure to include them.
include ERB::Util
+ include TextHelper
# Create a select tag and a series of contained option tags for the provided object and method.
# The option currently held by the object will be selected, provided that the object is available.
diff --git a/actionpack/lib/action_view/helpers/form_tag_helper.rb b/actionpack/lib/action_view/helpers/form_tag_helper.rb
index 7dcaee7e34..573733ffea 100644
--- a/actionpack/lib/action_view/helpers/form_tag_helper.rb
+++ b/actionpack/lib/action_view/helpers/form_tag_helper.rb
@@ -10,6 +10,11 @@ module ActionView
# NOTE: The HTML options <tt>disabled</tt>, <tt>readonly</tt>, and <tt>multiple</tt> can all be treated as booleans. So specifying
# <tt>:disabled => true</tt> will give <tt>disabled="disabled"</tt>.
module FormTagHelper
+ extend ActiveSupport::Concern
+
+ include UrlHelper
+ include TextHelper
+
# Starts a form tag that points the action to an url configured with <tt>url_for_options</tt> just like
# ActionController::Base#url_for. The method for the form defaults to POST.
#
@@ -441,10 +446,10 @@ module ActionView
# # => <fieldset class="format"><p><input id="name" name="name" type="text" /></p></fieldset>
def field_set_tag(legend = nil, options = nil, &block)
content = capture(&block)
- safe_concat(tag(:fieldset, options, true))
- safe_concat(content_tag(:legend, legend)) unless legend.blank?
- concat(content)
- safe_concat("</fieldset>")
+ output = tag(:fieldset, options, true)
+ output.safe_concat(content_tag(:legend, legend)) unless legend.blank?
+ output.concat(content)
+ output.safe_concat("</fieldset>")
end
private
@@ -477,9 +482,10 @@ module ActionView
def form_tag_in_block(html_options, &block)
content = capture(&block)
- safe_concat(form_tag_html(html_options))
- concat(content)
- safe_concat("</form>")
+ output = ActiveSupport::SafeBuffer.new
+ output.safe_concat(form_tag_html(html_options))
+ output << content
+ output.safe_concat("</form>")
end
def token_tag
diff --git a/actionpack/lib/action_view/helpers/javascript_helper.rb b/actionpack/lib/action_view/helpers/javascript_helper.rb
index 2c73ff88f7..8dab3094dd 100644
--- a/actionpack/lib/action_view/helpers/javascript_helper.rb
+++ b/actionpack/lib/action_view/helpers/javascript_helper.rb
@@ -83,13 +83,7 @@ module ActionView
content_or_options_with_block
end
- tag = content_tag(:script, javascript_cdata_section(content), html_options.merge(:type => Mime::JS))
-
- if block_called_from_erb?(block)
- safe_concat(tag)
- else
- tag
- end
+ content_tag(:script, javascript_cdata_section(content), html_options.merge(:type => Mime::JS))
end
def javascript_cdata_section(content) #:nodoc:
diff --git a/actionpack/lib/action_view/helpers/tag_helper.rb b/actionpack/lib/action_view/helpers/tag_helper.rb
index 513d72880c..d9d2588a2a 100644
--- a/actionpack/lib/action_view/helpers/tag_helper.rb
+++ b/actionpack/lib/action_view/helpers/tag_helper.rb
@@ -7,6 +7,9 @@ module ActionView
module TagHelper
include ERB::Util
+ extend ActiveSupport::Concern
+ include CaptureHelper
+
BOOLEAN_ATTRIBUTES = %w(disabled readonly multiple checked autobuffer
autoplay controls loop selected hidden scoped async
defer reversed ismap seemless muted required
@@ -69,13 +72,7 @@ module ActionView
def content_tag(name, content_or_options_with_block = nil, options = nil, escape = true, &block)
if block_given?
options = content_or_options_with_block if content_or_options_with_block.is_a?(Hash)
- content_tag = content_tag_string(name, capture(&block), options, escape)
-
- if block_called_from_erb?(block)
- safe_concat(content_tag)
- else
- content_tag
- end
+ content_tag_string(name, capture(&block), options, escape)
else
content_tag_string(name, content_or_options_with_block, options, escape)
end
@@ -109,21 +106,6 @@ module ActionView
end
private
- BLOCK_CALLED_FROM_ERB = 'defined? __in_erb_template'
-
- if RUBY_VERSION < '1.9.0'
- # Check whether we're called from an erb template.
- # We'd return a string in any other case, but erb <%= ... %>
- # can't take an <% end %> later on, so we have to use <% ... %>
- # and implicitly concat.
- def block_called_from_erb?(block)
- block && eval(BLOCK_CALLED_FROM_ERB, block)
- end
- else
- def block_called_from_erb?(block)
- block && eval(BLOCK_CALLED_FROM_ERB, block.binding)
- end
- end
def content_tag_string(name, content, options, escape = true)
tag_options = tag_options(options, escape) if options
diff --git a/actionpack/lib/action_view/template/handlers/erb.rb b/actionpack/lib/action_view/template/handlers/erb.rb
index 4b7cec50f3..937694ce8e 100644
--- a/actionpack/lib/action_view/template/handlers/erb.rb
+++ b/actionpack/lib/action_view/template/handlers/erb.rb
@@ -3,10 +3,54 @@ require 'active_support/core_ext/string/output_safety'
require 'erubis'
module ActionView
+ class OutputBuffer
+ def initialize
+ @buffer = ActiveSupport::SafeBuffer.new
+ end
+
+ def safe_concat(value)
+ @buffer.safe_concat(value)
+ end
+
+ def <<(value)
+ @buffer << value.to_s
+ end
+
+ def length
+ @buffer.length
+ end
+
+ def [](*args)
+ @buffer[*args]
+ end
+
+ def to_s
+ @buffer.to_s
+ end
+
+ def to_str
+ @buffer.to_str
+ end
+
+ def empty?
+ @buffer.empty?
+ end
+
+ def html_safe?
+ @buffer.html_safe?
+ end
+
+ if "".respond_to?(:force_encoding)
+ def force_encoding(encoding)
+ @buffer.force_encoding(encoding)
+ end
+ end
+ end
+
module Template::Handlers
class Erubis < ::Erubis::Eruby
def add_preamble(src)
- src << "@output_buffer = ActiveSupport::SafeBuffer.new;"
+ src << "@output_buffer = ActionView::OutputBuffer.new;"
end
def add_text(src, text)
@@ -15,10 +59,10 @@ module ActionView
end
def add_expr_literal(src, code)
- if code =~ /\s*raw\s+(.*)/
- src << "@output_buffer.safe_concat((" << $1 << ").to_s);"
+ if code =~ /(do|\{)(\s*\|[^|]*\|)?\s*\Z/
+ src << '@output_buffer << ' << code
else
- src << '@output_buffer << ((' << code << ').to_s);'
+ src << '@output_buffer << (' << code << ');'
end
end
@@ -42,7 +86,7 @@ module ActionView
self.erb_trim_mode = '-'
self.default_format = Mime::HTML
-
+
cattr_accessor :erb_implementation
self.erb_implementation = Erubis
diff --git a/actionpack/test/template/date_helper_test.rb b/actionpack/test/template/date_helper_test.rb
index 9a2d490854..da2477b6f8 100644
--- a/actionpack/test/template/date_helper_test.rb
+++ b/actionpack/test/template/date_helper_test.rb
@@ -1250,7 +1250,7 @@ class DateHelperTest < ActionView::TestCase
@post = Post.new
@post.written_on = Date.new(2004, 6, 15)
- fields_for :post, @post do |f|
+ output_buffer = fields_for :post, @post do |f|
concat f.date_select(:written_on)
end
@@ -1266,7 +1266,7 @@ class DateHelperTest < ActionView::TestCase
@post.written_on = Date.new(2004, 6, 15)
id = 27
- fields_for :post, @post, :index => id do |f|
+ output_buffer = fields_for :post, @post, :index => id do |f|
concat f.date_select(:written_on)
end
@@ -1282,7 +1282,7 @@ class DateHelperTest < ActionView::TestCase
@post.written_on = Date.new(2004, 6, 15)
id = nil
- fields_for :post, @post, :index => id do |f|
+ output_buffer = fields_for :post, @post, :index => id do |f|
concat f.date_select(:written_on)
end
@@ -1478,7 +1478,7 @@ class DateHelperTest < ActionView::TestCase
@post = Post.new
@post.written_on = Date.new(2004, 6, 15)
- fields_for :post, @post do |f|
+ output_buffer = fields_for :post, @post do |f|
concat f.date_select(:written_on, {}, :class => 'selector')
end
@@ -1642,7 +1642,7 @@ class DateHelperTest < ActionView::TestCase
@post = Post.new
@post.written_on = Time.local(2004, 6, 15, 15, 16, 35)
- fields_for :post, @post do |f|
+ output_buffer = fields_for :post, @post do |f|
concat f.time_select(:written_on, {}, :class => 'selector')
end
@@ -1816,7 +1816,7 @@ class DateHelperTest < ActionView::TestCase
@post = Post.new
@post.updated_at = Time.local(2004, 6, 15, 16, 35)
- fields_for :post, @post do |f|
+ output_buffer = fields_for :post, @post do |f|
concat f.datetime_select(:updated_at, {}, :class => 'selector')
end
@@ -2052,7 +2052,7 @@ class DateHelperTest < ActionView::TestCase
@post.updated_at = Time.local(2004, 6, 15, 16, 35)
id = 456
- fields_for :post, @post, :index => id do |f|
+ output_buffer = fields_for :post, @post, :index => id do |f|
concat f.datetime_select(:updated_at)
end
diff --git a/actionpack/test/template/erb/tag_helper_test.rb b/actionpack/test/template/erb/tag_helper_test.rb
new file mode 100644
index 0000000000..b91539ef0b
--- /dev/null
+++ b/actionpack/test/template/erb/tag_helper_test.rb
@@ -0,0 +1,82 @@
+require "abstract_unit"
+
+module ERBTest
+ class ViewContext
+ mock_controller = Class.new do
+ include SharedTestRoutes.url_helpers
+ end
+
+ include ActionView::Helpers::TagHelper
+ include ActionView::Helpers::JavaScriptHelper
+ include ActionView::Helpers::FormHelper
+
+ attr_accessor :output_buffer
+
+ def protect_against_forgery?() false end
+
+ define_method(:controller) do
+ mock_controller.new
+ end
+ end
+
+ class DeprecatedViewContext < ViewContext
+ include ActionView::Helpers::DeprecatedBlockHelpers
+ end
+
+ module SharedTagHelpers
+ extend ActiveSupport::Testing::Declarative
+
+ def render_content(start, inside)
+ template = block_helper(start, inside)
+ ActionView::Template::Handlers::Erubis.new(template).evaluate(context.new)
+ end
+
+ test "percent equals works for content_tag" do
+ assert_equal "<div>Hello world</div>", render_content("content_tag(:div)", "Hello world")
+ end
+
+ test "percent equals works for javascript_tag" do
+ expected_output = "<script type=\"text/javascript\">\n//<![CDATA[\nalert('Hello')\n//]]>\n</script>"
+ assert_equal expected_output, render_content("javascript_tag", "alert('Hello')")
+ end
+
+ test "percent equals works for javascript_tag with options" do
+ expected_output = "<script id=\"the_js_tag\" type=\"text/javascript\">\n//<![CDATA[\nalert('Hello')\n//]]>\n</script>"
+ assert_equal expected_output, render_content("javascript_tag(:id => 'the_js_tag')", "alert('Hello')")
+ end
+
+ test "percent equals works with form tags" do
+ expected_output = "<form action=\"foo\" method=\"post\">hello</form>"
+ assert_equal expected_output, render_content("form_tag('foo')", "<%= 'hello' %>")
+ end
+
+ test "percent equals works with fieldset tags" do
+ expected_output = "<fieldset><legend>foo</legend>hello</fieldset>"
+ assert_equal expected_output, render_content("field_set_tag('foo')", "<%= 'hello' %>")
+ end
+ end
+
+ class TagHelperTest < ActiveSupport::TestCase
+ def context
+ ViewContext
+ end
+
+ def block_helper(str, rest)
+ "<%= #{str} do %>#{rest}<% end %>"
+ end
+
+ include SharedTagHelpers
+ end
+
+ class DeprecatedTagHelperTest < ActiveSupport::TestCase
+ def context
+ DeprecatedViewContext
+ end
+
+ def block_helper(str, rest)
+ "<% __in_erb_template=true %><% #{str} do %>#{rest}<% end %>"
+ end
+
+ include SharedTagHelpers
+ end
+end \ No newline at end of file
diff --git a/actionpack/test/template/form_helper_test.rb b/actionpack/test/template/form_helper_test.rb
index d143c39c9c..7c5ccfd6ed 100644
--- a/actionpack/test/template/form_helper_test.rb
+++ b/actionpack/test/template/form_helper_test.rb
@@ -4,6 +4,10 @@ require 'controller/fake_models'
class FormHelperTest < ActionView::TestCase
tests ActionView::Helpers::FormHelper
+ def form_for(*)
+ @output_buffer = super
+ end
+
def setup
super
@@ -590,9 +594,9 @@ class FormHelperTest < ActionView::TestCase
def test_nested_fields_for
form_for(:post, @post) do |f|
- f.fields_for(:comment, @post) do |c|
+ concat f.fields_for(:comment, @post) { |c|
concat c.text_field(:title)
- end
+ }
end
expected = "<form action='http://www.example.com' method='post'>" +
@@ -605,9 +609,9 @@ class FormHelperTest < ActionView::TestCase
def test_nested_fields_for_with_nested_collections
form_for('post[]', @post) do |f|
concat f.text_field(:title)
- f.fields_for('comment[]', @comment) do |c|
+ concat f.fields_for('comment[]', @comment) { |c|
concat c.text_field(:name)
- end
+ }
end
expected = "<form action='http://www.example.com' method='post'>" +
@@ -621,9 +625,9 @@ class FormHelperTest < ActionView::TestCase
def test_nested_fields_for_with_index_and_parent_fields
form_for('post', @post, :index => 1) do |c|
concat c.text_field(:title)
- c.fields_for('comment', @comment, :index => 1) do |r|
+ concat c.fields_for('comment', @comment, :index => 1) { |r|
concat r.text_field(:name)
- end
+ }
end
expected = "<form action='http://www.example.com' method='post'>" +
@@ -635,10 +639,10 @@ class FormHelperTest < ActionView::TestCase
end
def test_form_for_with_index_and_nested_fields_for
- form_for(:post, @post, :index => 1) do |f|
- f.fields_for(:comment, @post) do |c|
+ output_buffer = form_for(:post, @post, :index => 1) do |f|
+ concat f.fields_for(:comment, @post) { |c|
concat c.text_field(:title)
- end
+ }
end
expected = "<form action='http://www.example.com' method='post'>" +
@@ -650,9 +654,9 @@ class FormHelperTest < ActionView::TestCase
def test_nested_fields_for_with_index_on_both
form_for(:post, @post, :index => 1) do |f|
- f.fields_for(:comment, @post, :index => 5) do |c|
+ concat f.fields_for(:comment, @post, :index => 5) { |c|
concat c.text_field(:title)
- end
+ }
end
expected = "<form action='http://www.example.com' method='post'>" +
@@ -664,9 +668,9 @@ class FormHelperTest < ActionView::TestCase
def test_nested_fields_for_with_auto_index
form_for("post[]", @post) do |f|
- f.fields_for(:comment, @post) do |c|
+ concat f.fields_for(:comment, @post) { |c|
concat c.text_field(:title)
- end
+ }
end
expected = "<form action='http://www.example.com' method='post'>" +
@@ -678,9 +682,9 @@ class FormHelperTest < ActionView::TestCase
def test_nested_fields_for_with_index_radio_button
form_for(:post, @post) do |f|
- f.fields_for(:comment, @post, :index => 5) do |c|
+ concat f.fields_for(:comment, @post, :index => 5) { |c|
concat c.radio_button(:title, "hello")
- end
+ }
end
expected = "<form action='http://www.example.com' method='post'>" +
@@ -692,9 +696,9 @@ class FormHelperTest < ActionView::TestCase
def test_nested_fields_for_with_auto_index_on_both
form_for("post[]", @post) do |f|
- f.fields_for("comment[]", @post) do |c|
+ concat f.fields_for("comment[]", @post) { |c|
concat c.text_field(:title)
- end
+ }
end
expected = "<form action='http://www.example.com' method='post'>" +
@@ -705,16 +709,16 @@ class FormHelperTest < ActionView::TestCase
end
def test_nested_fields_for_with_index_and_auto_index
- form_for("post[]", @post) do |f|
- f.fields_for(:comment, @post, :index => 5) do |c|
+ output_buffer = form_for("post[]", @post) do |f|
+ concat f.fields_for(:comment, @post, :index => 5) { |c|
concat c.text_field(:title)
- end
+ }
end
- form_for(:post, @post, :index => 1) do |f|
- f.fields_for("comment[]", @post) do |c|
+ output_buffer << form_for(:post, @post, :index => 1) do |f|
+ concat f.fields_for("comment[]", @post) { |c|
concat c.text_field(:title)
- end
+ }
end
expected = "<form action='http://www.example.com' method='post'>" +
@@ -732,9 +736,9 @@ class FormHelperTest < ActionView::TestCase
form_for(:post, @post) do |f|
concat f.text_field(:title)
- f.fields_for(:author) do |af|
+ concat f.fields_for(:author) { |af|
concat af.text_field(:name)
- end
+ }
end
expected = '<form action="http://www.example.com" method="post">' +
@@ -759,9 +763,9 @@ class FormHelperTest < ActionView::TestCase
form_for(:post, @post) do |f|
concat f.text_field(:title)
- f.fields_for(:author) do |af|
+ concat f.fields_for(:author) { |af|
concat af.text_field(:name)
- end
+ }
end
expected = '<form action="http://www.example.com" method="post">' +
@@ -778,10 +782,10 @@ class FormHelperTest < ActionView::TestCase
form_for(:post, @post) do |f|
concat f.text_field(:title)
- f.fields_for(:author) do |af|
+ concat f.fields_for(:author) { |af|
concat af.hidden_field(:id)
concat af.text_field(:name)
- end
+ }
end
expected = '<form action="http://www.example.com" method="post">' +
@@ -799,9 +803,9 @@ class FormHelperTest < ActionView::TestCase
form_for(:post, @post) do |f|
concat f.text_field(:title)
@post.comments.each do |comment|
- f.fields_for(:comments, comment) do |cf|
+ concat f.fields_for(:comments, comment) { |cf|
concat cf.text_field(:name)
- end
+ }
end
end
@@ -822,10 +826,10 @@ class FormHelperTest < ActionView::TestCase
form_for(:post, @post) do |f|
concat f.text_field(:title)
@post.comments.each do |comment|
- f.fields_for(:comments, comment) do |cf|
+ concat f.fields_for(:comments, comment) { |cf|
concat cf.hidden_field(:id)
concat cf.text_field(:name)
- end
+ }
end
end
@@ -846,9 +850,9 @@ class FormHelperTest < ActionView::TestCase
form_for(:post, @post) do |f|
concat f.text_field(:title)
@post.comments.each do |comment|
- f.fields_for(:comments, comment) do |cf|
+ concat f.fields_for(:comments, comment) { |cf|
concat cf.text_field(:name)
- end
+ }
end
end
@@ -867,9 +871,9 @@ class FormHelperTest < ActionView::TestCase
form_for(:post, @post) do |f|
concat f.text_field(:title)
@post.comments.each do |comment|
- f.fields_for(:comments, comment) do |cf|
+ concat f.fields_for(:comments, comment) { |cf|
concat cf.text_field(:name)
- end
+ }
end
end
@@ -903,9 +907,9 @@ class FormHelperTest < ActionView::TestCase
form_for(:post, @post) do |f|
concat f.text_field(:title)
- f.fields_for(:comments, @post.comments) do |cf|
+ concat f.fields_for(:comments, @post.comments) { |cf|
concat cf.text_field(:name)
- end
+ }
end
expected = '<form action="http://www.example.com" method="post">' +
@@ -925,9 +929,9 @@ class FormHelperTest < ActionView::TestCase
form_for(:post, @post) do |f|
concat f.text_field(:title)
- f.fields_for(:comments, comments) do |cf|
+ concat f.fields_for(:comments, comments) { |cf|
concat cf.text_field(:name)
- end
+ }
end
expected = '<form action="http://www.example.com" method="post">' +
@@ -947,10 +951,10 @@ class FormHelperTest < ActionView::TestCase
form_for(:post, @post) do |f|
concat f.text_field(:title)
- f.fields_for(:comments) do |cf|
+ concat f.fields_for(:comments) { |cf|
concat cf.text_field(:name)
yielded_comments << cf.object
- end
+ }
end
expected = '<form action="http://www.example.com" method="post">' +
@@ -968,9 +972,9 @@ class FormHelperTest < ActionView::TestCase
@post.comments = []
form_for(:post, @post) do |f|
- f.fields_for(:comments, Comment.new(321), :child_index => 'abc') do |cf|
+ concat f.fields_for(:comments, Comment.new(321), :child_index => 'abc') { |cf|
concat cf.text_field(:name)
- end
+ }
end
expected = '<form action="http://www.example.com" method="post">' +
@@ -988,24 +992,24 @@ class FormHelperTest < ActionView::TestCase
@post.tags[0].relevances = []
@post.tags[1].relevances = []
form_for(:post, @post) do |f|
- f.fields_for(:comments, @post.comments[0]) do |cf|
+ concat f.fields_for(:comments, @post.comments[0]) { |cf|
concat cf.text_field(:name)
- cf.fields_for(:relevances, CommentRelevance.new(314)) do |crf|
+ concat cf.fields_for(:relevances, CommentRelevance.new(314)) { |crf|
concat crf.text_field(:value)
- end
- end
- f.fields_for(:tags, @post.tags[0]) do |tf|
+ }
+ }
+ concat f.fields_for(:tags, @post.tags[0]) { |tf|
concat tf.text_field(:value)
- tf.fields_for(:relevances, TagRelevance.new(3141)) do |trf|
+ concat tf.fields_for(:relevances, TagRelevance.new(3141)) { |trf|
concat trf.text_field(:value)
- end
- end
- f.fields_for('tags', @post.tags[1]) do |tf|
+ }
+ }
+ concat f.fields_for('tags', @post.tags[1]) { |tf|
concat tf.text_field(:value)
- tf.fields_for(:relevances, TagRelevance.new(31415)) do |trf|
+ concat tf.fields_for(:relevances, TagRelevance.new(31415)) { |trf|
concat trf.text_field(:value)
- end
- end
+ }
+ }
end
expected = '<form action="http://www.example.com" method="post">' +
@@ -1027,7 +1031,7 @@ class FormHelperTest < ActionView::TestCase
end
def test_fields_for
- fields_for(:post, @post) do |f|
+ output_buffer = fields_for(:post, @post) do |f|
concat f.text_field(:title)
concat f.text_area(:body)
concat f.check_box(:secret)
@@ -1043,7 +1047,7 @@ class FormHelperTest < ActionView::TestCase
end
def test_fields_for_with_index
- fields_for("post[]", @post) do |f|
+ output_buffer = fields_for("post[]", @post) do |f|
concat f.text_field(:title)
concat f.text_area(:body)
concat f.check_box(:secret)
@@ -1059,7 +1063,7 @@ class FormHelperTest < ActionView::TestCase
end
def test_fields_for_with_nil_index_option_override
- fields_for("post[]", @post, :index => nil) do |f|
+ output_buffer = fields_for("post[]", @post, :index => nil) do |f|
concat f.text_field(:title)
concat f.text_area(:body)
concat f.check_box(:secret)
@@ -1075,7 +1079,7 @@ class FormHelperTest < ActionView::TestCase
end
def test_fields_for_with_index_option_override
- fields_for("post[]", @post, :index => "abc") do |f|
+ output_buffer = fields_for("post[]", @post, :index => "abc") do |f|
concat f.text_field(:title)
concat f.text_area(:body)
concat f.check_box(:secret)
@@ -1091,7 +1095,7 @@ class FormHelperTest < ActionView::TestCase
end
def test_fields_for_without_object
- fields_for(:post) do |f|
+ output_buffer = fields_for(:post) do |f|
concat f.text_field(:title)
concat f.text_area(:body)
concat f.check_box(:secret)
@@ -1107,7 +1111,7 @@ class FormHelperTest < ActionView::TestCase
end
def test_fields_for_with_only_object
- fields_for(@post) do |f|
+ output_buffer = fields_for(@post) do |f|
concat f.text_field(:title)
concat f.text_area(:body)
concat f.check_box(:secret)
@@ -1123,7 +1127,7 @@ class FormHelperTest < ActionView::TestCase
end
def test_fields_for_object_with_bracketed_name
- fields_for("author[post]", @post) do |f|
+ output_buffer = fields_for("author[post]", @post) do |f|
concat f.label(:title)
concat f.text_field(:title)
end
@@ -1134,7 +1138,7 @@ class FormHelperTest < ActionView::TestCase
end
def test_fields_for_object_with_bracketed_name_and_index
- fields_for("author[post]", @post, :index => 1) do |f|
+ output_buffer = fields_for("author[post]", @post, :index => 1) do |f|
concat f.label(:title)
concat f.text_field(:title)
end
@@ -1153,9 +1157,9 @@ class FormHelperTest < ActionView::TestCase
concat post_form.text_field(:title)
concat post_form.text_area(:body)
- fields_for(:parent_post, @post) do |parent_fields|
+ concat fields_for(:parent_post, @post) { |parent_fields|
concat parent_fields.check_box(:secret)
- end
+ }
end
expected =
@@ -1174,9 +1178,9 @@ class FormHelperTest < ActionView::TestCase
concat post_form.text_field(:title)
concat post_form.text_area(:body)
- post_form.fields_for(@comment) do |comment_fields|
+ concat post_form.fields_for(@comment) { |comment_fields|
concat comment_fields.text_field(:name)
- end
+ }
end
expected =
@@ -1273,7 +1277,7 @@ class FormHelperTest < ActionView::TestCase
end
def test_fields_for_with_labelled_builder
- fields_for(:post, @post, :builder => LabelledFormBuilder) do |f|
+ output_buffer = fields_for(:post, @post, :builder => LabelledFormBuilder) do |f|
concat f.text_field(:title)
concat f.text_area(:body)
concat f.check_box(:secret)
diff --git a/actionpack/test/template/form_options_helper_test.rb b/actionpack/test/template/form_options_helper_test.rb
index aa40e46aa8..5799e3db53 100644
--- a/actionpack/test/template/form_options_helper_test.rb
+++ b/actionpack/test/template/form_options_helper_test.rb
@@ -293,7 +293,7 @@ class FormOptionsHelperTest < ActionView::TestCase
@post = Post.new
@post.category = "<mus>"
- fields_for :post, @post do |f|
+ output_buffer = fields_for :post, @post do |f|
concat f.select(:category, %w( abe <mus> hest))
end
@@ -307,7 +307,7 @@ class FormOptionsHelperTest < ActionView::TestCase
@post = Post.new
@post.category = "<mus>"
- fields_for :post, @post, :index => 108 do |f|
+ output_buffer = fields_for :post, @post, :index => 108 do |f|
concat f.select(:category, %w( abe <mus> hest))
end
@@ -322,7 +322,7 @@ class FormOptionsHelperTest < ActionView::TestCase
@post.category = "<mus>"
def @post.to_param; 108; end
- fields_for "post[]", @post do |f|
+ output_buffer = fields_for "post[]", @post do |f|
concat f.select(:category, %w( abe <mus> hest))
end
@@ -336,7 +336,7 @@ class FormOptionsHelperTest < ActionView::TestCase
@post = Post.new
options = "<option value=\"abe\">abe</option><option value=\"mus\">mus</option><option value=\"hest\">hest</option>"
- fields_for :post, @post do |f|
+ output_buffer = fields_for :post, @post do |f|
concat f.select(:category, options, :prompt => 'The prompt')
end
@@ -462,7 +462,7 @@ class FormOptionsHelperTest < ActionView::TestCase
@post = Post.new
@post.author_name = "Babe"
- fields_for :post, @post do |f|
+ output_buffer = fields_for :post, @post do |f|
concat f.collection_select(:author_name, dummy_posts, :author_name, :author_name)
end
@@ -476,7 +476,7 @@ class FormOptionsHelperTest < ActionView::TestCase
@post = Post.new
@post.author_name = "Babe"
- fields_for :post, @post, :index => 815 do |f|
+ output_buffer = fields_for :post, @post, :index => 815 do |f|
concat f.collection_select(:author_name, dummy_posts, :author_name, :author_name)
end
@@ -491,7 +491,7 @@ class FormOptionsHelperTest < ActionView::TestCase
@post.author_name = "Babe"
def @post.to_param; 815; end
- fields_for "post[]", @post do |f|
+ output_buffer = fields_for "post[]", @post do |f|
concat f.collection_select(:author_name, dummy_posts, :author_name, :author_name)
end
@@ -570,7 +570,7 @@ class FormOptionsHelperTest < ActionView::TestCase
def test_time_zone_select_under_fields_for
@firm = Firm.new("D")
- fields_for :firm, @firm do |f|
+ output_buffer = fields_for :firm, @firm do |f|
concat f.time_zone_select(:time_zone)
end
@@ -589,7 +589,7 @@ class FormOptionsHelperTest < ActionView::TestCase
def test_time_zone_select_under_fields_for_with_index
@firm = Firm.new("D")
- fields_for :firm, @firm, :index => 305 do |f|
+ output_buffer = fields_for :firm, @firm, :index => 305 do |f|
concat f.time_zone_select(:time_zone)
end
@@ -609,7 +609,7 @@ class FormOptionsHelperTest < ActionView::TestCase
@firm = Firm.new("D")
def @firm.to_param; 305; end
- fields_for "firm[]", @firm do |f|
+ output_buffer = fields_for "firm[]", @firm do |f|
concat f.time_zone_select(:time_zone)
end
@@ -787,7 +787,7 @@ class FormOptionsHelperTest < ActionView::TestCase
@post = Post.new
@post.origin = 'dk'
- fields_for :post, @post do |f|
+ output_buffer = fields_for :post, @post do |f|
concat f.grouped_collection_select("origin", @continents, :countries, :continent_name, :country_id, :country_name)
end
diff --git a/actionpack/test/template/form_tag_helper_test.rb b/actionpack/test/template/form_tag_helper_test.rb
index c7d4bc986c..868a35c476 100644
--- a/actionpack/test/template/form_tag_helper_test.rb
+++ b/actionpack/test/template/form_tag_helper_test.rb
@@ -59,16 +59,14 @@ class FormTagHelperTest < ActionView::TestCase
end
def test_form_tag_with_block_in_erb
- __in_erb_template = ''
- form_tag("http://example.com") { concat "Hello world!" }
+ output_buffer = form_tag("http://example.com") { concat "Hello world!" }
expected = %(<form action="http://example.com" method="post">Hello world!</form>)
assert_dom_equal expected, output_buffer
end
def test_form_tag_with_block_and_method_in_erb
- __in_erb_template = ''
- form_tag("http://example.com", :method => :put) { concat "Hello world!" }
+ output_buffer = form_tag("http://example.com", :method => :put) { concat "Hello world!" }
expected = %(<form action="http://example.com" method="post"><div style='margin:0;padding:0;display:inline'><input type="hidden" name="_method" value="put" /></div>Hello world!</form>)
assert_dom_equal expected, output_buffer
@@ -332,26 +330,22 @@ class FormTagHelperTest < ActionView::TestCase
end
def test_field_set_tag_in_erb
- __in_erb_template = ''
- field_set_tag("Your details") { concat "Hello world!" }
+ output_buffer = field_set_tag("Your details") { concat "Hello world!" }
expected = %(<fieldset><legend>Your details</legend>Hello world!</fieldset>)
assert_dom_equal expected, output_buffer
- self.output_buffer = ''.html_safe
- field_set_tag { concat "Hello world!" }
+ output_buffer = field_set_tag { concat "Hello world!" }
expected = %(<fieldset>Hello world!</fieldset>)
assert_dom_equal expected, output_buffer
- self.output_buffer = ''.html_safe
- field_set_tag('') { concat "Hello world!" }
+ output_buffer = field_set_tag('') { concat "Hello world!" }
expected = %(<fieldset>Hello world!</fieldset>)
assert_dom_equal expected, output_buffer
- self.output_buffer = ''.html_safe
- field_set_tag('', :class => 'format') { concat "Hello world!" }
+ output_buffer = field_set_tag('', :class => 'format') { concat "Hello world!" }
expected = %(<fieldset class="format">Hello world!</fieldset>)
assert_dom_equal expected, output_buffer
diff --git a/actionpack/test/template/javascript_helper_test.rb b/actionpack/test/template/javascript_helper_test.rb
index 6604f1c095..f49b763881 100644
--- a/actionpack/test/template/javascript_helper_test.rb
+++ b/actionpack/test/template/javascript_helper_test.rb
@@ -74,18 +74,6 @@ class JavaScriptHelperTest < ActionView::TestCase
javascript_tag("alert('hello')", :id => "the_js_tag")
end
- def test_javascript_tag_with_block_in_erb
- __in_erb_template = ''
- javascript_tag { concat "alert('hello')" }
- assert_dom_equal "<script type=\"text/javascript\">\n//<![CDATA[\nalert('hello')\n//]]>\n</script>", output_buffer
- end
-
- def test_javascript_tag_with_block_and_options_in_erb
- __in_erb_template = ''
- javascript_tag(:id => "the_js_tag") { concat "alert('hello')" }
- assert_dom_equal "<script id=\"the_js_tag\" type=\"text/javascript\">\n//<![CDATA[\nalert('hello')\n//]]>\n</script>", output_buffer
- end
-
def test_javascript_cdata_section
assert_dom_equal "\n//<![CDATA[\nalert('hello')\n//]]>\n", javascript_cdata_section("alert('hello')")
end
diff --git a/actionpack/test/template/tag_helper_test.rb b/actionpack/test/template/tag_helper_test.rb
index 3858ffde40..256d9bdcde 100644
--- a/actionpack/test/template/tag_helper_test.rb
+++ b/actionpack/test/template/tag_helper_test.rb
@@ -42,15 +42,13 @@ class TagHelperTest < ActionView::TestCase
end
def test_content_tag_with_block_in_erb
- __in_erb_template = ''
- content_tag(:div) { concat "Hello world!" }
- assert_dom_equal "<div>Hello world!</div>", output_buffer
+ buffer = content_tag(:div) { concat "Hello world!" }
+ assert_dom_equal "<div>Hello world!</div>", buffer
end
def test_content_tag_with_block_and_options_in_erb
- __in_erb_template = ''
- content_tag(:div, :class => "green") { concat "Hello world!" }
- assert_dom_equal %(<div class="green">Hello world!</div>), output_buffer
+ buffer = content_tag(:div, :class => "green") { concat "Hello world!" }
+ assert_dom_equal %(<div class="green">Hello world!</div>), buffer
end
def test_content_tag_with_block_and_options_out_of_erb
@@ -68,10 +66,10 @@ class TagHelperTest < ActionView::TestCase
output_buffer
end
+ # TAG TODO: Move this into a real template
def test_content_tag_nested_in_content_tag_in_erb
- __in_erb_template = true
- content_tag("p") { concat content_tag("b", "Hello") }
- assert_equal '<p><b>Hello</b></p>', output_buffer
+ buffer = content_tag("p") { concat content_tag("b", "Hello") }
+ assert_equal '<p><b>Hello</b></p>', buffer
end
def test_content_tag_with_escaped_array_class
diff --git a/rails.gemspec b/rails.gemspec
index dea075effe..8b9a374e25 100644
--- a/rails.gemspec
+++ b/rails.gemspec
@@ -7,6 +7,7 @@ Gem::Specification.new do |s|
s.summary = 'Full-stack web application framework.'
s.description = 'Ruby on Rails is a full-stack web framework optimized for programmer happiness and sustainable productivity. It encourages beautiful code by favoring convention over configuration.'
s.required_ruby_version = '>= 1.8.7'
+ s.required_rubygems_version = ">= 1.3.6"
s.author = 'David Heinemeier Hansson'
s.email = 'david@loudthinking.com'