Custom Attributes

Makes it easy to extend models with custom attributes. Think about adding telephone numbers to people, or weight and size measurements to products.

Most of these fields can be used purely dynamic and objects could have multiples of them (think telephone numbers, or email addresses)

This code is NOT production ready yet!

TODO

  • Make Formtastic extension better
  • Supply specs for the formtastic part
  • Make custom extensions work as nested forms (accept_attributes_for stuff)

Contents of the package

  • Extension for ActiveRecord
  • Extension for Formtastic (including jQuery widget)
  • Extension for Cucumber for integration testing

Usage

ActiveRecord will be extended automatically

Formtastic needs to be extended manually, like:

Formtastic::SemanticFormBuilder.send(:include, Formtastic::CustomAttributes)

Or when using a custom Form builder, just

include ::Formtastic::CustomAttributes

in your custom form builder

In the public folder are CSS and jQuery files for building a user interface

Example

# model
class Location < ActiveRecord::Base

  has_custom_attributes :url => :string, :telephone => :string, :email => :string, :custom => :string do |fields|
    fields.telephone :common, :help_desk, :sales, :fax
    fields.email :common, :sales, :help_desk
    fields.url :website
  end

end

# view (haml)

= semantic_form_for resource do |form|
  = form.inputs "General", :name
  = form.custom_attribute_inputs
  = form.buttons

I18n

nl:
  activerecord:
    custom_attributes:
      location:
        attribute_names:
          telephone:
            one: "telefoonnummer"
            other: "telefoonnummers"
          url:
            one: "website"
            other: "websites"
          email:
            one: "e-mail adres"
            other: "e-mail adressen"
          custom:
            one: "ander attribuut"
            other: "andere attributen"

        telephone:
          common: "Algemeen"
          help_desk: "Helpdesk"
          sales: "Verkoop afdeling"
          fax: "Fax"

        email:
          common: "Algemeen"
          help_desk: "Helpdesk"
          sales: "Verkoop afdeling"

    formtastic:
      actions:
        add_custom_attribute: "Attribuut toevoegen"
        create_custom_attribute: "%{attribute} toevoegen"
        destroy_custom_attribute: "%{attribute} verwijderen"

      hints:
        location:
          telephone: "+31 (0) 12 3456 789"