How would you ruby-fy this non-AR model class for Ruby on Rails app?
For starters:

def initialize(attributes = {})
  attributes.each do |attr, value|
    self.send "#{attr}=", value
  end
end


Would allow you to turn:

r1 = Role.new
r1.id = 1
r1.symbol = :owner
r1.name = "Owner"
r1.has_all_permissions = true
role_list &lt;&lt; r1


into:

role_list &lt;&lt; Role.new {:id =&gt; 1,
                       :symbol =&gt; :owner,
                       :name =&gt; "Owner",
                       :has_all_permissions =&gt; true}


which is much more ActiveRecord-like.



Storing the roles_list in a global variable might be acceptable for your application and would also allow you to have:

def self.create(attributes = {})
  $roles_list &lt;&lt; Role.new(attributes)
end


and:

def self.all
  return $roles_list if $roles_list

  # rest of code to init $roles_list with default roles
end


for further ActriveRecord-ness



Then:

def self.find(id)
  roles = Role.all

  roles.each do |role|
    if role.id == id
      return role
    end
  end

  nil
end


could be re-written like so:

def self.find(id)
  Role.all.find{|r| r.id == id}
end


That is because Array has its own #find method. The same refactoring could be applied to self.find_by_symbol.



As a final note, I would move the attr_accessor lines to the top.

Hope I helped :-)