Class: ModelExtensions::Order::NonNilHash

Inherits:
Object
  • Object
show all
Defined in:
app/api/model_extensions/order.rb

Overview

rubocop:enable Metrics/MethodLength

Instance Method Summary collapse

Constructor Details

#initialize(key_style_operation = :symbolize_keys) ⇒ NonNilHash

Returns a new instance of NonNilHash.



96
97
98
99
# File 'app/api/model_extensions/order.rb', line 96

def initialize(key_style_operation = :symbolize_keys)
  @key_style_operation = key_style_operation
  @store = ActiveSupport::HashWithIndifferentAccess.new
end

Instance Method Details

#[](*keys) ⇒ Object



106
107
108
# File 'app/api/model_extensions/order.rb', line 106

def [](*keys)
  node_and_leaf(*keys) { |node, leaf| node.fetch(leaf, nil) }
end

#[]=(*keys_and_values) ⇒ Object



110
111
112
113
114
115
# File 'app/api/model_extensions/order.rb', line 110

def []=(*keys_and_values)
  value = keys_and_values.pop
  return if value.nil?

  node_and_leaf(*keys_and_values) { |node, leaf| node[leaf] = value }
end

#deep_merge(hash) ⇒ Object



101
102
103
104
# File 'app/api/model_extensions/order.rb', line 101

def deep_merge(hash)
  @store.deep_merge!(hash.try(@key_style_operation) || {})
  self
end

#fetch(*keys_and_default) ⇒ Object



117
118
119
120
# File 'app/api/model_extensions/order.rb', line 117

def fetch(*keys_and_default)
  default = keys_and_default.pop
  node_and_leaf(*keys_and_default) { |node, left| node.fetch(left, default) }
end

#to_hashObject



122
123
124
# File 'app/api/model_extensions/order.rb', line 122

def to_hash
  Hash.new.deep_merge(@store)
end