0.08
Low commit activity in last 3 years
A long-lived project that still receives updates
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 LocomotiveCMS.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

>= 5, < 8.0
~> 3.1.18
~> 1.12.0
>= 7, < 8.0
 Project Readme

Travis CI Status

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 LocomotiveCMS. 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 and 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

  • Ruby 2.7+ (< 3.2)
  • MongoDB 6+
  • Mongoid 7+
  • ActiveSupport 6+

Examples

On a has_many relationship

class Company
  include CustomFields::Source

  has_many :employees

  custom_fields_for :employees
end

class Employee
  include CustomFields::Target

  field :name, String

  belongs_to :company, inverse_of: :employees
end

company = Company.new
company.employees_custom_fields.build label: 'His/her position', name: 'position', type: 'string', required: true

company.save

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

another_company = Company.new
employee = another_company.employees.build
employee.position # Returns a `not defined method` error

On the class itself

IN PROGRESS

class Company
  custom_fields_for_itself
end

company = Company.new
company.self_metadata_custom_fields.build label: 'Shipping Address', name: 'address', type: '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

Development

Run specs

Run rspec or rake.

Test Coverage

Run COVERAGE=true rspec or COVERAGE=true rake.

Contact

Feel free to contact me at did at locomotivecms dot com.

License

Copyright (c) 2023 NoCoffee, released under the MIT License (MIT), see [MIT-LICENSE].