Class: CustomFields::Field
- Inherits:
-
Object
- Object
- CustomFields::Field
- Includes:
- Mongoid::Document, Mongoid::Timestamps
- Defined in:
- lib/custom_fields/field.rb
Constant Summary collapse
- AVAILABLE_TYPES =
%w(default string text email date date_time boolean file select float integer money tags color relationship_default belongs_to has_many many_to_many password json)
Instance Method Summary collapse
- #as_json(options = {}) ⇒ Object
-
#collect_diff(memo) ⇒ Hash
Builds the mongodb updates based on the new state of the field.
-
#label ⇒ Object
validations ##.
-
#to_recipe ⇒ Hash
Returns the information (name, type, required, …etc) needed to build the custom class.
-
#type ⇒ Object
types ##.
Instance Method Details
#as_json(options = {}) ⇒ Object
75 76 77 78 79 80 |
# File 'lib/custom_fields/field.rb', line 75 def as_json( = {}) method_name = :"#{self.type}_as_json" custom_as_json = self.send(method_name) rescue {} super().merge(custom_as_json) end |
#collect_diff(memo) ⇒ Hash
Builds the mongodb updates based on the new state of the field. Call a different method if the field has a different behaviour.
47 48 49 50 51 52 53 54 55 |
# File 'lib/custom_fields/field.rb', line 47 def collect_diff(memo) method_name = :"collect_#{self.type}_diff" if self.respond_to?(method_name) self.send(method_name, memo) else collect_default_diff(memo) end end |
#label ⇒ Object
validations ##
17 |
# File 'lib/custom_fields/field.rb', line 17 field :label |
#to_recipe ⇒ Hash
Returns the information (name, type, required, …etc) needed to build the custom class. That will be stored into the target instance.
63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/custom_fields/field.rb', line 63 def to_recipe method_name = :"#{self.type}_to_recipe" custom_to_recipe = self.send(method_name) rescue {} { 'name' => self.name, 'type' => self.type, 'required' => self.required?, 'unique' => self.unique?, 'localized' => self.localized?, 'default' => self.default }.merge(custom_to_recipe) end |
#type ⇒ Object
types ##
12 13 14 |
# File 'lib/custom_fields/field.rb', line 12 AVAILABLE_TYPES.each do |type| include "CustomFields::Types::#{type.camelize}::Field".constantize end |