Class: StickyParams::StrongSessionParams

Inherits:
Object
  • Object
show all
Defined in:
lib/sticky_params/strong_session_params.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(controller) ⇒ StrongSessionParams

Returns a new instance of StrongSessionParams.



6
7
8
9
# File 'lib/sticky_params/strong_session_params.rb', line 6

def initialize(controller)
  @controller = controller
  @prefix = "#{controller.controller_name}_#{controller.action_name}_"
end

Instance Attribute Details

#controller ⇒ Object (readonly)

Returns the value of attribute controller.



3
4
5
# File 'lib/sticky_params/strong_session_params.rb', line 3

def controller
  @controller
end

#prefix ⇒ Object

Returns the value of attribute prefix.



4
5
6
# File 'lib/sticky_params/strong_session_params.rb', line 4

def prefix
  @prefix
end

Instance Method Details

#[](name) ⇒ Object



31
32
33
34
35
36
37
38
39
# File 'lib/sticky_params/strong_session_params.rb', line 31

def [](name)
  session_param_name = "#{prefix}#{name}"
  controller.session['sticky_params'] ||= {}
  if controller.params[name]
    fetch_from_params(name, session_param_name)
  elsif controller.session['sticky_params'][session_param_name]
    fetch_from_session(session_param_name)
  end
end

#[]=(name, value) ⇒ Object



41
42
43
44
45
# File 'lib/sticky_params/strong_session_params.rb', line 41

def []=(name, value)
  session_param_name = "#{prefix}#{name}"
  controller.session['sticky_params'] ||= {}
  controller.session['sticky_params'][session_param_name] = controller.params[name] = value
end

#clear! ⇒ Object

clears all sticky params for the current controller/action name



48
49
50
51
52
53
54
# File 'lib/sticky_params/strong_session_params.rb', line 48

def clear!
  if controller.session['sticky_params'].present?
    controller.session['sticky_params'].reject! do |key, _value|
      key.index(prefix) == 0
    end
  end
end

#clear_all! ⇒ Object

clears all sticky parameters



57
58
59
# File 'lib/sticky_params/strong_session_params.rb', line 57

def clear_all!
  controller.session.delete('sticky_params')
end

#fetch_from_params(name, session_param_name) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/sticky_params/strong_session_params.rb', line 11

def fetch_from_params(name, session_param_name)
  if controller.params[name].present?
    if controller.params[name].is_a?(ActionController::Parameters)
      controller.session['sticky_params'][session_param_name] = controller.params[name].to_unsafe_hash
    else
      controller.session['sticky_params'][session_param_name] = controller.params[name]
    end
    controller.params[name]
  else
    controller.session['sticky_params'].delete session_param_name
    nil
  end
end

#fetch_from_session(session_param_name) ⇒ Object



25
26
27
28
29
# File 'lib/sticky_params/strong_session_params.rb', line 25

def fetch_from_session(session_param_name)
  result = controller.session['sticky_params'][session_param_name]
  # covert hash to action parameters for simulating a normal param
  result.is_a?(Hash) ? ActionController::Parameters.new(result) : result
end