Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Fastest/One-liner way to list attr_accessors in Ruby?

What's the shortest, one-liner way to list all methods defined with attr_accessor? I would like to make it so, if I have a class MyBaseClass, anything that extends that, I can get the attr_accessor's defined in the subclasses. Something like this:

class MyBaseClass < Hash   def attributes     # ??   end end  class SubClass < MyBaseClass   attr_accessor :id, :title, :body end  puts SubClass.new.attributes.inspect #=> [id, title, body] 

What about to display just the attr_reader and attr_writer definitions?

like image 401
Lance Avatar asked Mar 21 '10 14:03

Lance


1 Answers

Extract the attributes in to an array, assign them to a constant, then splat them in to attr_accessor.

class SubClass < MyBaseClass   ATTRS = [:id, :title, :body]   attr_accessor(*ATTRS) end 

Now you can access them via the constant:

puts SubClass.ATTRS #=> [:id, :title, :body] 
like image 90
davetapley Avatar answered Sep 21 '22 18:09

davetapley