Sha256: a9c319d1d3a6373d888567eaec2b905316a899ab1c9c1958713ee8e51dfda313

Contents?: true

Size: 1.48 KB

Versions: 1

Compression:

Stored size: 1.48 KB

Contents

# encoding: utf-8

module PagesCore
  class SitemapsController < ApplicationController
    include PagesCore::PagePathHelper
    caches_page :show

    def show
      @entries = formatted_entries
    end

    private

    def format_time(timestamp)
      if timestamp.is_a?(Date)
        timestamp.strftime("%Y-%m-%d")
      else
        timestamp.strftime("%Y-%m-%dT%H:%M:%S#{timestamp.formatted_offset}")
      end
    end

    def format_record(record)
      {
        loc: record_url(record),
        lastmod: format_time(record.updated_at)
      }
    end

    def formatted_entries
      records.map { |r| format_record(r) }
    end

    def locales
      if PagesCore.config.locales
        PagesCore.config.locales.keys
      else
        [I18n.default_locale]
      end
    end

    def localized?(record)
      record.is_a?(LocalizableModel::InstanceMethods)
    end

    def pages
      ([Page.root.localize(I18n.default_locale)] +
        locales.flat_map do |locale|
          Page.published.localized(locale)
        end).uniq
    end

    def page_record_url(record)
      if record == Page.root && record.locale == I18n.default_locale
        root_url
      else
        page_url(record.locale, record)
      end
    end

    def record_url(record)
      if record.is_a?(Page)
        page_record_url(record)
      elsif localized?(record)
        polymorphic_url(record, locale: record.locale)
      else
        polymorphic_url(record)
      end
    end

    def records
      pages
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
pages_core-3.5.1 app/controllers/pages_core/sitemaps_controller.rb