Sha256: 28b7762aef90f51275a3a21af6863c1ed34f2e2b91c0e334ba88f947e44d47c8

Contents?: true

Size: 1.39 KB

Versions: 14

Compression:

Stored size: 1.39 KB

Contents

# frozen_string_literal: true

module PagesCore
  module PageModel
    module DatedPage
      extend ActiveSupport::Concern

      included do
        before_validation :set_all_day_dates
        before_validation :ensure_ends_at

        scope :upcoming, -> { where("ends_at > ?", Time.zone.now) }
        scope :past, -> { where("ends_at <= ?", Time.zone.now) }
      end

      module ClassMethods
      end

      # Finds the page's next sibling by date. Returns nil if there
      # isn't one.
      def next_sibling_by_date
        siblings_by_date.where("starts_at >= ?", starts_at)&.first
      end

      # Finds the page's previous sibling by date. Returns nil if
      # there isn't one.
      def previous_sibling_by_date
        siblings_by_date.where("starts_at < ?", starts_at)&.last
      end

      def upcoming?
        return false unless ends_at?

        ends_at > Time.zone.now
      end

      private

      def ensure_ends_at
        return unless starts_at?

        self.ends_at = starts_at if !ends_at? || ends_at < starts_at
      end

      def set_all_day_dates
        return unless all_day?

        self.starts_at = starts_at.beginning_of_day if starts_at?
        self.ends_at = ends_at.end_of_day if ends_at?
      end

      def siblings_by_date
        siblings.reorder("starts_at ASC, pages.id DESC")
                .where
                .not(id: id)
      end
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
pages_core-3.11.3 app/models/concerns/pages_core/page_model/dated_page.rb
pages_core-3.11.2 app/models/concerns/pages_core/page_model/dated_page.rb
pages_core-3.11.1 app/models/concerns/pages_core/page_model/dated_page.rb
pages_core-3.11.0 app/models/concerns/pages_core/page_model/dated_page.rb
pages_core-3.10.2 app/models/concerns/pages_core/page_model/dated_page.rb
pages_core-3.10.1 app/models/concerns/pages_core/page_model/dated_page.rb
pages_core-3.9.2 app/models/concerns/pages_core/page_model/dated_page.rb
pages_core-3.9.1 app/models/concerns/pages_core/page_model/dated_page.rb
pages_core-3.9.0 app/models/concerns/pages_core/page_model/dated_page.rb
pages_core-3.8.3 app/models/concerns/pages_core/page_model/dated_page.rb
pages_core-3.8.2 app/models/concerns/pages_core/page_model/dated_page.rb
pages_core-3.8.1 app/models/concerns/pages_core/page_model/dated_page.rb
pages_core-3.8.0 app/models/concerns/pages_core/page_model/dated_page.rb
pages_core-3.7.0 app/models/concerns/pages_core/page_model/dated_page.rb