Sha256: 8e2c6b12f05ae5ba846da222088a2ec8299e18b862c7afa9c355b9d37a566a3d

Contents?: true

Size: 1.67 KB

Versions: 7

Compression:

Stored size: 1.67 KB

Contents

module Spree
  class CmsPage < Base
    include SingleStoreResource
    include DisplayLink

    acts_as_paranoid

    TYPES = ['Spree::Cms::Pages::StandardPage',
             'Spree::Cms::Pages::FeaturePage',
             'Spree::Cms::Pages::Homepage']

    belongs_to :store, touch: true

    has_many :cms_sections, class_name: 'Spree::CmsSection'
    has_many :menu_items, as: :linked_resource

    before_validation :handle_slug

    validates :title, :store, :locale, presence: true
    validates :slug, uniqueness: { scope: :store_id, allow_nil: true, case_sensitive: true }
    validates :locale, uniqueness: { scope: [:store, :type] }, if: :homepage?

    scope :visible, -> { where(visible: true) }
    scope :by_locale, ->(locale) { where(locale: locale) }
    scope :by_slug, ->(slug) { where(slug: slug) }

    scope :home, -> { where(type: 'Spree::Cms::Pages::Homepage') }
    scope :standard, -> { where(type: 'Spree::Cms::Pages::StandardPage') }
    scope :feature, -> { where(type: 'Spree::Cms::Pages::FeaturePage') }

    self.whitelisted_ransackable_attributes = %w[title type locale store_id]

    def seo_title
      if meta_title.present?
        meta_title
      else
        title
      end
    end

    # Overide this if your page type uses cms_sections
    def sections?
      false
    end

    def homepage?
      type == 'Spree::Cms::Pages::Homepage'
    end

    def draft_mode?
      !visible
    end

    private

    def handle_slug
      self.slug = if homepage?
                    nil
                  elsif slug.blank?
                    title&.downcase&.to_url
                  else
                    slug&.downcase&.to_url
                  end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
spree_core-4.3.3 app/models/spree/cms_page.rb
spree_core-4.3.2 app/models/spree/cms_page.rb
spree_core-4.3.1 app/models/spree/cms_page.rb
spree_core-4.3.0 app/models/spree/cms_page.rb
spree_core-4.3.0.rc3 app/models/spree/cms_page.rb
spree_core-4.3.0.rc2 app/models/spree/cms_page.rb
spree_core-4.3.0.rc1 app/models/spree/cms_page.rb