Class: Bogo::Smash
- Includes:
- Hashie::Extensions::Coercion, Hashie::Extensions::DeepMerge, Hashie::Extensions::IndifferentAccess, Hashie::Extensions::MergeInitializer
- Defined in:
- lib/bogo/smash.rb
Overview
Customized Hash
Defined Under Namespace
Classes: NoValue
Constant Summary collapse
Instance Method Summary collapse
-
#checksum ⇒ String
Calculate checksum of hash (sha256).
-
#fetch(*args, &block) ⇒ Object
Fetch value at given path or return a default value.
-
#get(*args) ⇒ Object, NilClass
Get value at given path.
-
#initialize(*args) ⇒ Smash
constructor
Create new instance.
- #merge(hash) ⇒ Object
- #merge!(hash) ⇒ Object
- #retrieve(*args) ⇒ Object
-
#set(*args) ⇒ Object
Set value at given path.
-
#to_hash(*args) ⇒ Hash
Convert to Hash.
Methods inherited from Hash
Constructor Details
Instance Method Details
#checksum ⇒ String
Calculate checksum of hash (sha256)
132 133 134 |
# File 'lib/bogo/smash.rb', line 132 def checksum Digest::SHA256.hexdigest(self.to_smash(:sorted).to_s) end |
#fetch(*args, &block) ⇒ Object
Fetch value at given path or return a default value
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/bogo/smash.rb', line 86 def fetch(*args, &block) if(block_given?) default_value = block elsif(args.size > 1) default_value = args.pop elsif(args.size < 1) raise ArgumentError.new("Default value must be provided for #fetch") end result = retrieve(*args) if(result == NO_VALUE) block_given? ? default_value.call(self) : default_value else result end end |
#get(*args) ⇒ Object, NilClass
Get value at given path
77 78 79 80 |
# File 'lib/bogo/smash.rb', line 77 def get(*args) val = args.empty? ? self : retrieve(*args) val == NO_VALUE ? nil : val end |
#merge(hash) ⇒ Object
39 40 41 42 |
# File 'lib/bogo/smash.rb', line 39 def merge(hash) hash = hash.to_smash super(hash) end |
#merge!(hash) ⇒ Object
34 35 36 37 |
# File 'lib/bogo/smash.rb', line 34 def merge!(hash) hash = hash.to_smash super(hash) end |
#retrieve(*args) ⇒ Object
51 52 53 54 55 56 57 58 59 60 |
# File 'lib/bogo/smash.rb', line 51 def retrieve(*args) prefix = args[0, args.size - 1] final = args.last result = prefix.empty? ? self : dig(*prefix) if(result.is_a?(Hash) && result.has_key?(final)) result[final] else NO_VALUE end end |
#set(*args) ⇒ Object
Set value at given path
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/bogo/smash.rb', line 106 def set(*args) unless(args.size > 1) raise ArgumentError.new 'Set requires at least one key and a value' end value = args.pop set_key = args.pop leaf = args.inject(self) do |memo, key| unless(memo[key].is_a?(Hash)) memo[key] = Smash.new end memo[key] end leaf[set_key] = value value end |