Sha256: ca98270d063bb5b5f5b310b1b90bc0deebc09d975cdbf172970174c37a10fbd4
Contents?: true
Size: 1.55 KB
Versions: 3
Compression:
Stored size: 1.55 KB
Contents
require 'preserve/compatibility' require 'preserve/session_key' module Preserve class Callback delegate :params, to: :controller delegate :session, to: :controller def initialize(source_class, parameter_key, options) @source_class = source_class @parameter_key = parameter_key @options = options end def before(controller) @controller = controller if parameter_blank? parameter_stored? ? restore_parameter : set_default_value else store_parameter end end private attr_reader :source_class attr_reader :parameter_key attr_reader :options attr_reader :controller def parameter_blank? predicate = options[:allow_blank] ? :nil? : :blank? parameter_value.__send__(predicate) end def parameter_stored? session.key?(session_key) end def restore_parameter self.parameter_value = session[session_key] end def set_default_value self.parameter_value = options[:default] if options[:default] end def store_parameter session[session_key] = parameter_value end def parameter_value keys = Array(parameter_key) keys.reduce(params) { |h, k| h[k] if h.is_a?(HASH_CLASS) } end def parameter_value=(value) *keys, last_key = parameter_key nested_hash = keys.reduce(params) do |hash, key| hash[key] ||= HASH_CLASS.new end nested_hash[last_key] = value end def session_key SessionKey.new(source_class, parameter_key).build end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
preserve-2.1.0 | lib/preserve/callback.rb |
preserve-2.0.1 | lib/preserve/callback.rb |
preserve-2.0.0 | lib/preserve/callback.rb |