Permalink
Browse files

Merge branch 'master' of git@github.com:lifo/docrails

  • Loading branch information...
2 parents 78af01f + d18bfa2 commit 4812e350b9e96641a29c8db6ea153426dad1c9a2 Colin Curtin committed Nov 26, 2008
Showing with 7,232 additions and 3,313 deletions.
  1. +5 −0 actionmailer/CHANGELOG
  2. +82 −52 actionmailer/lib/action_mailer/base.rb
  3. +1 −1 actionmailer/lib/action_mailer/version.rb
  4. +6 −2 actionmailer/test/abstract_unit.rb
  5. +26 −0 actionmailer/test/mail_service_test.rb
  6. +7 −1 actionpack/CHANGELOG
  7. +52 −12 actionpack/lib/action_controller/base.rb
  8. +12 −14 actionpack/lib/action_controller/caching/pages.rb
  9. +0 −1 actionpack/lib/action_controller/dispatcher.rb
  10. +20 −2 actionpack/lib/action_controller/mime_type.rb
  11. +1 −1 actionpack/lib/action_controller/polymorphic_routes.rb
  12. +1 −1 actionpack/lib/action_controller/request.rb
  13. +1 −1 actionpack/lib/action_controller/request_forgery_protection.rb
  14. +87 −38 actionpack/lib/action_controller/resources.rb
  15. +4 −2 actionpack/lib/action_controller/routing.rb
  16. +23 −30 actionpack/lib/action_controller/routing/builder.rb
  17. +1 −1 actionpack/lib/action_controller/routing/recognition_optimisation.rb
  18. +1 −1 actionpack/lib/action_controller/routing/route.rb
  19. +4 −0 actionpack/lib/action_controller/routing/routing_ext.rb
  20. +25 −3 actionpack/lib/action_controller/routing/segments.rb
  21. +10 −0 actionpack/lib/action_controller/session/active_record_store.rb
  22. +1 −0 actionpack/lib/action_controller/test_process.rb
  23. +1 −1 actionpack/lib/action_controller/vendor/html-scanner/html/sanitizer.rb
  24. +1 −1 actionpack/lib/action_pack/version.rb
  25. +6 −2 actionpack/lib/action_view/base.rb
  26. +9 −4 actionpack/lib/action_view/helpers/atom_feed_helper.rb
  27. +7 −5 actionpack/lib/action_view/helpers/tag_helper.rb
  28. +2 −2 actionpack/lib/action_view/helpers/text_helper.rb
  29. +2 −0 actionpack/lib/action_view/template_handlers/erb.rb
  30. +4 −0 actionpack/test/controller/html-scanner/sanitizer_test.rb
  31. +46 −0 actionpack/test/controller/logging_test.rb
  32. +6 −6 actionpack/test/controller/mime_type_test.rb
  33. +11 −0 actionpack/test/controller/polymorphic_routes_test.rb
  34. +66 −52 actionpack/test/controller/request_forgery_protection_test.rb
  35. +266 −0 actionpack/test/controller/resources_test.rb
  36. +1 −0 actionpack/test/controller/session/cookie_store_test.rb
  37. +5 −1 actionpack/test/template/asset_tag_helper_test.rb
  38. +2 −1 actionpack/test/template/atom_feed_helper_test.rb
  39. +1 −1 actionpack/test/template/form_tag_helper_test.rb
  40. +4 −0 actionpack/test/template/tag_helper_test.rb
  41. +1 −0 actionpack/test/template/text_helper_test.rb
  42. +2 −0 activemodel/lib/active_model/errors.rb
  43. +1 −1 activerecord/CHANGELOG
  44. +1 −1 activerecord/lib/active_record/association_preload.rb
  45. +1 −1 activerecord/lib/active_record/associations.rb
  46. +22 −3 activerecord/lib/active_record/base.rb
  47. +1 −1 activerecord/lib/active_record/calculations.rb
  48. +14 −8 activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb
  49. +2 −0 activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb
  50. +1 −2 activerecord/lib/active_record/connection_adapters/abstract_adapter.rb
  51. +9 −6 activerecord/lib/active_record/connection_adapters/mysql_adapter.rb
  52. +3 −1 activerecord/lib/active_record/migration.rb
  53. +2 −0 activerecord/lib/active_record/schema_dumper.rb
  54. +9 −7 activerecord/lib/active_record/validations.rb
  55. +1 −1 activerecord/lib/active_record/version.rb
  56. +23 −0 activerecord/test/cases/associations/has_and_belongs_to_many_associations_test.rb
  57. +5 −0 activerecord/test/cases/calculations_test.rb
  58. +12 −4 activerecord/test/cases/pooled_connections_test.rb
  59. +1 −1 activeresource/CHANGELOG
  60. +2 −0 activeresource/lib/active_resource/base.rb
  61. +1 −1 activeresource/lib/active_resource/version.rb
  62. +1 −3 activesupport/CHANGELOG
  63. +2 −1 activesupport/Rakefile
  64. +2 −0 activesupport/lib/active_support/buffered_logger.rb
  65. +2 −0 activesupport/lib/active_support/core_ext/logger.rb
  66. +10 −2 activesupport/lib/active_support/dependencies.rb
  67. +2 −1 activesupport/lib/active_support/inflector.rb
  68. +4 −4 activesupport/lib/active_support/rescuable.rb
  69. +4 −3 activesupport/lib/active_support/values/time_zone.rb
  70. +2 −2 activesupport/lib/active_support/vendor.rb
  71. +3 −3 activesupport/lib/active_support/vendor/{memcache-client-1.5.0 → memcache-client-1.5.1}/memcache.rb
  72. +1 −1 activesupport/lib/active_support/version.rb
  73. +6 −0 activesupport/test/caching_test.rb
  74. +1 −1 activesupport/test/core_ext/time_ext_test.rb
  75. +5 −5 activesupport/test/dependencies_test.rb
  76. +1 −1 activesupport/test/time_zone_test.rb
  77. +1 −1 railties/CHANGELOG
  78. +2 −1 railties/Rakefile
  79. +26 −0 railties/doc/guides/asciidoc.conf
  80. +21 −5 railties/doc/guides/html/2_2_release_notes.html
  81. +10 −10 railties/doc/guides/html/actioncontroller_basics.html
  82. +401 −4 railties/doc/guides/html/activerecord_validations_callbacks.html
  83. +9 −6 railties/doc/guides/html/association_basics.html
  84. +5 −0 railties/doc/guides/html/authors.html
  85. +434 −0 railties/doc/guides/html/command_line.html
  86. +155 −147 railties/doc/guides/html/configuring.html
  87. +1,088 −578 railties/doc/guides/html/creating_plugins.html
  88. +5 −5 railties/doc/guides/html/getting_started_with_rails.html
  89. +1,079 −0 railties/doc/guides/html/i18n.html
  90. +13 −0 railties/doc/guides/html/index.html
  91. +2 −1 railties/doc/guides/html/migrations.html
  92. +2 −2 railties/doc/guides/html/routing_outside_in.html
  93. +335 −206 railties/doc/guides/html/testing_rails_applications.html
  94. +10 −5 railties/doc/guides/source/2_2_release_notes.txt
  95. +1 −1 railties/doc/guides/source/actioncontroller_basics/cookies.txt
  96. +2 −2 railties/doc/guides/source/actioncontroller_basics/filters.txt
  97. +2 −2 railties/doc/guides/source/actioncontroller_basics/parameter_filtering.txt
  98. +3 −3 railties/doc/guides/source/actioncontroller_basics/request_response_objects.txt
  99. +1 −1 railties/doc/guides/source/actioncontroller_basics/streaming.txt
  100. +1 −1 railties/doc/guides/source/actioncontroller_basics/verification.txt
  101. +238 −2 railties/doc/guides/source/activerecord_validations_callbacks.txt
  102. +12 −6 railties/doc/guides/source/association_basics.txt
  103. +6 −0 railties/doc/guides/source/authors.txt
  104. +99 −20 railties/doc/guides/source/caching_with_rails.txt
  105. +127 −158 railties/doc/guides/source/configuring.txt
  106. +69 −71 railties/doc/guides/source/creating_plugins/acts_as_yaffle.txt
  107. +88 −30 railties/doc/guides/source/creating_plugins/appendix.txt
  108. +0 −861 railties/doc/guides/source/creating_plugins/basics.markdown
  109. +63 −0 railties/doc/guides/source/creating_plugins/controllers.txt
  110. +98 −0 railties/doc/guides/source/creating_plugins/core_ext.txt
  111. +0 −69 railties/doc/guides/source/creating_plugins/custom_generator.txt
  112. +50 −0 railties/doc/guides/source/creating_plugins/gems.txt
  113. +144 −0 railties/doc/guides/source/creating_plugins/generator_commands.txt
  114. +98 −0 railties/doc/guides/source/creating_plugins/generators.txt
  115. +49 −0 railties/doc/guides/source/creating_plugins/helpers.txt
  116. +48 −72 railties/doc/guides/source/creating_plugins/index.txt
  117. +0 −89 railties/doc/guides/source/creating_plugins/migration_generator.txt
  118. +213 −0 railties/doc/guides/source/creating_plugins/migrations.txt
  119. +74 −0 railties/doc/guides/source/creating_plugins/models.txt
  120. +0 −122 railties/doc/guides/source/creating_plugins/odds_and_ends.txt
  121. +0 −169 railties/doc/guides/source/creating_plugins/preparation.txt
  122. +18 −0 railties/doc/guides/source/creating_plugins/rdoc.txt
  123. +17 −17 railties/doc/guides/source/creating_plugins/{custom_route.txt → routes.txt}
  124. +84 −0 railties/doc/guides/source/creating_plugins/setup.txt
  125. +0 −103 railties/doc/guides/source/creating_plugins/string_to_squawk.txt
  126. +27 −0 railties/doc/guides/source/creating_plugins/tasks.txt
  127. +165 −0 railties/doc/guides/source/creating_plugins/tests.txt
  128. +0 −61 railties/doc/guides/source/creating_plugins/view_helper.txt
  129. +48 −25 railties/doc/guides/source/finders.txt
  130. +5 −5 railties/doc/guides/source/getting_started_with_rails.txt
  131. +542 −0 railties/doc/guides/source/i18n.txt
  132. +10 −0 railties/doc/guides/source/index.txt
  133. +1 −1 railties/doc/guides/source/migrations/index.txt
  134. +2 −0 railties/doc/guides/source/migrations/rakeing_around.txt
  135. +1 −1 railties/doc/guides/source/routing_outside_in.txt
  136. +4 −0 railties/doc/guides/source/stylesheets/base.css
  137. +249 −141 railties/doc/guides/source/testing_rails_applications.txt
  138. +1 −1 railties/environments/boot.rb
  139. +2 −2 railties/lib/rails/vendor_gem_source_index.rb
  140. +1 −1 railties/lib/rails/version.rb
  141. +1 −1 railties/lib/tasks/databases.rake
View
@@ -1,3 +1,8 @@
+*2.2.1 [RC2] (November 14th, 2008)*
+
+* Turn on STARTTLS if it is available in Net::SMTP (added in Ruby 1.8.7) and the SMTP server supports it (This is required for Gmail's SMTP server) #1336 [Grant Hollingworth]
+
+
*2.2.0 [RC1] (October 24th, 2008)*
* Add layout functionality to mailers [Pratik]
@@ -201,49 +201,7 @@ module ActionMailer #:nodoc:
# end
#
#
- # = Configuration options
- #
- # These options are specified on the class level, like <tt>ActionMailer::Base.template_root = "/my/templates"</tt>
- #
- # * <tt>template_root</tt> - Determines the base from which template references will be made.
- #
- # * <tt>logger</tt> - the logger is used for generating information on the mailing run if available.
- # Can be set to nil for no logging. Compatible with both Ruby's own Logger and Log4r loggers.
- #
- # * <tt>smtp_settings</tt> - Allows detailed configuration for <tt>:smtp</tt> delivery method:
- # * <tt>:address</tt> - Allows you to use a remote mail server. Just change it from its default "localhost" setting.
- # * <tt>:port</tt> - On the off chance that your mail server doesn't run on port 25, you can change it.
- # * <tt>:domain</tt> - If you need to specify a HELO domain, you can do it here.
- # * <tt>:user_name</tt> - If your mail server requires authentication, set the username in this setting.
- # * <tt>:password</tt> - If your mail server requires authentication, set the password in this setting.
- # * <tt>:authentication</tt> - If your mail server requires authentication, you need to specify the authentication type here.
- # This is a symbol and one of <tt>:plain</tt>, <tt>:login</tt>, <tt>:cram_md5</tt>.
- #
- # * <tt>sendmail_settings</tt> - Allows you to override options for the <tt>:sendmail</tt> delivery method.
- # * <tt>:location</tt> - The location of the sendmail executable. Defaults to <tt>/usr/sbin/sendmail</tt>.
- # * <tt>:arguments</tt> - The command line arguments. Defaults to <tt>-i -t</tt>.
- #
- # * <tt>raise_delivery_errors</tt> - Whether or not errors should be raised if the email fails to be delivered.
- #
- # * <tt>delivery_method</tt> - Defines a delivery method. Possible values are <tt>:smtp</tt> (default), <tt>:sendmail</tt>, and <tt>:test</tt>.
- #
- # * <tt>perform_deliveries</tt> - Determines whether <tt>deliver_*</tt> methods are actually carried out. By default they are,
- # but this can be turned off to help functional testing.
- #
- # * <tt>deliveries</tt> - Keeps an array of all the emails sent out through the Action Mailer with <tt>delivery_method :test</tt>. Most useful
- # for unit and functional testing.
- #
- # * <tt>default_charset</tt> - The default charset used for the body and to encode the subject. Defaults to UTF-8. You can also
- # pick a different charset from inside a method with +charset+.
- # * <tt>default_content_type</tt> - The default content type used for the main part of the message. Defaults to "text/plain". You
- # can also pick a different content type from inside a method with +content_type+.
- # * <tt>default_mime_version</tt> - The default mime version used for the message. Defaults to <tt>1.0</tt>. You
- # can also pick a different value from inside a method with +mime_version+.
- # * <tt>default_implicit_parts_order</tt> - When a message is built implicitly (i.e. multiple parts are assembled from templates
- # which specify the content type in their filenames) this variable controls how the parts are ordered. Defaults to
- # <tt>["text/html", "text/enriched", "text/plain"]</tt>. Items that appear first in the array have higher priority in the mail client
- # and appear last in the mime encoded message. You can also pick a different order from inside a method with
- # +implicit_parts_order+.
+ # Configuration options are specified on the class level, like <tt>ActionMailer::Base.template_root = "/my/templates"</tt>
class Base
include AdvAttrAccessor, PartContainer
if Object.const_defined?(:ActionController)
@@ -254,6 +212,10 @@ class Base
private_class_method :new #:nodoc:
class_inheritable_accessor :view_paths
+ ##
+ # :singleton-method:
+ # The logger is used for generating information on the mailing run if available.
+ # Can be set to nil for no logging. Compatible with both Ruby's own Logger and Log4r loggers.
cattr_accessor :logger
@@smtp_settings = {
@@ -264,88 +226,150 @@ class Base
:password => nil,
:authentication => nil
}
+ ##
+ # :singleton-method:
+ # Allows detailed configuration for <tt>:smtp</tt> delivery method:
+ # * <tt>:address</tt> - Allows you to use a remote mail server. Just change it from its default "localhost" setting.
+ # * <tt>:port</tt> - On the off chance that your mail server doesn't run on port 25, you can change it.
+ # * <tt>:domain</tt> - If you need to specify a HELO domain, you can do it here.
+ # * <tt>:user_name</tt> - If your mail server requires authentication, set the username in this setting.
+ # * <tt>:password</tt> - If your mail server requires authentication, set the password in this setting.
+ # * <tt>:authentication</tt> - If your mail server requires authentication, you need to specify the authentication type here.
+ # This is a symbol and one of <tt>:plain</tt>, <tt>:login</tt>, <tt>:cram_md5</tt>.
cattr_accessor :smtp_settings
@@sendmail_settings = {
:location => '/usr/sbin/sendmail',
:arguments => '-i -t'
}
+ ##
+ # :singleton-method:
+ # Allows you to override options for the <tt>:sendmail</tt> delivery method.
+ # * <tt>:location</tt> - The location of the sendmail executable. Defaults to <tt>/usr/sbin/sendmail</tt>.
+ # * <tt>:arguments</tt> - The command line arguments. Defaults to <tt>-i -t</tt>.
cattr_accessor :sendmail_settings
@@raise_delivery_errors = true
+ ##
+ # :singleton-method:
+ # Whether or not errors should be raised if the email fails to be delivered.
cattr_accessor :raise_delivery_errors
+ ##
+ # :singleton-method:
+ # Defines a delivery method. Possible values are <tt>:smtp</tt> (default), <tt>:sendmail</tt>, and <tt>:test</tt>.
superclass_delegating_accessor :delivery_method
self.delivery_method = :smtp
@@perform_deliveries = true
+ ##
+ # :singleton-method:
+ # Determines whether <tt>deliver_*</tt> methods are actually carried out. By default they are,
+ # but this can be turned off to help functional testing.
cattr_accessor :perform_deliveries
@@deliveries = []
+ ##
+ # :singleton-method:
+ # Keeps an array of all the emails sent out through the Action Mailer with <tt>delivery_method :test</tt>. Most useful
+ # for unit and functional testing.
cattr_accessor :deliveries
@@default_charset = "utf-8"
+ ##
+ # :singleton-method:
+ # The default charset used for the body and to encode the subject. Defaults to UTF-8. You can also
+ # pick a different charset from inside a method with +charset+.
cattr_accessor :default_charset
@@default_content_type = "text/plain"
+ ##
+ # :singleton-method:
+ # The default content type used for the main part of the message. Defaults to "text/plain". You
+ # can also pick a different content type from inside a method with +content_type+.
cattr_accessor :default_content_type
@@default_mime_version = "1.0"
+ ##
+ # :singleton-method:
+ # The default mime version used for the message. Defaults to <tt>1.0</tt>. You
+ # can also pick a different value from inside a method with +mime_version+.
cattr_accessor :default_mime_version
@@default_implicit_parts_order = [ "text/html", "text/enriched", "text/plain" ]
+ ##
+ # :singleton-method:
+ # When a message is built implicitly (i.e. multiple parts are assembled from templates
+ # which specify the content type in their filenames) this variable controls how the parts are ordered. Defaults to
+ # <tt>["text/html", "text/enriched", "text/plain"]</tt>. Items that appear first in the array have higher priority in the mail client
+ # and appear last in the mime encoded message. You can also pick a different order from inside a method with
+ # +implicit_parts_order+.
cattr_accessor :default_implicit_parts_order
cattr_reader :protected_instance_variables
@@protected_instance_variables = %w(@body)
+ ##
# Specify the BCC addresses for the message
adv_attr_accessor :bcc
+ ##
# Define the body of the message. This is either a Hash (in which case it
# specifies the variables to pass to the template when it is rendered),
# or a string, in which case it specifies the actual text of the message.
adv_attr_accessor :body
+ ##
# Specify the CC addresses for the message.
adv_attr_accessor :cc
+ ##
# Specify the charset to use for the message. This defaults to the
# +default_charset+ specified for ActionMailer::Base.
adv_attr_accessor :charset
+ ##
# Specify the content type for the message. This defaults to <tt>text/plain</tt>
# in most cases, but can be automatically set in some situations.
adv_attr_accessor :content_type
+ ##
# Specify the from address for the message.
adv_attr_accessor :from
+ ##
# Specify the address (if different than the "from" address) to direct
# replies to this message.
adv_attr_accessor :reply_to
+ ##
# Specify additional headers to be added to the message.
adv_attr_accessor :headers
+ ##
# Specify the order in which parts should be sorted, based on content-type.
# This defaults to the value for the +default_implicit_parts_order+.
adv_attr_accessor :implicit_parts_order
+ ##
# Defaults to "1.0", but may be explicitly given if needed.
adv_attr_accessor :mime_version
+ ##
# The recipient addresses for the message, either as a string (for a single
# address) or an array (for multiple addresses).
adv_attr_accessor :recipients
+ ##
# The date on which the message was sent. If not set (the default), the
# header will be set by the delivery agent.
adv_attr_accessor :sent_on
+ ##
# Specify the subject of the message.
adv_attr_accessor :subject
+ ##
# Specify the template name to use for current message. This is the "base"
# template name, without the extension or directory, and may be used to
# have multiple mailer methods share the same template.
@@ -386,12 +410,15 @@ def respond_to?(method_symbol, include_private = false) #:nodoc:
end
def method_missing(method_symbol, *parameters) #:nodoc:
- match = matches_dynamic_method?(method_symbol)
- case match[1]
- when 'create' then new(match[2], *parameters).mail
- when 'deliver' then new(match[2], *parameters).deliver!
- when 'new' then nil
- else super
+ if match = matches_dynamic_method?(method_symbol)
+ case match[1]
+ when 'create' then new(match[2], *parameters).mail
+ when 'deliver' then new(match[2], *parameters).deliver!
+ when 'new' then nil
+ else super
+ end
+ else
+ super
end
end
@@ -429,6 +456,7 @@ def register_template_extension(extension)
"Use ActionView::Base.register_template_extension instead", caller)
end
+ # Determines the base from which template references will be made.
def template_root
self.view_paths && self.view_paths.first
end
@@ -440,7 +468,7 @@ def template_root=(root)
private
def matches_dynamic_method?(method_name) #:nodoc:
method_name = method_name.to_s
- /(create|deliver)_([_a-z]\w*)/.match(method_name) || /^(new)$/.match(method_name)
+ /^(create|deliver)_([_a-z]\w*)/.match(method_name) || /^(new)$/.match(method_name)
end
end
@@ -663,8 +691,10 @@ def perform_delivery_smtp(mail)
mail.ready_to_send
sender = mail['return-path'] || mail.from
- Net::SMTP.start(smtp_settings[:address], smtp_settings[:port], smtp_settings[:domain],
- smtp_settings[:user_name], smtp_settings[:password], smtp_settings[:authentication]) do |smtp|
+ smtp = Net::SMTP.new(smtp_settings[:address], smtp_settings[:port])
+ smtp.enable_starttls_auto if smtp.respond_to?(:enable_starttls_auto)
+ smtp.start(smtp_settings[:domain], smtp_settings[:user_name], smtp_settings[:password],
+ smtp_settings[:authentication]) do |smtp|
smtp.sendmail(mail.encoded, sender, destinations)
end
end
@@ -2,7 +2,7 @@ module ActionMailer
module VERSION #:nodoc:
MAJOR = 2
MINOR = 2
- TINY = 0
+ TINY = 1
STRING = [MAJOR, MINOR, TINY].join('.')
end
@@ -24,11 +24,15 @@ def initialize
def sendmail(mail, from, to)
@@deliveries << [mail, from, to]
end
+
+ def start(*args)
+ yield self
+ end
end
class Net::SMTP
- def self.start(*args)
- yield MockSMTP.new
+ def self.new(*args)
+ MockSMTP.new
end
end
@@ -938,6 +938,20 @@ def test_body_is_stored_as_an_ivar
mail = TestMailer.create_body_ivar(@recipient)
assert_equal "body: foo\nbar: baz", mail.body
end
+
+ def test_starttls_is_enabled_if_supported
+ MockSMTP.any_instance.expects(:respond_to?).with(:enable_starttls_auto).returns(true)
+ MockSMTP.any_instance.expects(:enable_starttls_auto)
+ ActionMailer::Base.delivery_method = :smtp
+ TestMailer.deliver_signed_up(@recipient)
+ end
+
+ def test_starttls_is_disabled_if_not_supported
+ MockSMTP.any_instance.expects(:respond_to?).with(:enable_starttls_auto).returns(false)
+ MockSMTP.any_instance.expects(:enable_starttls_auto).never
+ ActionMailer::Base.delivery_method = :smtp
+ TestMailer.deliver_signed_up(@recipient)
+ end
end
end # uses_mocha
@@ -1031,4 +1045,16 @@ def test_should_not_respond_to_create_with_template_suffix_if_it_begins_with_a_d
def test_should_not_respond_to_deliver_with_template_suffix_if_it_begins_with_a_digit
assert !RespondToMailer.respond_to?(:deliver_1_template)
end
+
+ def test_should_not_respond_to_method_where_deliver_is_not_a_suffix
+ assert !RespondToMailer.respond_to?(:foo_deliver_template)
+ end
+
+ def test_should_still_raise_exception_with_expected_message_when_calling_an_undefined_method
+ error = assert_raises NoMethodError do
+ RespondToMailer.not_a_method
+ end
+
+ assert_match /undefined method.*not_a_method/, error.message
+ end
end
View
@@ -1,4 +1,10 @@
-*2.2.1 [RC2 or 2.2 final]*
+*2.2.1 [RC2] (November 14th, 2008)*
+
+* Added render :js for people who want to render inline JavaScript replies without using RJS [DHH]
+
+* Fixed that polymorphic_url should compact given array #1317 [hiroshi]
+
+* Fixed the sanitize helper to avoid double escaping already properly escaped entities #683 [antonmos/Ryan McGeary]
* Fixed that FormTagHelper generated illegal html if name contained square brackets #1238 [Vladimir Dobriakov]
Oops, something went wrong.

0 comments on commit 4812e35

Please sign in to comment.