Class Hashie::Mash
In: lib/hashie/mash.rb
Parent: Hash

Mash allows you to create pseudo-objects that have method-like accessors for hash keys. This is useful for such implementations as an API-accessing library that wants to fake robust objects without the overhead of actually doing so. Think of it as OpenStruct with some additional goodies.

A Mash will look at the methods you pass it and perform operations based on the following rules:

  • No punctuation: Returns the value of the hash for that key, or nil if none exists.
  • Assignment (=): Sets the attribute of the given method name.
  • Existence (?): Returns true or false depending on whether that key has been set.
  • Bang (!): Forces the existence of this key, used for deep Mashes. Think of it as "touch" for mashes.
  • Under Bang (_): Like Bang, but returns a new Mash rather than creating a key. Used to test existance in deep Mashes.

Basic Example

  mash = Mash.new
  mash.name? # => false
  mash.name = "Bob"
  mash.name # => "Bob"
  mash.name? # => true

Hash Conversion Example

  hash = {:a => {:b => 23, :d => {:e => "abc"}}, :f => [{:g => 44, :h => 29}, 12]}
  mash = Mash.new(hash)
  mash.a.b # => 23
  mash.a.d.e # => "abc"
  mash.f.first.g # => 44
  mash.f.last # => 12

Bang Example

  mash = Mash.new
  mash.author # => nil
  mash.author! # => <Mash>

  mash = Mash.new
  mash.author!.name = "Michael Bleigh"
  mash.author # => <Mash name="Michael Bleigh">

Under Bang Example

  mash = Mash.new
  mash.author # => nil
  mash.author_ # => <Mash>
  mash.author_.name # => nil

  mash = Mash.new
  mash.author_.name = "Michael Bleigh"  (assigned to temp object)
  mash.author # => <Mash>

Methods

Included Modules

Hashie::Extensions::PrettyInspect Hashie::Extensions::RubyVersionCheck

Classes and Modules

Class Hashie::Mash::CannotDisableMashWarnings

Constants

ALLOWED_SUFFIXES = %w[? ! = _].freeze

External Aliases

inspect -> to_s
new -> []
[] -> regular_reader
[]= -> regular_writer
custom_writer -> []=
dup -> regular_dup
key? -> regular_key?

Public Class methods

Disable the logging of warnings based on keys conflicting keys/methods

@api semipublic @return [void]

Checks whether this class disables warnings for conflicting keys/methods

@api semipublic @return [Boolean]

Inheritance hook that sets class configuration when inherited.

@api semipublic @return [void]

If you pass in an existing hash, it will convert it to a Mash including recursively descending into arrays and hashes, converting them as well.

Public Instance methods

[](key)

Alias for custom_reader

Assigns a value to a key

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

Performs a deep_update on a duplicate of the current mash.

deep_merge!(other_hash, &blk)

Alias for deep_update

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

Duplicates the current mash as a new mash.

play nice with ActiveSupport Array#extract_options!

has_key?(key)

Alias for key?

include?(key)

Alias for key?

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

member?(key)

Alias for key?

merge(other_hash, &blk)

Alias for deep_merge

merge!(other_hash, &blk)

Alias for update

another ActiveSupport method, see issue 270

Performs a shallow_update on a duplicate of the current mash

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

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.

update(other_hash, &blk)

Alias for deep_update

Protected Instance methods

[Validate]