Getter For


  gem install getter_for

Setup

image you have a ticket model that belongs to a user. you can add convenience methods for any user attribute like that:


  class Ticket < ActiveRecord::Base
    belongs_to :user
    
    getter_for :user => :name
  end
  
  @ticket = Ticket.new
  @ticket.user_name      # => @ticket.user.name if @ticket.user

That method returns nil if user is nil, so it can safely used in your views

You can pass multiple key/value pairs separated by comma and provide arrays for both model name and method name. let me show you:


  class Project < ActiveRecord::Base
    belongs_to :category
    belongs_to :user
    belongs_to :assignee, :class_name => 'User'
    
    getter_for [:category, :user] =>  :name,
                :assignee         => [:email, :phone]
  end
  
  @project = Project.new
  @project.category_name     # => @project.category.name  if @project.category
  @project.user_name         # => @project.user.name      if @project.user
  @project.assignee_email    # => @project.assignee.email if @project.assignee
  @project.assignee_phone    # => @project.assignee.phone if @project.assignee    

you can also make fancy stuff like:


  class User < ActiveRecord::Base
    belongs_to :department
    getter_for :department => :name        # => user.department_name
  end
  
  class Comment < ActiveRecord::Base
    belongs_to :user
    getter_for :user => :department_name   # => comment.user_department_name
  end
  
  @comment = Comment.new
  @comment.user_department_name    # => @comment.user.department.name if @comment.user && @comment.user.department

Copyright © 2009 Martin Linkhorst, released under the MIT license.