A Mash.
Add this line to your application's Gemfile:
gem 'mashed'
And then execute:
$ bundle
Or install it yourself as:
$ gem install mashed
Mash = Mashed::Mash
m = Mash.new(title: "Hello", starred: false, completed_at: nil)
m.title # => "Hello"
m.methods # => ["title", "starred", "completed_at"]
tasks = Api(:tasks, :v1).get("/tasks", list_id: "inbox").json.map { |hash| Mash.new(hash) }
tasks.each do |task|
puts tasks.title
end
Mash = Mashed::Mash
m = Mash.new(a: "A", b: "B")
m.map { |key, value| puts [key, value].inspect } # => raise
# assuming activesupport is present...
m.with_indifferent_access # => nil
# there is no key of "with_indifferent_access" for the internal hash
h = StringyHash.stringify(a: "A", b: "B")
h["a"] === h[:a] # => true
h[:something_new] = "foo"
h.key?(:something_new) # => true
h.key?("something_new") # => true
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request
To help make the Mash work there also is a StringyHash class. It's a simple delegate to the normal Hash except that it tries to enforce that all incoming and outgoing keys are strings.
StringyHash = Mash::StringyHash
sh = StringyHash.new(title: "Hello", starred: false, completed_at: nil)
sh.keys # => ["title", "starred", "completed_at"]
sh[:title] # => "Hello"
sh["title"] # => "Hello"
class Title
def to_s
"title"
end
end
sh[Title.new] # => "Hello"