No commit activity in last 3 years
No release in over 3 years
Allows specified attributes to be freely overwritten _until_ the record is saved for the first time
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies
 Project Readme

ImmutableAttributes
===================

When you want to prevent certain attributes from being changed once set you can declare them as immutable:

class MyModel < ActiveRecord::Base
  attr_immutable :permalink, :param_identifier
end

When MyModel.find(:first).permalink = 'anything' is called it will raise an ImmutableAttributeError
MyModel.new.permalink = 'works!' will properly set the value because the record is unsaved.

If you'd only like this to happen for certain conditions, and want to handle other attribute-writers, too (like update_attribute), you can use the validation.

validates_immutable :permalink

Configuration options for the validation:
* :message - A customer error message (default is: "can't be changed")
* :if - Specifies a method, proc, or string to call to determine if the validation should occure (e.g., :if => :allow_validation or :if => Proc.new{|user| user.signup_step > 2}. The method, proc or string should return or evaluate to a true or false value.
* :unless - Specifies a method, proc, or string to call to determine if the validation should not occure (e.g., :unless => :skip_validation or :unless => Proc.new{|user| user.signup_step <= 2}. The method, proc or string should return or evaluate to a true or false value.

Created by Jack Danger Canty @ http://6brand.com
Released under the same licence as Rails (MIT)