Class: Locomotive::ContentType
- Inherits:
-
Object
- Object
- Locomotive::ContentType
- Includes:
- CustomFields::Source, Extensions::ContentType::DefaultValues, Extensions::ContentType::ItemTemplate, Extensions::ContentType::Sync, Mongoid::Document
- Defined in:
- app/models/locomotive/content_type.rb
Class Method Summary collapse
-
.class_name_to_content_type(class_name, site) ⇒ Locomotive::ContentType
Retrieve from a class name the associated content type within the scope of a site.
Instance Method Summary collapse
- #class_name_to_content_type(class_name) ⇒ Object
-
#entries ⇒ Object
behaviours ##.
-
#entries_class_name ⇒ String
Get the class name of the entries.
-
#find_entries_custom_field(id_or_name) ⇒ Object
Find a custom field describing an entry based on its id in first or its name if not found.
- #group_by_field ⇒ Object
- #groupable? ⇒ Boolean
- #label_field_id=(value) ⇒ Object
- #label_field_name=(value) ⇒ Object
- #list_or_group_entries(options = {}) ⇒ Object
-
#name ⇒ Object
fields ##.
- #order_by_definition(reverse_order = false) ⇒ Object
-
#order_manually? ⇒ Boolean
methods ##.
-
#ordered ⇒ Object
named scopes ##.
-
#ordered_entries(options = nil) ⇒ Criteria
Order the list of entries, paginate it if requested and filter it.
-
#site ⇒ Object
validations ##.
- #sortable_column ⇒ Object
Methods included from Extensions::ContentType::ItemTemplate
Class Method Details
.class_name_to_content_type(class_name, site) ⇒ Locomotive::ContentType
Retrieve from a class name the associated content type within the scope of a site. If no content type is found, the method returns nil
181 182 183 184 185 186 187 |
# File 'app/models/locomotive/content_type.rb', line 181 def self.class_name_to_content_type(class_name, site) if class_name =~ /^Locomotive::ContentEntry(.*)/ site.content_types.find($1) else nil end end |
Instance Method Details
#class_name_to_content_type(class_name) ⇒ Object
134 135 136 |
# File 'app/models/locomotive/content_type.rb', line 134 def class_name_to_content_type(class_name) self.class.class_name_to_content_type(class_name, self.site) end |
#entries ⇒ Object
behaviours ##
59 |
# File 'app/models/locomotive/content_type.rb', line 59 custom_fields_for :entries |
#entries_class_name ⇒ String
Get the class name of the entries.
155 156 157 |
# File 'app/models/locomotive/content_type.rb', line 155 def entries_class_name self.klass_with_custom_fields(:entries).to_s end |
#find_entries_custom_field(id_or_name) ⇒ Object
Find a custom field describing an entry based on its id in first or its name if not found.
166 167 168 169 170 171 |
# File 'app/models/locomotive/content_type.rb', line 166 def find_entries_custom_field(id_or_name) return nil if id_or_name.nil? # bypass the memoization _field = self.entries_custom_fields.find(id_or_name) rescue nil _field || self.entries_custom_fields.where(name: id_or_name).first end |
#group_by_field ⇒ Object
108 109 110 |
# File 'app/models/locomotive/content_type.rb', line 108 def group_by_field self.find_entries_custom_field(self.group_by_field_id) end |
#groupable? ⇒ Boolean
104 105 106 |
# File 'app/models/locomotive/content_type.rb', line 104 def groupable? !!self.group_by_field && %w(select belongs_to).include?(group_by_field.type) end |
#label_field_id=(value) ⇒ Object
138 139 140 141 142 143 |
# File 'app/models/locomotive/content_type.rb', line 138 def label_field_id=(value) # update the label_field_name if the label_field_id is changed new_label_field_name = self.entries_custom_fields.where(_id: value).first.try(:name) self.label_field_name = new_label_field_name super(value) end |
#label_field_name=(value) ⇒ Object
145 146 147 148 149 |
# File 'app/models/locomotive/content_type.rb', line 145 def label_field_name=(value) # mandatory if we allow the API to set the label field name without an id of the field @new_label_field_name = value unless value.blank? super(value) end |
#list_or_group_entries(options = {}) ⇒ Object
122 123 124 125 126 127 128 129 130 131 132 |
# File 'app/models/locomotive/content_type.rb', line 122 def list_or_group_entries( = {}) if self.groupable? if self.group_by_field.type == 'select' self.entries.group_by_select_option(self.group_by_field.name, self.order_by_definition) else group_by_belongs_to_field(self.group_by_field) end else self.ordered_entries() end end |
#name ⇒ Object
fields ##
13 |
# File 'app/models/locomotive/content_type.rb', line 13 field :name |
#order_by_definition(reverse_order = false) ⇒ Object
67 68 69 70 71 72 73 74 75 |
# File 'app/models/locomotive/content_type.rb', line 67 def order_by_definition(reverse_order = false) direction = self.order_manually? ? 'asc' : self.order_direction || 'asc' if reverse_order direction = (direction == 'asc' ? 'desc' : 'asc') end [order_by_attribute, direction] end |
#order_manually? ⇒ Boolean
methods ##
63 64 65 |
# File 'app/models/locomotive/content_type.rb', line 63 def order_manually? self.order_by == '_position' end |
#ordered ⇒ Object
named scopes ##
42 |
# File 'app/models/locomotive/content_type.rb', line 42 scope :ordered, order_by(updated_at: :desc) |
#ordered_entries(options = nil) ⇒ Criteria
Order the list of entries, paginate it if requested and filter it.
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'app/models/locomotive/content_type.rb', line 84 def ordered_entries( = nil) ||= {} page, per_page = .delete(:page), .delete(:per_page) # search for a label if [:q] [label_field_name.to_sym] = /#{.delete(:q)}/i end # order list _order_by_definition = ( || {}).delete(:order_by).try(:split) || self.order_by_definition # get list _entries = self.entries.order_by([_order_by_definition]).where() # pagination or full list !self.order_manually? && page ? _entries.page(page).per(per_page) : _entries end |
#site ⇒ Object
validations ##
25 |
# File 'app/models/locomotive/content_type.rb', line 25 belongs_to :site, class_name: 'Locomotive::Site', validate: false |
#sortable_column ⇒ Object
112 113 114 115 116 117 118 119 120 |
# File 'app/models/locomotive/content_type.rb', line 112 def sortable_column # only the belongs_to field has a special column for relative positionning # that's why we don't call groupable? if self.group_by_field.try(:type) == 'belongs_to' && self.order_manually? "position_in_#{self.group_by_field.name}" else '_position' end end |