Sha256: 29a38367a9dc16f3acf5cd27e6b09dfa98cd4ab27534c30bbb2d46cdacaa9584

Contents?: true

Size: 1.88 KB

Versions: 12

Compression:

Stored size: 1.88 KB

Contents

module OpenStax::Accounts
  class GroupNesting < ActiveRecord::Base

    delegate :requestor, :syncing, to: :container_group

    belongs_to :container_group, class_name: 'OpenStax::Accounts::Group',
               primary_key: :openstax_uid, inverse_of: :member_group_nestings
    belongs_to :member_group, class_name: 'OpenStax::Accounts::Group',
               primary_key: :openstax_uid, inverse_of: :container_group_nesting

    validates :container_group, presence: true
    validates :member_group, presence: true, uniqueness: true
    validates :requestor, presence: true, unless: :syncing_or_stubbing?
    validate :no_loops, unless: :syncing_or_stubbing?

    before_create :update_group_caches, unless: :syncing
    before_destroy :update_group_caches, unless: :syncing

    before_create :create_openstax_accounts_group_nesting, unless: :syncing_or_stubbing?
    before_destroy :destroy_openstax_accounts_group_nesting, unless: :syncing_or_stubbing?

    protected

    def syncing_or_stubbing?
      syncing || OpenStax::Accounts.configuration.enable_stubbing?
    end

    def no_loops
      return if member_group.nil? ||\
                !member_group.subtree_group_ids.include?(container_group_id)
      errors.add(:base, 'would create a loop') if errors[:base].blank?
      false
    end

    def update_group_caches
      # Returns false if the update fails (aborting the save transaction)
      UpdateGroupCaches.call(self).errors.none?
    end

    def create_openstax_accounts_group_nesting
      return false if requestor.nil? || requestor.is_anonymous?

      OpenStax::Accounts::Api.create_group_nesting(requestor, self) if requestor.has_authenticated?
    end

    def destroy_openstax_accounts_group_nesting
      return false if requestor.nil? || requestor.is_anonymous?

      OpenStax::Accounts::Api.destroy_group_nesting(requestor, self) \
        if requestor.has_authenticated?
    end

  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
openstax_accounts-7.13.1 app/models/openstax/accounts/group_nesting.rb
openstax_accounts-7.13.0 app/models/openstax/accounts/group_nesting.rb
openstax_accounts-7.12.0 app/models/openstax/accounts/group_nesting.rb
openstax_accounts-7.11.0 app/models/openstax/accounts/group_nesting.rb
openstax_accounts-7.10.0 app/models/openstax/accounts/group_nesting.rb
openstax_accounts-7.9.0 app/models/openstax/accounts/group_nesting.rb
openstax_accounts-7.8.0 app/models/openstax/accounts/group_nesting.rb
openstax_accounts-7.7.0 app/models/openstax/accounts/group_nesting.rb
openstax_accounts-7.6.0 app/models/openstax/accounts/group_nesting.rb
openstax_accounts-7.5.0 app/models/openstax/accounts/group_nesting.rb
openstax_accounts-7.4.0 app/models/openstax/accounts/group_nesting.rb
openstax_accounts-7.3.0 app/models/openstax/accounts/group_nesting.rb