The ActiveAccess mixin makes it easy to limit access to ActiveModel and ActiveRecord attributes by declaring generated attribute accessor methods private.
Mixing the ActiveAcess::AttributeMethods into a class that mixes in ActiveModel::AttributeMethods or is derived from ActiveRecord::Base adds the attr_private and attr_private_writer macros.
These macros change the behavior of define_attribute_methods to declare generated attribute accessors private: attr_private declares all accessors for an attribute private; attr_private_writer declares only writer methods private.
ActiveAccess recognizes the following attribute reader method name patterns:
#name#name?#name_before_type_cast#name_changed?#name_change#name_was#_name
ActiveAccess recognizes the following attribute writer method name patterns:
#name=#name_will_change#reset_name!
classWidget<ActiveRecord::BaseincludeActiveAccess::AttributeMethodsattr_private_writer:read_meattr_private:secretendWidget.new.respond_to?:read_me# => trueWidget.new.read_me = "new value"# raises NoMethodErrorWidget.new.respond_to?:secret# => falseWidget.new.secret = "new value"# raises NoMethodError
ActiveAccess only restricts access to named attribute accessors. Unnamed accessors such as ActiveRecord read_attribute and write_attribute as well as hash-style access are not restricted. Attribute aliases are also unrestricted.
ActiveRecord does not allow attributes with private writers to be initialized (i.e. passed as parameters to new) or mass-assigned (passed as parameters to assign_attributes or attributes=).
Copyright © 2012 Riley Lynch, Teleological Software, LLC. See LICENSE.txt for further details.