Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
specify attributes within an ActiveRecord model that can be set but not modified
branch: master
Failed to load latest commit information.
lib using 'attr' instead of 'meth'
rails Configuring for Rails GemLocator
test extending Nicholas' fix and adding test.
.document Jeweler-ifying the gem
.gitignore Added a validates_immutable validation.
LICENSE Releasing under the MIT
README
Rakefile adding Terry and Nicholas as authors
VERSION
immutable_attributes.gemspec Regenerate gemspec for version 1.2.0
init.rb adding tests.
install.rb better readme

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)

Something went wrong with that request. Please try again.