-
Notifications
You must be signed in to change notification settings - Fork 1
Gives ActiveRecord a constantize_attribute macro allowing attribute values to be Class and Module objects, among other things
License
duelinmarkers/constantize_attribute
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
ConstantizeAttribute ==================== A simple Rails plugin that gives ActiveRecord a macro-style class method for declaring that certain attributes should have their values serialized with to_s and deserialized with constantize. This allows you to use Class and Module objects as attribute values. Since it uses to_s, the value will be stored as an easily read, easily updated string in the database, which is often preferable to the YAML you get with Rails' built in serialize macro. Note this also works with any other constant object that follows the same contract with respect to to_s and constantize being symmetrical, for example an enumeration created with [shameless plug!] the renum gem. Example ======= # ... your migration ... create_table :robots do |t| t.column :behavior_module, :string end # ... your model ... class Robot < ActiveRecord::Base constantize_attribute :behavior_module end # ... some classes or modules you want to store as attribute values ... module RobotBehaviors module Handy def self.encounter "Is there anything I can help you with?" end end module Evil def self.encounter "I will destroy all humans." end end end # ... so now, robby = Robot.create :behavior_module => RobotBehaviors::Evil # Now "RobotBehaviors::Evil" is in the behavior_module column. robby.behavior_module.encounter # => "I will destroy all humans." robby.update_attribute :behavior_module, RobotBehaviors::Handy # Now "RobotBehaviors::Handy" is in the behavior_module column. robby = Robot.find :first robby.behavior_module.encounter # => "Is there anything I can help you with?" Usage ===== You can specify multiple attribute names in one call. The constantize_attribute method is aliased to constantize_attributes if you find that reads better. Note this will not work with anonymous classes or modules: The definition is not stored in the database, only the name. Copyright (c) 2008 John D. Hume, released under the MIT license
About
Gives ActiveRecord a constantize_attribute macro allowing attribute values to be Class and Module objects, among other things
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published