Read OpenStruct attribute name from variable

Can't find that discussed anywhere, but maybe I just don't know how to
look.

I have lots of style parameters in an object. First, I implemented it as
a hash, so I have the method

  def set_style(stylepars)
    stylepars.each {|key, val| @style[key] = val}
  end

Now I want to exchange the Hash for an OpenStruct, because it's much
easier on the eyes in statements like this:

    sepline = @style['verticalsep'] + sepline +
      @style['horizontalsep']*@style['padding'] +
      @style['verticalsep'] if @style['box']

But how can I set "the attribute whose name is in the variable *key*"?

···

--
Oliver C.
45n31, 73w34
Temperatur: 26.8°C (3 June 2005 2:00 PM EDT)

key = 'foo'

value = open_struct.send 'foo'

open_struct.send "#{ foo }=", value

hth.

-a

···

On Fri, 3 Jun 2005, Oliver Cromm wrote:

Can't find that discussed anywhere, but maybe I just don't know how to
look.

I have lots of style parameters in an object. First, I implemented it as
a hash, so I have the method

def set_style(stylepars)
   stylepars.each {|key, val| @style[key] = val}
end

Now I want to exchange the Hash for an OpenStruct, because it's much
easier on the eyes in statements like this:

   sepline = @style['verticalsep'] + sepline +
     @style['horizontalsep']*@style['padding'] +
     @style['verticalsep'] if @style['box']

But how can I set "the attribute whose name is in the variable *key*"?

--

email :: ara [dot] t [dot] howard [at] noaa [dot] gov
phone :: 303.497.6469
My religion is very simple. My religion is kindness.
--Tenzin Gyatso

===============================================================================

A mathematics professor once told me that textbooks should contain
enough errors, so that students would have to spot them, and not get
lazy.
So, yes, after changing the obvious error, the above works fine, thanks.

  open_struct.send "#{ key }=", value

···

* Ara.T.Howard@noaa.gov wrote:

On Fri, 3 Jun 2005, Oliver Cromm wrote:

But how can I set "the attribute whose name is in the variable *key*"?

key = 'foo'

value = open_struct.send 'foo'

open_struct.send "#{ foo }=", value

hth.

--
A computer will do what you tell it to do, but that may be much
different from what you had in mind. - Joseph Weizenbaum