Sha256: 356bed0c9528f2c38811ffbbff060a2165e98d6fda961930010157d404f1cb80

Contents?: true

Size: 1.72 KB

Versions: 33

Compression:

Stored size: 1.72 KB

Contents

module Pageflow
  class Membership < ApplicationRecord
    belongs_to :user
    belongs_to :entity, polymorphic: true
    belongs_to :entry,
               -> { where(pageflow_memberships: {entity_type: 'Pageflow::Entry'}) },
               foreign_key: 'entity_id',
               optional: true
    belongs_to :account,
               -> { where(pageflow_memberships: {entity_type: 'Pageflow::Account'}) },
               foreign_key: 'entity_id',
               optional: true

    validates :entity, :role, presence: true
    validates :user_id, uniqueness: {scope: [:entity_type, :entity_id]}
    validate :account_membership_exists, if: :on_entry?
    validates :role,
              inclusion: {in: %w(previewer editor publisher manager)},
              if: :on_entry?
    validates :role,
              inclusion: {in: %w(member previewer editor publisher manager)},
              if: :on_account?

    scope :on_entries, -> { where(entity_type: 'Pageflow::Entry') }
    scope :on_accounts, -> { where(entity_type: 'Pageflow::Account') }
    scope :as_manager, -> { where(role: :manager) }
    scope :as_publisher_or_above, -> { where(role: %w(publisher manager)) }
    scope :as_previewer_or_above, -> { where(role: %w(previewer editor publisher manager)) }

    after_create do
      entity.increment!(:users_count)
    end

    after_destroy do
      entity.decrement!(:users_count)
    end

    private

    def account_membership_exists
      errors[:base] << 'Entry Membership misses presupposed Membership on account of entry' if
        user.present? && !user.accounts.include?(entity.account)
    end

    def on_entry?
      entity_type == 'Pageflow::Entry'
    end

    def on_account?
      entity_type == 'Pageflow::Account'
    end
  end
end

Version data entries

33 entries across 33 versions & 1 rubygems

Version Path
pageflow-16.0.0 app/models/pageflow/membership.rb
pageflow-15.8.0 app/models/pageflow/membership.rb
pageflow-14.5.2 app/models/pageflow/membership.rb
pageflow-15.7.1 app/models/pageflow/membership.rb
pageflow-15.7.0 app/models/pageflow/membership.rb
pageflow-15.6.1 app/models/pageflow/membership.rb
pageflow-15.6.0 app/models/pageflow/membership.rb
pageflow-15.5.0 app/models/pageflow/membership.rb
pageflow-15.4.0 app/models/pageflow/membership.rb
pageflow-15.3.0 app/models/pageflow/membership.rb
pageflow-15.2.2 app/models/pageflow/membership.rb
pageflow-15.2.1 app/models/pageflow/membership.rb
pageflow-15.2.0 app/models/pageflow/membership.rb
pageflow-15.1.2 app/models/pageflow/membership.rb
pageflow-15.1.1 app/models/pageflow/membership.rb
pageflow-15.1.0 app/models/pageflow/membership.rb
pageflow-15.1.0.rc0 app/models/pageflow/membership.rb
pageflow-15.1.0.beta6 app/models/pageflow/membership.rb
pageflow-15.1.0.beta5 app/models/pageflow/membership.rb
pageflow-15.1.0.beta4 app/models/pageflow/membership.rb