-
Type: Task
-
Resolution: Done
-
Affects Version/s: None
-
Component/s: None
-
Labels:None
This allows users of Mongoid to define custom field options, and execute
handlers when that option is provided.
A few use-cases spring to mind:
Auto-validations
It should be (fairly) trivial to implement field-level validations like
DataMapper and ActiveRecord, with the most trivial example looking
something like this.
Mongoid::Field.option :required do |model, field, required|
model.validates_presence_of field.name if required
end
Now the block will be executed whenever a field is defined that includes
the key :required in its options:
Person.field :name, required: true
Person.field :age, required: false
All options provided are still stored on the Field, which should also
allow for a richer level of introspection:
class Person
def required_fields
fields.select
end
end
Mass Assignment
Mongoid::Field.option :accessible do |model, field, accessible|
model.attr_accessible field.name if accessible
end
Re-writing option values, and other uses
- Turn :alias => :city into :alias => [:city]
Mongoid::Field.option :alias do |model, field|
field.options[:aliases] = [*field.options.delete(:alias)]
end
Mongoid::Field.option :aliases do |model, field, aliases|
aliases.each do |new_name|
model.alias_attribute new_name, field.name
end
end