Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Hashie is a collection of classes and mixins that make hashes more powerful.

Bump version to 1.2.0

latest commit 0a8e3b52b5
Michael Bleigh authored
Failed to load latest commit information.
lib Bump version to 1.2.0
spec Fix spec broken by merge
.gitignore ignore .rvmrc
.travis.yml Fixing specs for all versions of Ruby.
Guardfile Switch to Bundler for gem management and Guard for autotesting.
README.rdoc [REQUIRED] properties added to Dash, removed Lash class
Rakefile Switch to Bundler for gem management and Guard for autotesting.



Hashie is a growing collection of tools that extend Hashes and make them more useful.


Hashie is available as a RubyGem:

gem install hashie


Mash is an extended Hash that gives simple pseudo-object functionality that can be built from hashes and easily extended. It is designed to be used in RESTful API libraries to provide easy object-like access to JSON and XML parsed hashes.


mash = # => false # => nil = "My Mash" # => "My Mash" # => true
mash.inspect # => <Hashie::Mash name="My Mash">

mash =
# use bang methods for multi-level assignment!.name = "Michael Bleigh" # => <Hashie::Mash name="Michael Bleigh">

Note: The ? method will return false if a key has been set to false or nil. In order to check if a key has been set at all, use the mash.key?('some_key') method instead.


Dash is an extended Hash that has a discrete set of defined properties and only those properties may be set on the hash. Additionally, you can set defaults for each property. You can also flag a property as required. Required properties will raise an execption if unset.


class Person < Hashie::Dash
  property :name, :required => true
  property :email
  property :occupation, :default => 'Rubyist'

p = # => ArgumentError: The property 'name' is required for this Dash.

p = => "Bob") # => 'Bob' = nil # => ArgumentError: The property 'name' is required for this Dash. = ''
p.occupation   # => 'Rubyist'        # => ''
p[:awesome]    # => NoMethodError
p[:occupation] # => 'Rubyist'


A Trash is a Dash that allows you to translate keys on initialization. It is used like so:

class Person < Hashie::Trash
  property :first_name, :from => :firstName

This will automatically translate the firstName key to first_name when it is initialized using a hash such as through: => 'Bob')


Clash is a Chainable Lazy Hash that allows you to easily construct complex hashes using method notation chaining. This will allow you to use a more action-oriented approach to building options hashes.

Essentially, a Clash is a generalized way to provide much of the same kind of “chainability” that libraries like Arel or Rails 2.x's named_scopes provide.


c =
c.where(:abc => 'def').order(:created_at)
c # => {:where => {:abc => 'def}, :order => :created_at}

# You can also use bang notation to chain into sub-hashes,
# jumping back up the chain with _end!
c =
c # => {:where => {:abc => 'def', :ghi => 123}, :order => :created_at}

# Multiple hashes are merged automatically
c =
c.where(:abc => 'def').where(:hgi => 123)
c # => {:where => {:abc => 'def', :hgi => 123}}

Note on Patches/Pull Requests

  • Fork the project.

  • Make your feature addition or bug fix.

  • Add tests for it. This is important so I don't break it in a future version unintentionally.

  • Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)

  • Send me a pull request. Bonus points for topic branches.


  • Michael Bleigh


Copyright © 2009 Intridea, Inc ( See LICENSE for details.

Something went wrong with that request. Please try again.