Sha256: 3f913f756a94ccbdebc4ce4523b33c7c91a87efca413bbb11b3488cc67494f3a

Contents?: true

Size: 790 Bytes

Versions: 1

Compression:

Stored size: 790 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('_')
      _preserve_filter(options, &Preserve.filter(name, key))
    end
  end

  def _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

1 entries across 1 versions & 1 rubygems

Version Path
preserve-0.1.0 lib/preserve.rb