diff --git a/CHANGELOG.md b/CHANGELOG.md index c0d23b1..142b2b7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ### Unreleased +- [Pull Request 23](https://github.com/winston/rails_utils/pull/23) - Fix #flash_messages not properly apply `html_safe`ed. + ### Version 3.3.3 - [Pull Request 21](https://github.com/winston/rails_utils/pull/21) - Fix page controller class bug for nested-level controllers - by @allenwq. diff --git a/lib/rails_utils.rb b/lib/rails_utils.rb index 51a7883..97dbeb0 100644 --- a/lib/rails_utils.rb +++ b/lib/rails_utils.rb @@ -52,7 +52,7 @@ def flash_messages(options = {}) next if message.blank? next if key.to_s == 'timedout' - content_tag(:div, content_tag(:button, options[:button_html] || "x", type: "button", class: options[:button_class] || "close", "data-dismiss" => "alert") + message, class: "#{flash_class(key)} fade in #{options[:class]}") + content_tag(:div, content_tag(:button, options[:button_html] || "x", type: "button", class: options[:button_class] || "close", "data-dismiss" => "alert") + message.html_safe, class: "#{flash_class(key)} fade in #{options[:class]}") end.join("\n").html_safe end diff --git a/test/rails_utils_test.rb b/test/rails_utils_test.rb index 46b0ca7..43fb2a5 100644 --- a/test/rails_utils_test.rb +++ b/test/rails_utils_test.rb @@ -265,5 +265,23 @@ def set_flash(key, message) set_flash :timedout, "not important" view.flash_messages.must_equal "" end + + it "should be `html_safe`ed" do + set_flash :alert, "not important" + + view.flash_messages.html_safe?.must_equal true + end + + it "each message of flash should call html_safe" do + set_flash :alert, Minitest::Mock.new + + messages = view.flash.instance_variable_get(:@flashes).values.each do |message| + message.expect :blank?, false + message.expect :html_safe, "test" + message.expect :html_safe?, true + end + + view.flash_messages.must_equal "