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