Sha256: 134f78146a4c17d49c26c6f9fc6e1e948cd07faa3451e4fd05707c0efb41c8fd

Contents?: true

Size: 798 Bytes

Versions: 2

Compression:

Stored size: 798 Bytes

Contents

require 'active_support'

module Preserve
  def self.filter(name, key)
    lambda do
      if params[name].blank?
        value = session[key.to_sym]
        params[name] = value if value.present?
      else
        session[key.to_sym] = params[name]
      end
    end
  end

  def preserve(*parameters)
    options = parameters.extract_options!
    prefix = options.delete(:prefix)

    parameters.each do |name|
      key = [prefix, controller_name, name].compact.join('_')
      _set_preserve_filter(options, &Preserve.filter(name, key))
    end
  end

  def _set_preserve_filter(*args, &block)
    if respond_to?(:before_action)
      before_action(*args, &block)
    else
      before_filter(*args, &block)
    end
  end
end

ActiveSupport.on_load(:action_controller) do
  extend Preserve
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
preserve-0.1.2 lib/preserve.rb
preserve-0.1.1 lib/preserve.rb