# Only support Rails 3+?
#require 'action_dispatch'
require "stackable_flash/version"
require "stackable_flash/config"
require "stackable_flash/flash_stack"
require "stackable_flash/stack_layer"
module StackableFlash
require 'stackable_flash/railtie' if defined?(Rails)
class << self
attr_accessor :stacking
end
self.stacking = true # Turn on stacking by default
# Regardless of the value of StackableFlash.stacking you can do a local override to force stacking.
#
# StackableFlash.stacked do
# flash[:notice] = 'a simple string' # You can continue to use flash as if this gem did not exist
# flash[:notice] << 'another' # will stack the strings
# flash[:notice] # => ['a simple string','another'],
# # Uses the default :stack_with_proc to transform
# flash[:notice].stack # => "a simple string
another" (default config uses
),
# flash[:notice] = '' # will overwrite everything above, and set back to empty string
# end
#
# StackableFlash.stacked({:stack_with_proc => Proc.new {|arr| arr.map! {|x| "
#{x}
"}.join } } ) do # flash[:error] = 'original' # flash[:error] << 'message' # flash[:error] # => ['original','message'] # # Uses the custom :stack_with_proc above to transform # flash[:error].stack # => 'original
message
' # end # def self.stacked(config_options = {}, &block) flashing({:forcing => true}) do original = StackableFlash::Config.config.dup StackableFlash::Config.config.merge!(config_options) yield StackableFlash::Config.config = original end end # Regardless of the value of StackableFlash.stacking you can do a local override to force non-stacking. # # StackableFlash.not_stacked do # flash[:notice] = 'a simple string' # You can continue to use flash as if this gem did not exist # flash[:notice] << 'another' # will concatenate the strings # flash[:notice] # => "a simple stringanother" # flash[:notice].stack # => "a simple stringanother" # flash[:notice] = '' # will overwrite everything above, and set back to empty string # end # def self.not_stacked &block flashing({:forcing => false}) do yield end end def self.flashing(options, &block) return false unless block_given? original = StackableFlash.stacking StackableFlash.stacking = options[:forcing] yield StackableFlash.stacking = original end end