Skip to content

Instantly share code, notes, and snippets.

@Fivell
Last active December 15, 2016 09:29
Show Gist options
  • Save Fivell/02541ba82810aadcb064823b291126a3 to your computer and use it in GitHub Desktop.
Save Fivell/02541ba82810aadcb064823b291126a3 to your computer and use it in GitHub Desktop.
alternative to open struct
# h = ActiveSupport::OrderedOptions.new
# h.boy = 'John'
# h.girl = 'Mary'
# h.boy # => 'John'
# h.girl # => 'Mary'
class OrderedOptions < Hash
alias_method :_get, :[] # preserve the original #[] method
protected :_get # make it protected
def []=(key, value)
super(key.to_sym, value)
end
def [](key)
super(key.to_sym)
end
def method_missing(name, *args)
name_string = name.to_s
if name_string.chomp!('=')
self[name_string] = args.first
else
self[name]
end
end
def respond_to_missing?(name, include_private)
true
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment