class Bogo::Smash
Customized Hash
Constants
- NO_VALUE
Private Class Methods
new(*args)
click to toggle source
Create new instance
@param args [Object] argument list
Calls superclass method
# File lib/bogo/smash.rb, line 23 def initialize(*args) base = nil if(args.first.is_a?(::Hash)) base = args.shift end super *args if(base) self.replace(base.to_smash) end end
Private Instance Methods
checksum()
click to toggle source
Calculate checksum of hash (sha256)
@return [String] checksum
# File lib/bogo/smash.rb, line 132 def checksum Digest::SHA256.hexdigest(self.to_smash(:sorted).to_s) end
fetch(*args, &block)
click to toggle source
Fetch value at given path or return a default value
@param args [String, Symbol, Object] key path to walk. last value default to return @return [Object] value at key or default value
# 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)
click to toggle source
Get value at given path
@param args [String, Symbol] key path to walk @return [Object, NilClass]
# File lib/bogo/smash.rb, line 77 def get(*args) val = args.empty? ? self : retrieve(*args) val == NO_VALUE ? nil : val end
merge(hash)
click to toggle source
Calls superclass method
# File lib/bogo/smash.rb, line 39 def merge(hash) hash = hash.to_smash super(hash) end
merge!(hash)
click to toggle source
Calls superclass method
# File lib/bogo/smash.rb, line 34 def merge!(hash) hash = hash.to_smash super(hash) end
retrieve(*args)
click to toggle source
# 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)
click to toggle source
Set value at given path
@param args [String, Symbol, Object] key path to walk. set last value to given path @return [Object] value set
# 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
to_hash(*args)
click to toggle source
Convert to Hash
@return [Hash]
# File lib/bogo/smash.rb, line 125 def to_hash(*args) self.to_type_converter(::Hash, :to_hash, *args) end