# Pretty neat Mash class (Magic Hash)

**URL:** <https://www.ruby-forum.com/t/pretty-neat-mash-class-magic-hash/123892>\
**Category:** Rails\
**Created:** [December 21, 2007, 7:44pm UTC](https://www.ruby-forum.com/t/pretty-neat-mash-class-magic-hash/123892 "2007-12-21T19:44:54Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![uncle](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/e5b9ba/32.png) [@uncle](https://www.ruby-forum.com/u/uncle)\
**Post date:** [December 21, 2007, 7:44pm UTC](https://www.ruby-forum.com/t/pretty-neat-mash-class-magic-hash/123892/1 "2007-12-21T19:44:54Z")

</div>

class Mash \< Hash  
def method\_missing(name, value=nil)  
key = name.to\_s.sub(/[=?!]$/,’’).to\_sym  
self[key] = value if name.to\_s[-1,1] == “=”  
self[key] = Mash.new unless self[key] || value  
return self[key]  
end  
end

Its like OpenStruct…so what can you do?

require ‘pp’  
m = Mash.new  
m.first\_name = “john”  
m.last\_name = “doe”  
m.address.street = “somewhere drive”  
m.address.city = “somecity”  
m.address.state = “somestate”  
m.address.zip = 12334  
pp m

{:address=\>  
{:state=\>“somestate”,  
:street=\>“somewhere drive”,  
:city=\>“somecity”,  
:zip=\>12334},  
:first\_name=\>“john”,  
:last\_name=\>“doe”}
