Module: Lazier::Hash

Extended by:
ActiveSupport::Concern
Defined in:
lib/lazier/hash.rb

Overview

Extensions for Hash objects.

Constant Summary

VALID_ACCESSES =

The supported accesses for #ensure_access

{
  strings: :stringify_keys,
  symbols: :symbolize_keys,
  indifferent: :with_indifferent_access,
  dotted: :enable_dotted_access
}

Instance Method Summary (collapse)

Instance Method Details

- (Hash) compact(&validator)

Returns a new hash, removing all keys which values are blank.

Parameters:

  • validator (Proc)

    , if present all the keys which evaluates to true will be removed. Otherwise all blank values will be removed.

Returns:

  • (Hash)

    The hash with all blank values removed.



24
25
26
27
# File 'lib/lazier/hash.rb', line 24

def compact(&validator)
  validator ||= ->(_, v) { v.blank? }
  reject(&validator)
end

- (Object) compact!(&validator)

Compacts the current hash, removing all keys which values are blank.

Parameters:

  • validator (Proc)

    , if present all the keys which evaluates to true will be removed. Otherwise all blank values will be removed.



32
33
34
35
# File 'lib/lazier/hash.rb', line 32

def compact!(&validator)
  validator ||= ->(_, v) { v.blank? }
  reject!(&validator)
end

- (Hash) enable_dotted_access(readonly = true)

Makes sure that the hash is accessible using dotted notation. This is also applied to every embedded hash.

Parameters:

  • readonly (Boolean) (defaults to: true)

    If the dotted notation is only enable for reading. true by default.

Returns:

  • (Hash)

    The current hash with keys enabled for dotted access.



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/lazier/hash.rb', line 53

def enable_dotted_access(readonly = true)
  extend(Hashie::Extensions::MethodReader)
  extend(Hashie::Extensions::MethodQuery)
  extend(Hashie::Extensions::MethodWriter) if !readonly

  each do |_, value|
    if value.is_a?(Hash) then
      value.enable_dotted_access(readonly)
    elsif value.respond_to?(:each) then
      value.each do |element|
        element.enable_dotted_access(readonly) if element.is_a?(Hash)
      end
    end
  end

  self
end

- (Hash) ensure_access(*accesses)

Makes sure that the keys of the hash are accessible in the desired way.

Parameters:

  • accesses (Array)

    The requested access for the keys. Can be :strings, :symbols or :indifferent. If nil the keys are not modified.

Returns:

  • (Hash)

    The current hash with keys modified.



41
42
43
44
45
46
47
# File 'lib/lazier/hash.rb', line 41

def ensure_access(*accesses)
  accesses.compact.inject(self) do |rv, access|
    method = VALID_ACCESSES.fetch(access.ensure_string.to_sym, nil)
    rv = rv.send(method) if method
    rv
  end
end