Class: FormJourney::Parameters

Inherits:
HashWithIndifferentAccess
  • Object
show all
Defined in:
lib/form_journey/parameters.rb

Instance Method Summary collapse

Constructor Details

#initialize(attributes = nil, session) ⇒ Parameters

Returns a new instance of Parameters.



3
4
5
6
7
# File 'lib/form_journey/parameters.rb', line 3

def initialize(attributes = nil, session)
  @session = (session || {})
  @session.deep_merge!(attributes.deep_symbolize_keys) if attributes
  super(@session)
end

Instance Method Details

#[]=(key, value) ⇒ Object



14
15
16
17
# File 'lib/form_journey/parameters.rb', line 14

def []=(key, value)
  super
  update_session
end

#add_to_array(*path, value:, unique: false) ⇒ Object



56
57
58
59
60
61
# File 'lib/form_journey/parameters.rb', line 56

def add_to_array(*path, value:, unique: false)
  array = Array(get(*path))
  array << value
  array.uniq! if unique
  set(*path, value: array)
end

#clear!Object



9
10
11
12
# File 'lib/form_journey/parameters.rb', line 9

def clear!
  replace({})
  @session.clear
end

#del(*keys) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/form_journey/parameters.rb', line 28

def del(*keys)
  parent_param = self
  while !keys.empty?
    return nil if parent_param.nil?

    if keys.length == 1
      del_param = parent_param.try(:delete, keys.shift)
      update_session
      return del_param
    end
    parent_param = parent_param[keys.shift]
  end
end

#get(*keys) ⇒ Object



19
20
21
22
23
24
25
26
# File 'lib/form_journey/parameters.rb', line 19

def get(*keys)
  params = to_hash
  while !keys.empty?
    return nil if params.nil?
    params = params[keys.shift.to_s]
  end
  params
end

#remove_from_array(*path, value:) ⇒ Object



63
64
65
66
67
# File 'lib/form_journey/parameters.rb', line 63

def remove_from_array(*path, value:)
  array = Array(get(*path))
  array.select! { |v| v != value }
  set(*path, value: array)
end

#require(key) ⇒ Object



69
70
71
# File 'lib/form_journey/parameters.rb', line 69

def require(key)
  ActionController::Parameters.new(to_hash).require(key)
end

#set(*keys, value:) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/form_journey/parameters.rb', line 42

def set(*keys, value:)
  parent_param = self
  while !keys.empty?
    return nil if parent_param.nil?

    if keys.length == 1
      parent_param[keys.shift] = value
      update_session
      return self
    end
    parent_param = parent_param[keys.shift]
  end
end