lib/gritter/gflash.rb in gritter-1.0.3 vs lib/gritter/gflash.rb in gritter-1.1.0

- old
+ new

@@ -1,51 +1,86 @@ -module Gritter - module Gflash - def redirect_to(options = {}, response_status_and_flash = {}) - if response_status_and_flash.has_key?(:gflash) - gflash(response_status_and_flash[:gflash]) - response_status_and_flash.delete(:gflash) - end - super(options, response_status_and_flash) - end - - def gflash *args - session[:gflash] ||= {} - options = args.extract_options! - - if args.present? - args.each do |key| - gflash_push(key, gflash_translation(key)) - end - end - - options.each do |key, value| - if value.is_a?(Hash) - if value.has_key?(:value) - value[:value] = gflash_text(key, value[:value]) - else - value[:value] = gflash_translation(key) - end - else - value = gflash_text(key, value) - end - gflash_push(key, value) - end - end - - private - - def gflash_text(key, value) - value == true ? gflash_translation(key) : value - end - - def gflash_push(key, value) - session[:gflash][key] ||= [] - session[:gflash][key].push(value) - end - - def gflash_translation(key) - i18n_key = "gflash.#{params[:controller]}.#{params[:action]}.#{key}" - I18n.t(i18n_key.gsub(/\//, "."), :default => i18n_key.to_sym) - end - end +module Gritter + module Gflash + def redirect_to(options = {}, response_status_and_flash = {}) + if response_status_and_flash.has_key?(:gflash) + gflash(response_status_and_flash[:gflash]) + response_status_and_flash.delete(:gflash) + end + super(options, response_status_and_flash) + end + + def gflash *args + session[:gflash] ||= {} + options = args.extract_options! + + if args.size == 1 && args.first.is_a?(Array) + args = args.first + end + + flash_now = args.include?(:now) + args.delete(:now) if flash_now + + if args.present? + args.each do |key| + gflash_push(key, gflash_translation(key, options[:locals]), flash_now) + end + end + + options.except(:locals).each do |key, value| + if value.is_a?(Hash) + if value.has_key?(:value) + value[:value] = gflash_text(key, value[:value], value[:locals]) + else + value[:value] = gflash_translation(key, value[:locals]) + end + else + value = gflash_text(key, value, options[:locals]) + end + gflash_push(key, value, flash_now) + end + end + + private + + def gflash_text(key, value, options={}) + value == true ? gflash_translation(key, options) : value + end + + def gflash_push(key, value, now=false) + session[:gflash][key] ||= [] + session[:gflash][key].push(value) + + if Gritter.rails_flash_fallback + if now + flash.now[key] ||= [] + flash.now[key].push(value.is_a?(Hash) ? value[:value] : value) + else + flash[key] ||= [] + flash[key].push(value.is_a?(Hash) ? value[:value] : value) + end + end + end + + def gflash_translation(key, options) + options ||= {} + + i18n_default_key = "gflash.defaults.#{key}" + i18n_default_action_key = "gflash.defaults.#{params[:action]}.#{key}" + i18n_key = "gflash.#{params[:controller]}.#{params[:action]}.#{key}" + i18n_key.gsub!(/\//, ".") + + begin + options[:raise] = true + translation = I18n.t(i18n_key, options) + rescue I18n::MissingTranslationData + begin + translation = I18n.t(i18n_default_action_key, options) + rescue I18n::MissingTranslationData + options.delete(:raise) + translation = I18n.t(i18n_default_key, options) + end + end + + translation + end + end end \ No newline at end of file