Class: Locomotive::ContentEntry

Inherits:
Object
  • Object
show all
Includes:
CustomFields::Target, Extensions::ContentEntry::Csv, Extensions::Shared::Seo, Mongoid::Document
Defined in:
app/models/locomotive/content_entry.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Extensions::ContentEntry::Csv

#to_values

Class Method Details

.drop_classObject

All the content entries no matter the content type they belong to share the same liquid drop class.

Parameters:

  • The (Class)

    liquid drop class



140
141
142
# File 'app/models/locomotive/content_entry.rb', line 140

def self.drop_class
  Locomotive::Liquid::Drops::ContentEntry
end

Find a content entry by its permalink

Parameters:

Returns:

  • (Object)

    The content entry matching the permalink or nil if not found



108
109
110
# File 'app/models/locomotive/content_entry.rb', line 108

def self.find_by_permalink(permalink)
  self.where(_slug: permalink).first
end

.presenter_classObject

All the content entries no matter the content type they belong to share the same presenter class.

Parameters:

  • The (Class)

    content entry presenter class



131
132
133
# File 'app/models/locomotive/content_entry.rb', line 131

def self.presenter_class
  Locomotive::ContentEntryPresenter
end

.sort_entries!(ids) ⇒ Object

Sort the content entries from an ordered array of content entry ids. Their new positions are persisted.

Parameters:

  • The (Array)

    ordered array of ids



117
118
119
120
121
122
123
124
# File 'app/models/locomotive/content_entry.rb', line 117

def self.sort_entries!(ids)
  list = self.any_in(_id: ids.map { |id| Moped::BSON::ObjectId.from_string(id.to_s) }).to_a
  ids.each_with_index do |id, position|
    if entry = list.detect { |e| e._id.to_s == id.to_s }
      entry.update_attributes _position: position
    end
  end
end

Instance Method Details

#_label(type = nil) ⇒ String Also known as: to_label

Any content entry owns a label property which is used in the back-office UI to represent it. The field used as the label is defined within the parent content type.

Parameters:

  • (optional) (Object)

    The content type to avoid to run another MongoDB and useless query.

Returns:

  • (String)

    The “label” of the content entry



49
50
51
52
53
54
55
56
57
# File 'app/models/locomotive/content_entry.rb', line 49

def _label(type = nil)
  value = if self._label_field_name
    self.send(self._label_field_name.to_sym)
  else
    self.send((type || self.content_type).label_field_name.to_sym)
  end

  value.respond_to?(:to_label) ? value.to_label : value.to_s
end

#_slugObject Also known as: _permalink

validations ##



12
# File 'app/models/locomotive/content_entry.rb', line 12

field :_slug

#nextObject

Return the next content entry based on the order defined in the parent content type.

Parameters:

  • The (Object)

    next content entry or nil if not found



90
91
92
# File 'app/models/locomotive/content_entry.rb', line 90

def next
  next_or_previous :gt
end

#previousObject

Return the previous content entry based on the order defined in the parent content type.

Parameters:

  • The (Object)

    previous content entry or nil if not found



98
99
100
# File 'app/models/locomotive/content_entry.rb', line 98

def previous
  next_or_previous :lt
end

#siteObject

associations ##



21
# File 'app/models/locomotive/content_entry.rb', line 21

belongs_to  :site,          class_name: 'Locomotive::Site'

#translated?Boolean

Tell if the content entry has been translated or not. It just checks if the field used for the label has been translated.

Returns:

  • (Boolean)

    True if translated, false otherwise



66
67
68
69
70
71
72
# File 'app/models/locomotive/content_entry.rb', line 66

def translated?
  if self.respond_to?(:"#{self._label_field_name}_translations")
    self.send(:"#{self._label_field_name}_translations").key?(::Mongoid::Fields::I18n.locale.to_s) #rescue false
  else
    true
  end
end

#translated_inArray

Return the locales the content entry has been translated to.

Returns:

  • (Array)

    The list of locales. Nil if not localized



78
79
80
81
82
83
84
# File 'app/models/locomotive/content_entry.rb', line 78

def translated_in
  if self.respond_to?(:"#{self._label_field_name}_translations")
    self.send(:"#{self._label_field_name}_translations").keys
  else
    nil
  end
end

#visibleObject

named scopes ##



33
# File 'app/models/locomotive/content_entry.rb', line 33

scope :visible, where(_visible: true)