lib/canvas_sync/jobs/sync_roles_job.rb



module CanvasSync
  module Jobs
    class SyncRolesJob < CanvasSync::Job
      # Syncs Roles using the Canvas API
      #
      # @param options [Hash]
      def perform(options)
        updated_role_ids = []
        api_client = CanvasSync.get_canvas_sync_client(batch_context)
        CanvasSync.sync_scope(Account).find_each do |acc|
          api_client.list_roles(acc.canvas_id, state: %w[active inactive]).all_pages_each do |role_params|
            role = update_or_create_model(Role, role_params)
            updated_role_ids.push(role.id)
          end
        end
        Role.where.not(id: updated_role_ids).update_all(workflow_state: 'inactive')
      end
    end
  end
end