Flash Gordon is a Rails Flash helper Gem that allows you to add custom flash notification handlers anywhere within your application.
# Gemfile
gem 'flash_gordon'
To add a custom flash event user the append method, the default zone will be :alert
FlashGordon::Flash.append("Notification Message")
# It also accepts an array and will pad the messages with <br/> or otherwise specified tags
FlashGordon::Flash.append ["You can include", "Arrays which will be joined", "by your specified glue"]
You can specify a zone in append method. The default zones are similar to bootstrap alerts classes, which are :warning, :success, :info, :danger. The rails default :error is included by default also.
# Available Zones are :warning, :success, :info, :error, :danger
FlashGordon::Flash.append "Success Message", :success
To create custom zones create an initializer file that contains the following:
# config/initializers/flash_gordon.rb
FlashGordon.setup do |config|
#multi values will be added in next version
config.add_zone(:pewpewpew)
end
# Any view
FlashGordon::Flash.append("Message",:pewpewpew)
# this will now work
To render the flashes, just put this anywhere in your view where you want to show, e.g application.html.erb
# application.html.erb
<%= render_flash %>
If you dont want to use an all in one flash render, you can cherry pick your render by specifying the zone, glue and container tag
For example,
# For example if you want to build a unordered list of the :danger zone with each listing having
# a class of 'flash-item' and a unique id of 'flash-i' where i is the index of the element.
# Note that % is replaced by the index of messages starting from 0
# Use the following syntax to render a custom zone,
# render_flash zone, glue, tag
<%= render_flash :danger, "li.flash-item#flash-%", "ul" %>
# If the glue is set to "br" will separate each element by <br> tags instead of a wrapping element.
# If the glue is set to "" it will just join the messages without spacing.
Produces
<ul class="alert alert-danger">
<li class="flash-item" id="flash-0"> Your first message</li>
<li class="flash-item" id="flash-1"> Your second message</li>
<li class="flash-item" id="flash-2"> Your third message</li>
</ul>
This project is on a kickass MIT-License :O