On Thu, Jul 21, 2011 at 4:17 PM, Chad Perrin <code / apotheon.net> wrote:

> Is there a way to use attr_accessor, or something like it (without
> writing it from scratch), for hash keys?  For instance:
>
>    class Foo
>      attr_accessor :bar[:one], :bar[:two]
>      def initialize(bar)
>        @bar = bar
>      end
>    end
>
> Obviously, :bar[:one] and :bar[:two] won't work, because symbols don't
> have [] methods, but that should illustrate the general gist of what I'm
> asking (I hope).  I'd just like to avoid the clutter of writing a bunch
> of basic accessors myself, the long way, in a class definition where I'd
> like to keep all the data in a hash but have direct accessor method ways
> to work with specific key=>value pairs.
>
> --
> Chad Perrin [ original content licensed OWL: http://owl.apotheon.org ]
>


You could coerce forwardable into kind of behaving like this:

require 'forwardable'
class Foo
  extend Forwardable
  def_delegator '@bar', '[], :one', 'one'
  def_delegator '@bar', '[], :two', 'two'

  def initialize(bar)
    @bar = bar
  end

end

foo = Foo.new one: 1, two: 2
foo.one # => 1
foo.two # => 2


But if they ever change its implementation, this will break >.<

Honestly, I'd probably do what Sean did.