/custom_fields

Manage custom fields to a mongoid document or a collection

Primary LanguageRubyMIT LicenseMIT

CustomFields

Manage custom fields to a mongoid document or a collection. This module is one of the core features we implemented in our custom cms named Locomotive.
Basically, its aim is to provide to editors a way to manage extra fields to a Mongoid document through for instance a web UI.

The main goals:

  • offering a very secure way to add / edit / delete extra fields to a Mongoid document
  • scoping the modifications added to a Mongoid document so that other documents of the same class won’t be updated.

Requirements

ActiveSupport 3.1.1, MongoDB 2.0 and Mongoid 2.3.2

Examples

On a has_many relationship

class Company
  embeds_many :employees

  custom_fields_for :employees
end

class Employee
  field :name, String

  embedded_in :company, :inverse_of => :employees
end

company = Company.new
company.employees_custom_fields.build :label => 'His/her position', :_alias => 'position', :kind => 'string', :required => true

company.save

company.employees.build :name => 'Michael Scott', :position => 'Regional manager'

another_company = Company.new
employee = company.employees.build
employee.position # returns a "not defined method" error

On the class itself

class Company
  custom_fields_for_itself
end

company = Company.new
company.self_metadata_custom_fields.build :label => 'Shipping Address', :_alias => 'address', :kind => 'text'

company.save

company.self_metadata.address = '700 S Laflin, 60607 Chicago'

another_company = Company.new
other_company.self_metadata.address # returns a "not defined method" error

Contact

Feel free to contact me at didier at nocoffee dot fr.

Copyright © 2011 NoCoffee, released under the MIT license