I have some methods in a class that look like this:

  def h_coil(chan)
    raise NoDataError if @h_coils[chan].nil?
    @h_coils[chan]
  end

  def i_coil(chan)
    raise NoDataError if @i_coils[chan].nil?
    @i_coils[chan]
  end

and so on and so forth...

I've been refactoring a bit to cut down on the redunancy in the code, and
I'm wondering your thoughts on the best way of doing this, considering
that all methods have the same "signature".

Is define_method the smartest way?

# pseudo code off the top of my head, probably has errors:

def create_coil_method(name)
  define_method(name) do |chan|
    iv = ("@" + name.to_s + "s").to_sym
    val = instance_variable_get(iv)
    raise NoDataError if val.nil?
    val[chan]
  end
end

create_coil_method(:h_coil)
create_coil_method(:i_coil)
...

Thanks,
Caleb