Sha256: 79d16f5afd2ad5341a228659c48ec33757d4a4161717e3cc874d2d27b089d06d

Contents?: true

Size: 1.65 KB

Versions: 2

Compression:

Stored size: 1.65 KB

Contents

module Elabs
  module Concerns
    module ContentEntity
      extend ActiveSupport::Concern

      included do
        before_save :set_publication_date

        scope :by_member,        ->(user_id) { where(user_id: user_id) }
        scope :published,        -> { where(published: true) }
        scope :unlocked,         -> { where(locked: false) }
        scope :publicly_visible, -> { published.unlocked }
        scope :for_relation,     -> { published.order(published_at: 'desc').limit(Elabs.max_related_items) }
      end

      def locked?
        locked
      end

      def unlocked?
        !locked
      end

      def draft?
        !published
      end

      def published?
        published
      end

      def publicly_visible?
        published? && !locked?
      end

      def not_publicly_visible?
        draft? || locked?
      end

      private

      def made_publicly_visible?
        (changes_include?(:published) || changes_include?(:locked)) && published? && unlocked?
      end

      def made_publicly_invisible?
        (changes_include?(:published) && draft?) || (changes_include?(:locked) && locked? && published?)
      end

      def was_published_before?
        (changes_include?(:published) && draft?)
      end

      def set_publication_date
        self.published_at = Time.new if changed.include?('published') && published?
        self.published_at = nil if changed.include?('published') && !published?
      end

      class_methods do
        def find_publicly_visible(id)
          entity = where(id: id).published.first

          raise ActiveRecord::RecordNotFound if entity.nil?

          entity
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
elabs-2.0.0 app/models/elabs/concerns/content_entity.rb
elabs-2.0.0.pre app/models/elabs/concerns/content_entity.rb