class APIHub::Mash

Public Class Methods

[](value = nil, *args)
Alias for: new
new(value = nil, *args) click to toggle source
Calls superclass method
# File lib/apihub/mash.rb, line 3
def self.new(value = nil, *args)
  if value.respond_to?(:each) &&
    !value.respond_to?(:each_pair)
    value.map {|v| super(v) }
  else
    super
  end
end
Also aliased as: []
new(source_hash = nil, default = nil, &blk) click to toggle source
Calls superclass method
# File lib/apihub/mash.rb, line 14
def initialize(source_hash = nil, default = nil, &blk)
  deep_update(source_hash.to_hash) if source_hash
  default ? super(default) : super(&blk)
end

Public Instance Methods

[](key)
Also aliased as: regular_reader
Alias for: custom_reader
custom_reader(key) { |value| ... } click to toggle source

Retrieves an attribute set in the Mash. Will convert any key passed in to a string before retrieving.

# File lib/apihub/mash.rb, line 34
def custom_reader(key)
  value = regular_reader(convert_key(key))
  yield value if block_given?
  value
end
Also aliased as: []
deep_merge(other_hash, &blk) click to toggle source

Performs a deep_update on a duplicate of the current mash.

# File lib/apihub/mash.rb, line 92
def deep_merge(other_hash, &blk)
  dup.deep_update(other_hash, &blk)
end
Also aliased as: merge
deep_merge!(other_hash, &blk)
Alias for: deep_update
deep_update(other_hash, &blk) click to toggle source

Recursively merges this mash with the passed in hash, merging each hash in the hierarchy.

# File lib/apihub/mash.rb, line 99
def deep_update(other_hash, &blk)
  other_hash.each_pair do |k,v|
    key = convert_key(k)
    if regular_reader(key).is_a?(Mash) and v.is_a?(::Hash)
      custom_reader(key).deep_update(v, &blk)
    else
      value = convert_value(v, true)
      value = blk.call(key, self[k], value) if blk
      custom_writer(key, value)
    end
  end
  self
end
Also aliased as: deep_merge!, update
delete(key) click to toggle source
Calls superclass method
# File lib/apihub/mash.rb, line 73
def delete(key)
  super(convert_key(key))
end
dup() click to toggle source

Duplicates the current mash as a new mash.

# File lib/apihub/mash.rb, line 79
def dup
  self.class.new(self, self.default)
end
Also aliased as: regular_dup
fetch(key, *args) click to toggle source
Calls superclass method
# File lib/apihub/mash.rb, line 69
def fetch(key, *args)
  super(convert_key(key), *args)
end
has_key?(key)
Alias for: key?
include?(key)
Alias for: key?
initializing_reader(key) click to toggle source

This is the bang method reader, it will return a new Mash if there isn’t a value already assigned to the key requested.

# File lib/apihub/mash.rb, line 52
def initializing_reader(key)
  ck = convert_key(key)
  regular_writer(ck, self.class.new) unless key?(ck)
  regular_reader(ck)
end
key?(key) click to toggle source
Calls superclass method
# File lib/apihub/mash.rb, line 83
def key?(key)
  super(convert_key(key))
end
Also aliased as: has_key?, include?, member?
member?(key)
Alias for: key?
merge(other_hash, &blk)
Alias for: deep_merge
merge!(other_hash, &blk)
Alias for: update
method_missing(method_name, *args, &blk) click to toggle source
# File lib/apihub/mash.rb, line 143
def method_missing(method_name, *args, &blk)
  return self.[](method_name, &blk) if key?(method_name)
  match = method_name.to_s.match(/(.*?)([?=!_]?)$/)
  case match[2]
  when "="
    self[match[1]] = args.first
  when "?"
    !!self[match[1]]
  when "!"
    initializing_reader(match[1])
  when "_"
    underbang_reader(match[1])
  else
    default(method_name, *args, &blk)
  end
end
regular_dup()
Alias for: dup
regular_reader(key)
Alias for: []
replace(other_hash) click to toggle source
# File lib/apihub/mash.rb, line 130
def replace(other_hash)
  (keys - other_hash.keys).each { |key| delete(key) }
  other_hash.each { |key, value| self[key] = value }
  self
end
respond_to?(method_name, include_private=false) click to toggle source

Will return true if the Mash has had a key set in addition to normal respond_to? functionality.

Calls superclass method
# File lib/apihub/mash.rb, line 138
def respond_to?(method_name, include_private=false)
  return true if key?(method_name) || method_name.to_s.slice(/[=?!_]\Z/)
  super
end
shallow_merge(other_hash) click to toggle source

Performs a shallow_update on a duplicate of the current mash

# File lib/apihub/mash.rb, line 117
def shallow_merge(other_hash)
  dup.shallow_update(other_hash)
end
shallow_update(other_hash) click to toggle source

Merges (non-recursively) the hash from the argument, changing the receiving hash

# File lib/apihub/mash.rb, line 123
def shallow_update(other_hash)
  other_hash.each_pair do |k,v|
    regular_writer(convert_key(k), convert_value(v, true))
  end
  self
end
underbang_reader(key) click to toggle source

This is the under bang method reader, it will return a temporary new Mash if there isn’t a value already assigned to the key requested.

# File lib/apihub/mash.rb, line 60
def underbang_reader(key)
  ck = convert_key(key)
  if key?(ck)
    regular_reader(ck)
  else
    self.class.new
  end
end
update(other_hash, &blk)
Also aliased as: merge!
Alias for: deep_update