public
Fork of zargony/activerecord_symbolize
Description: Symbolize attribute values in ActiveRecord (e.g. for nicer enums)
Homepage:
Clone URL: git://github.com/nuxlli/activerecord_symbolize.git
name age message
file MIT-LICENSE Tue Apr 15 08:19:00 -0700 2008 Updated copyright and removed unneeded stuff [zargony]
file README Fri Nov 14 04:10:02 -0800 2008 Update README [nuxlli]
file Rakefile Tue Apr 15 08:16:04 -0700 2008 Initial commit: rails plugin skeleton [zargony]
file init.rb Tue Aug 19 14:18:41 -0700 2008 Add helpers select_sym and radio_sym [Everton A. Ribeiro]
directory lib/ Sun Apr 26 13:23:22 -0700 2009 Update for compatibility with Rails 2.2 and 2.3 [nuxlli]
directory test/ Fri Dec 05 05:37:04 -0800 2008 Update test for not depend of the rails app [nuxlli]
README
= Symbolize attribute values in ActiveRecord (e.g. for nicer enums)

This plugin introduces an easy way to use symbols for values of ActiveRecord
attributes. Symbolized attributes return a ruby symbol (or nil) as their value
and can be set using symbols.

== About

Since ActiveRecord does not natively support database column types of ENUM or
SET, you'll usually use a string attribute and restrict it to certain values
with validations. Using this plugin, the values of such pseudo-enums are
symbols, which look more ruby-style than strings.

Simply add "symbolize :attr_name" to your model class, and the specified
attribute will return symbol values and can be set using smbols (setting
string values will still work, which is important when using forms).

An attribute to symbolize should be a string (varchar) column in the database.

Blog: http://zargony.com/
Github: http://github.com/zargony/activerecord_symbolize

== Install

  ./script/plugin install git://github.com/zargony/activerecord_symbolize.git

== Usage

Add "symbolize :attr_name" to your model class. You may also want to add
validates_inclusion_of to restrict the possible values (just like an enum).

  class User < ActiveRecord::Base
    symbolize :gender, :in => [:female, :male]
    symbolize :so, :in => {
      :windows => "Windows XP",
      :linux   => "Linux",
      :mac     => "Mac OS X"
    }
    symbolize :office, :allow_blank => true, :in => [
      [:kde , 'Koffice'],
      [:ms  , 'Microsoft Office'],
      [:open, 'Open Office']
    ]
  end

== Examples

  u = User.find_by_name('Anna')   # => #<User Anna>
  u.gender                        # => :female
  
  u = User.find_by_gender(:male)  # => #<User Bob>
  u.gender                        # => :male
  
  u = User.find(:all, :conditions => { :gender => :female })
  
  u = User.new(:name => 'ET', :gender => :unknown)
  u.save                          # => validation fails
  
== Examples Helpers

  <% form_for @user do |f| %>
    <%= f.radio_sym "gender" %>
    <!-- Alphabetic order -->
    <%= f.select_sym "so" %>
    <!-- Fixed order -->
    <%= f.select_sym "office" %>
  <% end %>
  
  output:
  
  <form action="users/1" method="post">
    <div style="margin:0;padding:0">...</div>
    <label>Female <input id="user_gender_female" name="user[gender]" type="radio" value="female"></label>
    <label>Male <input checked="checked" id="user_gender_male" name="user[gender]" type="radio" value="male" ></label>   
     
    <!-- Alphabetic order -->
    <select id="user_so" name="post[so]">
      <option value="linux" selected="selected">Linux</option>
      <option value="mac">Mac OS X</option>
      <option value="windows">Windows XP</option>
    </select>
    <!-- Fixed order -->
    <select id="user_office" name="post[office]">
      <option value="kde" selected="selected">Koffice</option>
      <option value="ms">Microsoft Office</option>
      <option value="open">Open Office</option>
    </select>
  </form>
== Notes

I've been using this for quite some time and made it a rails plugin now. More
background iinformation can be found at
http://zargony.com/2007/09/07/symbolize-attribute-values-in-activerecord


Copyright (c) 2007-2008 Andreas Neuhaus, released under the MIT license