Sha256: 68d840d2a985d11e83807bee743a184f0296b79df324009b7e50368ecfe84114

Contents?: true

Size: 1.75 KB

Versions: 82

Compression:

Stored size: 1.75 KB

Contents

module CanvasSync::Concerns
  module Account
    # Add support for the ancestry Gem to Accounts
    #
    # Requires `ancestry` to be added to the Gemfile and a migration to execute these steps:
    # add_column :accounts, :ancestry, :string
    # add_index :accounts, :ancestry
    #
    # Handles syncing any Ancestry changes after CanvasSync syncs Accounts.
    module Ancestry
      extend ActiveSupport::Concern
      include CanvasSync::Record

      included do
        has_ancestry
        before_save :relink_ancestry, if: :canvas_parent_account_id_changed?
        after_sync_import :ancestry_after_sync
      end

      class_methods do
        def ancestry_after_sync
          trails = {}
          includes(:canvas_parent).find_each do |account|
            parent = account.canvas_parent
            trail = trails[parent.canvas_id] if parent.present?

            if trail.present?
              account.ancestry = trail
              new_trail = "#{trail}/#{account.id.to_s}"
            elsif parent.present?
              account.parent = parent
              new_trail = "#{account.ancestry}/#{account.id.to_s}"
            else
              account.parent = parent
              new_trail = account.id.to_s
            end

            trails[account.canvas_id] = new_trail
            account.save! if account.changed?
          end
        end
      end

      def relink_ancestry
        self.parent = canvas_parent
      end

      def ensure_ancestry
        return unless canvas_parent_account_id.present?
        return if canvas_parent.present?

        self.canvas_parent = Account.find_or_fetch(canvas_parent_account_id)
        canvas_parent.save!
        canvas_parent.ensure_ancestry
        relink_ancestry
        save! if changed?
      end
    end
  end
end

Version data entries

82 entries across 82 versions & 1 rubygems

Version Path
canvas_sync-0.17.43 lib/canvas_sync/concerns/account/ancestry.rb
canvas_sync-0.17.42 lib/canvas_sync/concerns/account/ancestry.rb
canvas_sync-0.17.41 lib/canvas_sync/concerns/account/ancestry.rb
canvas_sync-0.17.40 lib/canvas_sync/concerns/account/ancestry.rb
canvas_sync-0.17.39 lib/canvas_sync/concerns/account/ancestry.rb
canvas_sync-0.17.38 lib/canvas_sync/concerns/account/ancestry.rb
canvas_sync-0.17.37 lib/canvas_sync/concerns/account/ancestry.rb
canvas_sync-0.17.36 lib/canvas_sync/concerns/account/ancestry.rb
canvas_sync-0.17.35 lib/canvas_sync/concerns/account/ancestry.rb
canvas_sync-0.17.34 lib/canvas_sync/concerns/account/ancestry.rb
canvas_sync-0.17.33 lib/canvas_sync/concerns/account/ancestry.rb
canvas_sync-0.17.32 lib/canvas_sync/concerns/account/ancestry.rb
canvas_sync-0.17.31 lib/canvas_sync/concerns/account/ancestry.rb
canvas_sync-0.17.30 lib/canvas_sync/concerns/account/ancestry.rb
canvas_sync-0.17.29 lib/canvas_sync/concerns/account/ancestry.rb
canvas_sync-0.17.28 lib/canvas_sync/concerns/account/ancestry.rb
canvas_sync-0.17.27 lib/canvas_sync/concerns/account/ancestry.rb
canvas_sync-0.17.27.beta1 lib/canvas_sync/concerns/account/ancestry.rb
canvas_sync-0.17.26.beta1 lib/canvas_sync/concerns/account/ancestry.rb
canvas_sync-0.17.24 lib/canvas_sync/concerns/account/ancestry.rb