acts_as_aliased

Extends ActiveRecord::Base with a mechanism to create aliases for resources.

THIS IS ALPHA SOFTWARE AND SHOULD BE USED WITH CARE.

Installation

gem 'acts_as_aliased'

After updating your bundle, run

rails generate acts_as_aliased:install
rake db:migrate

This will create a new table aliases.

Usage

Let's say you have a model Company that requires aliasing because there are different versions of the company name. Enable aliasing in your model by using acts_as_aliased:

model Company < ActiveRecord::Base
  acts_as_aliased
end

This assumes a column called name on your company model. You can specify a different column by passing a column argument:

model Company < ActiveRecord::Base
  acts_as_aliased :column => 'title'
end

An alias can be created manually like this:

company = Company.create(name: "foo")
ActsAsAliased.create(name: "bar", aliased: company)

But a more common use case is that you have two instances of a model and would like to convert one into an alias of the other. Say you have these two companies:

foo = Company.create(name: "Foo")
foollc = Company.create(name: "Foo LLC")

Then you can convert one into an alias for the other like this:

foo.to_alias!(foollc) # this will DESTROY foo and create a new alias for foollc in it's place

Now let's say you also have a model called Project and that a company has many projects:

model Company < ActiveRecord::Base
  has_many :projects
end

This implies a foreign key company_id in the projects table. When you convert a company into an alias, you'll also want to update those foreign keys. You can accomplish this by passing the associations to be updated to acts_as_alias:

model Company < ActiveRecord::Base
  has_many :projects
  acts_as_aliased associations: [:projects]
end

Finally, to find a model by it's alias, acts_as_aliased implements a lookup class method on your model:

company = Company.create(name: "foo")
ActsAsAliased.create(name: "bar", aliased: company)

Company.lookup("foo")  # returns company
Company.lookup("bar")  # also returns company

Contributing to acts_as_aliased

  • Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
  • Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
  • Fork the project.
  • Start a feature/bugfix branch.
  • Commit and push until you are happy with your contribution.
  • Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
  • Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.

Copyright (c) 2012 LegitScript. See LICENSE.txt for further details.