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)
-
- (Hash) compact(&validator)
Returns a new hash, removing all keys which values are blank.
-
- (Object) compact!(&validator)
Compacts the current hash, removing all keys which values are blank.
-
- (Hash) enable_dotted_access(readonly = true)
Makes sure that the hash is accessible using dotted notation.
-
- (Hash) ensure_access(*accesses)
Makes sure that the keys of the hash are accessible in the desired way.
Instance Method Details
- (Hash) compact(&validator)
Returns a new hash, removing all keys which values are blank.
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.
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.
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.
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 |