canvas_sync 0.25.1 → 0.26.0.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/lib/canvas_sync/concerns/canvas_id_as_primary.rb +11 -0
  3. data/lib/canvas_sync/concerns/user_via_pseudonym.rb +1 -1
  4. data/lib/canvas_sync/generators/templates/migrations/create_accounts.rb +1 -1
  5. data/lib/canvas_sync/generators/templates/migrations/create_admins.rb +1 -1
  6. data/lib/canvas_sync/generators/templates/migrations/create_assignment_groups.rb +1 -1
  7. data/lib/canvas_sync/generators/templates/migrations/create_assignment_overrides.rb +1 -1
  8. data/lib/canvas_sync/generators/templates/migrations/create_assignments.rb +1 -1
  9. data/lib/canvas_sync/generators/templates/migrations/create_content_migrations.rb +1 -1
  10. data/lib/canvas_sync/generators/templates/migrations/create_context_module_items.rb +1 -1
  11. data/lib/canvas_sync/generators/templates/migrations/create_context_modules.rb +1 -1
  12. data/lib/canvas_sync/generators/templates/migrations/create_course_nicknames.rb +1 -1
  13. data/lib/canvas_sync/generators/templates/migrations/create_course_progresses.rb +1 -1
  14. data/lib/canvas_sync/generators/templates/migrations/create_courses.rb +1 -1
  15. data/lib/canvas_sync/generators/templates/migrations/create_enrollments.rb +1 -1
  16. data/lib/canvas_sync/generators/templates/migrations/create_grading_period_groups.rb +1 -1
  17. data/lib/canvas_sync/generators/templates/migrations/create_grading_periods.rb +1 -1
  18. data/lib/canvas_sync/generators/templates/migrations/create_group_memberships.rb +1 -1
  19. data/lib/canvas_sync/generators/templates/migrations/create_groups.rb +1 -1
  20. data/lib/canvas_sync/generators/templates/migrations/create_learning_outcome_results.rb +1 -1
  21. data/lib/canvas_sync/generators/templates/migrations/create_learning_outcomes.rb +1 -1
  22. data/lib/canvas_sync/generators/templates/migrations/create_pseudonyms.rb +1 -1
  23. data/lib/canvas_sync/generators/templates/migrations/create_roles.rb +1 -1
  24. data/lib/canvas_sync/generators/templates/migrations/create_rubric_assessments.rb +1 -1
  25. data/lib/canvas_sync/generators/templates/migrations/create_rubric_associations.rb +1 -1
  26. data/lib/canvas_sync/generators/templates/migrations/create_rubrics.rb +1 -1
  27. data/lib/canvas_sync/generators/templates/migrations/create_scores.rb +1 -1
  28. data/lib/canvas_sync/generators/templates/migrations/create_sections.rb +1 -1
  29. data/lib/canvas_sync/generators/templates/migrations/create_submissions.rb +1 -1
  30. data/lib/canvas_sync/generators/templates/migrations/create_terms.rb +1 -1
  31. data/lib/canvas_sync/generators/templates/migrations/create_user_observers.rb +1 -1
  32. data/lib/canvas_sync/generators/templates/migrations/create_users.rb +1 -1
  33. data/lib/canvas_sync/generators/templates/models/course_nickname.rb +1 -0
  34. data/lib/canvas_sync/generators/templates/models/course_progress.rb +1 -0
  35. data/lib/canvas_sync/generators/templates/models/user_observer.rb +2 -0
  36. data/lib/canvas_sync/importers/bulk_importer.rb +1 -1
  37. data/lib/canvas_sync/jobs/sync_admins_job.rb +2 -2
  38. data/lib/canvas_sync/jobs/sync_roles_job.rb +2 -2
  39. data/lib/canvas_sync/misc_helper.rb +1 -1
  40. data/lib/canvas_sync/version.rb +1 -1
  41. data/spec/canvas_sync/processors/context_modules_processor_spec.rb +2 -2
  42. data/spec/internal/app/models/course_nickname.rb +1 -0
  43. data/spec/internal/app/models/course_progress.rb +1 -0
  44. data/spec/internal/app/models/pseudonym.rb +2 -0
  45. data/spec/internal/app/models/user.rb +2 -0
  46. data/spec/internal/app/models/user_observer.rb +2 -0
  47. data/spec/internal/db/migrate/{20250912205136_create_users.rb → 20251029222307_create_users.rb} +1 -1
  48. data/spec/internal/db/migrate/{20250912205137_create_pseudonyms.rb → 20251029222308_create_pseudonyms.rb} +1 -1
  49. data/spec/internal/db/migrate/{20250912205138_create_courses.rb → 20251029222309_create_courses.rb} +1 -1
  50. data/spec/internal/db/migrate/{20250912205139_create_groups.rb → 20251029222310_create_groups.rb} +1 -1
  51. data/spec/internal/db/migrate/{20250912205140_create_group_memberships.rb → 20251029222311_create_group_memberships.rb} +1 -1
  52. data/spec/internal/db/migrate/{20250912205141_create_accounts.rb → 20251029222312_create_accounts.rb} +1 -1
  53. data/spec/internal/db/migrate/{20250912205142_create_terms.rb → 20251029222313_create_terms.rb} +1 -1
  54. data/spec/internal/db/migrate/{20250912205143_create_enrollments.rb → 20251029222314_create_enrollments.rb} +1 -1
  55. data/spec/internal/db/migrate/{20250912205144_create_sections.rb → 20251029222315_create_sections.rb} +1 -1
  56. data/spec/internal/db/migrate/{20250912205145_create_assignments.rb → 20251029222316_create_assignments.rb} +1 -1
  57. data/spec/internal/db/migrate/{20250912205146_create_submissions.rb → 20251029222317_create_submissions.rb} +1 -1
  58. data/spec/internal/db/migrate/{20250912205147_create_roles.rb → 20251029222318_create_roles.rb} +1 -1
  59. data/spec/internal/db/migrate/{20250912205148_create_admins.rb → 20251029222319_create_admins.rb} +1 -1
  60. data/spec/internal/db/migrate/{20250912205149_create_assignment_groups.rb → 20251029222320_create_assignment_groups.rb} +1 -1
  61. data/spec/internal/db/migrate/{20250912205150_create_context_modules.rb → 20251029222321_create_context_modules.rb} +1 -1
  62. data/spec/internal/db/migrate/{20250912205151_create_context_module_items.rb → 20251029222322_create_context_module_items.rb} +1 -1
  63. data/spec/internal/db/migrate/{20250912205153_create_grading_periods.rb → 20251029222324_create_grading_periods.rb} +1 -1
  64. data/spec/internal/db/migrate/{20250912205154_create_grading_period_groups.rb → 20251029222325_create_grading_period_groups.rb} +1 -1
  65. data/spec/internal/db/migrate/{20250912205155_create_content_migrations.rb → 20251029222326_create_content_migrations.rb} +1 -1
  66. data/spec/internal/db/migrate/{20250912205156_create_learning_outcomes.rb → 20251029222327_create_learning_outcomes.rb} +1 -1
  67. data/spec/internal/db/migrate/{20250912205157_create_learning_outcome_results.rb → 20251029222328_create_learning_outcome_results.rb} +1 -1
  68. data/spec/internal/db/migrate/{20250912205159_create_rubrics.rb → 20251029222330_create_rubrics.rb} +1 -1
  69. data/spec/internal/db/migrate/{20250912205160_create_rubric_associations.rb → 20251029222331_create_rubric_associations.rb} +1 -1
  70. data/spec/internal/db/migrate/{20250912205161_create_rubric_assessments.rb → 20251029222332_create_rubric_assessments.rb} +1 -1
  71. data/spec/internal/db/migrate/{20250912205163_create_assignment_overrides.rb → 20251029222334_create_assignment_overrides.rb} +1 -1
  72. data/spec/internal/db/migrate/{20250912205164_create_scores.rb → 20251029222335_create_scores.rb} +1 -1
  73. data/spec/internal/db/migrate/{20250912205152_create_user_observers.rb → 20251029223411_create_user_observers.rb} +1 -1
  74. data/spec/internal/db/migrate/{20250912205158_create_course_nicknames.rb → 20251029224009_create_course_nicknames.rb} +1 -1
  75. data/spec/internal/db/migrate/{20250912205162_create_course_progresses.rb → 20251029224010_create_course_progresses.rb} +1 -1
  76. metadata +60 -59
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 796a4b260f5d15302e824852208d22bfceedcb1a7695f8246a4263af91df368f
4
- data.tar.gz: 1cce9fdc47ad3b93df2523943dd9a7366ae6123d62338f05cf21df02444a14f6
3
+ metadata.gz: ce4d1927f18104be2a36720a8932671c3a0188a1e3a235f6929a23299a8d89c4
4
+ data.tar.gz: e8e7a15fde1156d9485026c3039e5bcbe2c4dec3c3491b61eb2f06cc1d0ea718
5
5
  SHA512:
6
- metadata.gz: 179dcc7dc1f1456f7614788e5af8bd79adaaa7b9623af11293da320125024f8783b8453fd136d6d9385043e4a6e84067e26902e94b09c4356f79023253c889e2
7
- data.tar.gz: 38b5630b0a9da79c707bb73a736bf90ae195dff08655aa2c62c76336b5f6eea2a86ac9dc5994e8d302ec2664e9006c6993ad6d92ce5cdeb25aa71fefb8caea6d
6
+ metadata.gz: 2b4b60b41f8b249baaef413d1f44ba17d124ba6cff5960bb0d8b7db43c28f7a5213a04b91f19650c31efb5889f1674ccb84937d33a21270f39a28cbfe0efcee1
7
+ data.tar.gz: 0a5932d0dcf129bedd5ebad761d2df9d77793ecb9ea3dcdc905b39a676f2e7da5f68e1c0bbd89b7e564ebabc92d5ee59d3722f2c73c8f7306479e3dfa5c65ee2
@@ -0,0 +1,11 @@
1
+ module CanvasSync::Concerns
2
+ module CanvasIdAsPrimary
3
+ extend ActiveSupport::Concern
4
+
5
+ CanvasSync::Record.define_feature self, default: true
6
+
7
+ included do
8
+ self.primary_key = :canvas_id unless column_names.include?('id')
9
+ end
10
+ end
11
+ end
@@ -110,7 +110,7 @@ module CanvasSync::Concerns
110
110
  user_id_map = Pseudonym.where(canvas_id: cacheable_pseudonym_ids).pluck(:canvas_id, :canvas_user_id).to_h
111
111
 
112
112
  transaction do
113
- where(id: batch.map(&:id)).delete_all
113
+ where(primary_key => batch.map(&:id)).delete_all
114
114
 
115
115
  cached_configs.each do |config|
116
116
  batch.each do |record|
@@ -2,7 +2,7 @@
2
2
 
3
3
  class CreateAccounts < ActiveRecord::Migration[5.1]
4
4
  def change
5
- create_table :accounts do |t|
5
+ create_table :accounts, id: false do |t|
6
6
  t.bigint :canvas_id, null: false
7
7
  t.string :sis_id
8
8
  t.bigint :canvas_parent_account_id
@@ -2,7 +2,7 @@
2
2
 
3
3
  class CreateAdmins < ActiveRecord::Migration[5.1]
4
4
  def change
5
- create_table :admins do |t|
5
+ create_table :admins, id: false do |t|
6
6
  t.bigint :canvas_id, null: false
7
7
  t.string :role_name
8
8
  t.bigint :canvas_account_id
@@ -2,7 +2,7 @@
2
2
 
3
3
  class CreateAssignmentGroups < ActiveRecord::Migration[5.1]
4
4
  def change
5
- create_table :assignment_groups do |t|
5
+ create_table :assignment_groups, id: false do |t|
6
6
  t.bigint :canvas_id, null: false
7
7
  t.bigint :canvas_course_id
8
8
  t.string :name
@@ -1,6 +1,6 @@
1
1
  class CreateAssignmentOverrides < ActiveRecord::Migration[5.1]
2
2
  def change
3
- create_table :assignment_overrides do |t|
3
+ create_table :assignment_overrides, id: false do |t|
4
4
  t.bigint :canvas_id, null: false
5
5
  t.bigint :canvas_assignment_id
6
6
  t.bigint :canvas_group_id
@@ -2,7 +2,7 @@
2
2
 
3
3
  class CreateAssignments < ActiveRecord::Migration[5.1]
4
4
  def change
5
- create_table :assignments do |t|
5
+ create_table :assignments, id: false do |t|
6
6
  t.bigint :canvas_id, null: false
7
7
  t.string :title
8
8
  t.text :description
@@ -2,7 +2,7 @@
2
2
 
3
3
  class CreateContentMigrations < ActiveRecord::Migration[5.1]
4
4
  def change
5
- create_table :content_migrations do |t|
5
+ create_table :content_migrations, id: false do |t|
6
6
  t.bigint :canvas_id
7
7
  t.bigint :canvas_context_id
8
8
  t.string :canvas_context_type
@@ -2,7 +2,7 @@
2
2
 
3
3
  class CreateContextModuleItems < ActiveRecord::Migration[5.1]
4
4
  def change
5
- create_table :context_module_items do |t|
5
+ create_table :context_module_items, id: false do |t|
6
6
  t.bigint :canvas_id
7
7
  t.bigint :canvas_context_module_id
8
8
  t.integer :position
@@ -2,7 +2,7 @@
2
2
 
3
3
  class CreateContextModules < ActiveRecord::Migration[5.1]
4
4
  def change
5
- create_table :context_modules do |t|
5
+ create_table :context_modules, id: false do |t|
6
6
  t.bigint :canvas_id
7
7
  t.bigint :canvas_context_id
8
8
  t.string :canvas_context_type
@@ -2,7 +2,7 @@
2
2
 
3
3
  class CreateCourseNicknames < ActiveRecord::Migration[5.1]
4
4
  def change
5
- create_table :course_nicknames do |t|
5
+ create_table :course_nicknames, id: false do |t|
6
6
  t.bigint :canvas_user_preference_value_id, null: true
7
7
  t.integer :canvas_user_id
8
8
  t.integer :canvas_course_id
@@ -2,7 +2,7 @@
2
2
 
3
3
  class CreateCourseProgresses < ActiveRecord::Migration[5.1]
4
4
  def change
5
- create_table :course_progresses do |t|
5
+ create_table :course_progresses, id: false do |t|
6
6
  t.bigint :canvas_course_id, null: false
7
7
  t.bigint :canvas_user_id, null: false
8
8
  t.integer :requirement_count
@@ -2,7 +2,7 @@
2
2
 
3
3
  class CreateCourses < ActiveRecord::Migration[5.1]
4
4
  def change
5
- create_table :courses do |t|
5
+ create_table :courses, id: false do |t|
6
6
  t.bigint :canvas_id, null: false
7
7
  t.string :sis_id
8
8
  t.string :course_code
@@ -2,7 +2,7 @@
2
2
 
3
3
  class CreateEnrollments < ActiveRecord::Migration[5.1]
4
4
  def change
5
- create_table :enrollments do |t|
5
+ create_table :enrollments, id: false do |t|
6
6
  t.bigint :canvas_id, null: false
7
7
  t.bigint :canvas_course_id
8
8
  t.string :course_sis_id
@@ -2,7 +2,7 @@
2
2
 
3
3
  class CreateGradingPeriodGroups < ActiveRecord::Migration[5.1]
4
4
  def change
5
- create_table :grading_period_groups do |t|
5
+ create_table :grading_period_groups, id: false do |t|
6
6
  t.bigint :canvas_id, null: false
7
7
  t.string :title
8
8
  t.boolean :weighted
@@ -2,7 +2,7 @@
2
2
 
3
3
  class CreateGradingPeriods < ActiveRecord::Migration[5.1]
4
4
  def change
5
- create_table :grading_periods do |t|
5
+ create_table :grading_periods, id: false do |t|
6
6
  t.bigint :canvas_id, null: false
7
7
  t.string :title
8
8
  t.float :weight
@@ -2,7 +2,7 @@
2
2
 
3
3
  class CreateGroupMemberships < ActiveRecord::Migration[5.1]
4
4
  def change
5
- create_table :group_memberships do |t|
5
+ create_table :group_memberships, id: false do |t|
6
6
  t.bigint :canvas_id, null: false
7
7
  t.bigint :canvas_user_id, null: false
8
8
  t.bigint :canvas_group_id, null: false
@@ -2,7 +2,7 @@
2
2
 
3
3
  class CreateGroups < ActiveRecord::Migration[5.1]
4
4
  def change
5
- create_table :groups do |t|
5
+ create_table :groups, id: false do |t|
6
6
  t.bigint :canvas_id, null: false
7
7
  t.string :sis_id
8
8
  t.bigint :canvas_group_category_id
@@ -2,7 +2,7 @@
2
2
 
3
3
  class CreateLearningOutcomeResults < ActiveRecord::Migration[5.1]
4
4
  def change
5
- create_table :learning_outcome_results do |t|
5
+ create_table :learning_outcome_results, id: false do |t|
6
6
  t.bigint :canvas_id, null: false
7
7
  t.bigint :canvas_context_id
8
8
  t.string :canvas_context_type
@@ -2,7 +2,7 @@
2
2
 
3
3
  class CreateLearningOutcomes < ActiveRecord::Migration[5.1]
4
4
  def change
5
- create_table :learning_outcomes do |t|
5
+ create_table :learning_outcomes, id: false do |t|
6
6
  t.bigint :canvas_id, null: false
7
7
  t.integer :canvas_context_id
8
8
  t.string :canvas_context_type
@@ -2,7 +2,7 @@
2
2
 
3
3
  class CreatePseudonyms < ActiveRecord::Migration[5.1]
4
4
  def change
5
- create_table :pseudonyms do |t|
5
+ create_table :pseudonyms, id: false do |t|
6
6
  t.bigint :canvas_id, null: false
7
7
  t.bigint :canvas_user_id
8
8
  t.string :sis_id
@@ -2,7 +2,7 @@
2
2
 
3
3
  class CreateRoles < ActiveRecord::Migration[5.1]
4
4
  def change
5
- create_table :roles do |t|
5
+ create_table :roles, id: false do |t|
6
6
  t.bigint :canvas_id, null: false
7
7
  t.string :label
8
8
  t.string :base_role_type
@@ -2,7 +2,7 @@
2
2
 
3
3
  class CreateRubricAssessments < ActiveRecord::Migration[5.1]
4
4
  def change
5
- create_table :rubric_assessments do |t|
5
+ create_table :rubric_assessments, id: false do |t|
6
6
  t.bigint :canvas_id
7
7
  t.bigint :canvas_user_id
8
8
  t.bigint :canvas_rubric_id
@@ -2,7 +2,7 @@
2
2
 
3
3
  class CreateRubricAssociations < ActiveRecord::Migration[5.1]
4
4
  def change
5
- create_table :rubric_associations do |t|
5
+ create_table :rubric_associations, id: false do |t|
6
6
  t.bigint :canvas_id, null: false
7
7
  t.bigint :canvas_rubric_id
8
8
  t.bigint :canvas_association_id
@@ -2,7 +2,7 @@
2
2
 
3
3
  class CreateRubrics < ActiveRecord::Migration[5.1]
4
4
  def change
5
- create_table :rubrics do |t|
5
+ create_table :rubrics, id: false do |t|
6
6
  t.bigint :canvas_id, null: false
7
7
  t.bigint :canvas_user_id
8
8
  t.bigint :canvas_rubric_id
@@ -2,7 +2,7 @@
2
2
 
3
3
  class CreateScores < ActiveRecord::Migration[5.1]
4
4
  def change
5
- create_table :scores do |t|
5
+ create_table :scores, id: false do |t|
6
6
  t.bigint :canvas_id, null: false
7
7
  t.bigint :canvas_enrollment_id, null: false
8
8
  t.bigint :canvas_assignment_group_id
@@ -2,7 +2,7 @@
2
2
 
3
3
  class CreateSections < ActiveRecord::Migration[5.1]
4
4
  def change
5
- create_table :sections do |t|
5
+ create_table :sections, id: false do |t|
6
6
  t.bigint :canvas_id, null: false
7
7
  t.string :sis_id
8
8
  t.bigint :canvas_course_id
@@ -2,7 +2,7 @@
2
2
 
3
3
  class CreateSubmissions < ActiveRecord::Migration[5.1]
4
4
  def change
5
- create_table :submissions do |t|
5
+ create_table :submissions, id: false do |t|
6
6
  t.bigint :canvas_id, null: false
7
7
  t.bigint :canvas_course_id
8
8
  t.bigint :canvas_assignment_id
@@ -2,7 +2,7 @@
2
2
 
3
3
  class CreateTerms < ActiveRecord::Migration[5.1]
4
4
  def change
5
- create_table :terms do |t|
5
+ create_table :terms, id: false do |t|
6
6
  t.integer :canvas_id, null: false
7
7
  t.string :name
8
8
  t.datetime :start_at
@@ -2,7 +2,7 @@
2
2
 
3
3
  class CreateUserObservers < ActiveRecord::Migration[5.1]
4
4
  def change
5
- create_table :user_observers do |t|
5
+ create_table :user_observers, id: false do |t|
6
6
  t.bigint :observing_user_id
7
7
  t.bigint :observed_user_id
8
8
  t.string :workflow_state
@@ -2,7 +2,7 @@
2
2
 
3
3
  class CreateUsers < ActiveRecord::Migration[5.1]
4
4
  def change
5
- create_table :users do |t|
5
+ create_table :users, id: false do |t|
6
6
  t.bigint :canvas_id, null: false
7
7
  t.string :email
8
8
  t.string :first_name
@@ -7,6 +7,7 @@ class CourseNickname < ApplicationRecord
7
7
  include CanvasSync::Concerns::ApiSyncable
8
8
 
9
9
  canvas_sync_features :defaults
10
+ self.primary_key = [:canvas_user_id, :canvas_course_id] unless column_names.include?("id")
10
11
 
11
12
  belongs_to :user, primary_key: :canvas_id, foreign_key: :canvas_user_id, optional: true
12
13
  belongs_to :course, primary_key: :canvas_id, foreign_key: :canvas_course_id, optional: true
@@ -6,6 +6,7 @@ class CourseProgress < ApplicationRecord
6
6
  include CanvasSync::Concerns::ApiSyncable
7
7
 
8
8
  canvas_sync_features :defaults
9
+ self.primary_key = [:canvas_user_id, :canvas_course_id] unless column_names.include?("id")
9
10
 
10
11
  belongs_to :user, primary_key: :canvas_id, foreign_key: :canvas_user_id, optional: true
11
12
  belongs_to :course, primary_key: :canvas_id, foreign_key: :canvas_course_id, optional: true
@@ -7,6 +7,8 @@ class UserObserver < ApplicationRecord
7
7
 
8
8
  canvas_sync_features :defaults
9
9
 
10
+ self.primary_key = [:observing_user_id, :observed_user_id] unless column_names.include?("id")
11
+
10
12
  validates :canvas_id, uniqueness: true, presence: true
11
13
 
12
14
  belongs_to :observing_user, primary_key: :canvas_id, foreign_key: :observing_user_id, class_name: 'User', optional: true
@@ -150,7 +150,7 @@ module CanvasSync
150
150
  }
151
151
  global_updates.slice!(*klass.column_names.map(&:to_sym))
152
152
  if global_updates.present? && result.ids.present?
153
- klass.where(id: result.ids).update_all(global_updates)
153
+ klass.where(klass.primary_key => result.ids).update_all(global_updates)
154
154
  end
155
155
  end
156
156
 
@@ -12,10 +12,10 @@ module CanvasSync
12
12
  api_client.account_admins(acc.canvas_id).all_pages_each do |admin_params|
13
13
  admin_params[:account_id] = acc.canvas_id
14
14
  admin = update_or_create_model(Admin, admin_params)
15
- updated_admin_ids.push(admin.id)
15
+ updated_admin_ids.push(admin.canvas_id)
16
16
  end
17
17
  end
18
- Admin.where.not(id: updated_admin_ids).update_all(workflow_state: 'inactive')
18
+ Admin.where.not(canvas_id: updated_admin_ids).update_all(workflow_state: 'inactive')
19
19
  end
20
20
  end
21
21
  end
@@ -14,10 +14,10 @@ module CanvasSync
14
14
  end
15
15
  api_client.list_roles(acc.canvas_id, api_params).all_pages_each do |role_params|
16
16
  role = update_or_create_model(Role, role_params)
17
- updated_role_ids.push(role.id)
17
+ updated_role_ids.push(role.canvas_id)
18
18
  end
19
19
  end
20
- Role.where.not(id: updated_role_ids).update_all(workflow_state: 'inactive')
20
+ Role.where.not(canvas_id: updated_role_ids).update_all(workflow_state: 'inactive')
21
21
  end
22
22
  end
23
23
  end
@@ -34,7 +34,7 @@ module CanvasSync
34
34
  # TODO Support globalid
35
35
  model_class = load_constant(job[:model])
36
36
  find_by = job[:find_by]
37
- target = find_by.is_a?(Hash) ? model_class.find_by(**find_by) : model_class.find_by(id: find_by)
37
+ target = find_by.is_a?(Hash) ? model_class.find_by(**find_by) : model_class.find_by(model_class.primary_key => find_by)
38
38
  target.send(job[:method], *job_args, **job_kwargs)
39
39
  elsif job[:class]
40
40
  target = load_constant(job[:class])
@@ -1,3 +1,3 @@
1
1
  module CanvasSync
2
- VERSION = "0.25.1".freeze
2
+ VERSION = "0.26.0.beta1".freeze
3
3
  end
@@ -8,7 +8,7 @@ RSpec.describe CanvasSync::Processors::ContextModulesProcessor do
8
8
  expect {
9
9
  subject.process("spec/support/fixtures/reports/context_modules.csv", {}, 1)
10
10
  }.to change { ContextModule.count }.by(2)
11
- expect(ContextModule.first).to have_attributes(
11
+ expect(ContextModule.last).to have_attributes(
12
12
  canvas_id: 23,
13
13
  canvas_context_id: 785,
14
14
  canvas_context_type: 'Course',
@@ -19,7 +19,7 @@ RSpec.describe CanvasSync::Processors::ContextModulesProcessor do
19
19
  prerequisites: []
20
20
  )
21
21
  # Check for properly serialized YAML
22
- expect(ContextModule.last.completion_requirements).to eq([
22
+ expect(ContextModule.first.completion_requirements).to eq([
23
23
  { id: 1, type: 'must_view' }
24
24
  ])
25
25
  end
@@ -13,6 +13,7 @@ class CourseNickname < ApplicationRecord
13
13
  include CanvasSync::Concerns::ApiSyncable
14
14
 
15
15
  canvas_sync_features :defaults
16
+ self.primary_key = [:canvas_user_id, :canvas_course_id] unless column_names.include?("id")
16
17
 
17
18
  belongs_to :user, primary_key: :canvas_id, foreign_key: :canvas_user_id, optional: true
18
19
  belongs_to :course, primary_key: :canvas_id, foreign_key: :canvas_course_id, optional: true
@@ -12,6 +12,7 @@ class CourseProgress < ApplicationRecord
12
12
  include CanvasSync::Concerns::ApiSyncable
13
13
 
14
14
  canvas_sync_features :defaults
15
+ self.primary_key = [:canvas_user_id, :canvas_course_id] unless column_names.include?("id")
15
16
 
16
17
  belongs_to :user, primary_key: :canvas_id, foreign_key: :canvas_user_id, optional: true
17
18
  belongs_to :course, primary_key: :canvas_id, foreign_key: :canvas_course_id, optional: true
@@ -14,4 +14,6 @@ class Pseudonym < ApplicationRecord
14
14
 
15
15
  validates :canvas_id, uniqueness: true, presence: true
16
16
  belongs_to :user, primary_key: :canvas_id, foreign_key: :canvas_user_id
17
+
18
+ scope :active, -> { where(workflow_state: "active") }
17
19
  end
@@ -23,6 +23,8 @@ class User < ApplicationRecord
23
23
 
24
24
  validates :canvas_id, uniqueness: true, presence: true
25
25
  has_many :pseudonyms, primary_key: :canvas_id, foreign_key: :canvas_user_id
26
+ has_many :active_pseudonyms, ->() { active }, primary_key: :canvas_id, foreign_key: :canvas_user_id, class_name: "Pseudonym"
27
+ has_many :all_pseudonyms, primary_key: :canvas_id, foreign_key: :canvas_user_id, class_name: "Pseudonym"
26
28
  has_many :enrollments, primary_key: :canvas_id, foreign_key: :canvas_user_id
27
29
  has_many :admins, primary_key: :canvas_id, foreign_key: :canvas_user_id
28
30
  has_many :admin_roles, through: :admins, source: :role
@@ -13,6 +13,8 @@ class UserObserver < ApplicationRecord
13
13
 
14
14
  canvas_sync_features :defaults
15
15
 
16
+ self.primary_key = [:observing_user_id, :observed_user_id] unless column_names.include?("id")
17
+
16
18
  validates :canvas_id, uniqueness: true, presence: true
17
19
 
18
20
  belongs_to :observing_user, primary_key: :canvas_id, foreign_key: :observing_user_id, class_name: 'User', optional: true
@@ -8,7 +8,7 @@
8
8
 
9
9
  class CreateUsers < ActiveRecord::Migration[5.1]
10
10
  def change
11
- create_table :users do |t|
11
+ create_table :users, id: false do |t|
12
12
  t.bigint :canvas_id, null: false
13
13
  t.string :email
14
14
  t.string :first_name
@@ -8,7 +8,7 @@
8
8
 
9
9
  class CreatePseudonyms < ActiveRecord::Migration[5.1]
10
10
  def change
11
- create_table :pseudonyms do |t|
11
+ create_table :pseudonyms, id: false do |t|
12
12
  t.bigint :canvas_id, null: false
13
13
  t.bigint :canvas_user_id
14
14
  t.string :sis_id
@@ -8,7 +8,7 @@
8
8
 
9
9
  class CreateCourses < ActiveRecord::Migration[5.1]
10
10
  def change
11
- create_table :courses do |t|
11
+ create_table :courses, id: false do |t|
12
12
  t.bigint :canvas_id, null: false
13
13
  t.string :sis_id
14
14
  t.string :course_code
@@ -8,7 +8,7 @@
8
8
 
9
9
  class CreateGroups < ActiveRecord::Migration[5.1]
10
10
  def change
11
- create_table :groups do |t|
11
+ create_table :groups, id: false do |t|
12
12
  t.bigint :canvas_id, null: false
13
13
  t.string :sis_id
14
14
  t.bigint :canvas_group_category_id
@@ -8,7 +8,7 @@
8
8
 
9
9
  class CreateGroupMemberships < ActiveRecord::Migration[5.1]
10
10
  def change
11
- create_table :group_memberships do |t|
11
+ create_table :group_memberships, id: false do |t|
12
12
  t.bigint :canvas_id, null: false
13
13
  t.bigint :canvas_user_id, null: false
14
14
  t.bigint :canvas_group_id, null: false
@@ -8,7 +8,7 @@
8
8
 
9
9
  class CreateAccounts < ActiveRecord::Migration[5.1]
10
10
  def change
11
- create_table :accounts do |t|
11
+ create_table :accounts, id: false do |t|
12
12
  t.bigint :canvas_id, null: false
13
13
  t.string :sis_id
14
14
  t.bigint :canvas_parent_account_id
@@ -8,7 +8,7 @@
8
8
 
9
9
  class CreateTerms < ActiveRecord::Migration[5.1]
10
10
  def change
11
- create_table :terms do |t|
11
+ create_table :terms, id: false do |t|
12
12
  t.integer :canvas_id, null: false
13
13
  t.string :name
14
14
  t.datetime :start_at
@@ -8,7 +8,7 @@
8
8
 
9
9
  class CreateEnrollments < ActiveRecord::Migration[5.1]
10
10
  def change
11
- create_table :enrollments do |t|
11
+ create_table :enrollments, id: false do |t|
12
12
  t.bigint :canvas_id, null: false
13
13
  t.bigint :canvas_course_id
14
14
  t.string :course_sis_id
@@ -8,7 +8,7 @@
8
8
 
9
9
  class CreateSections < ActiveRecord::Migration[5.1]
10
10
  def change
11
- create_table :sections do |t|
11
+ create_table :sections, id: false do |t|
12
12
  t.bigint :canvas_id, null: false
13
13
  t.string :sis_id
14
14
  t.bigint :canvas_course_id
@@ -8,7 +8,7 @@
8
8
 
9
9
  class CreateAssignments < ActiveRecord::Migration[5.1]
10
10
  def change
11
- create_table :assignments do |t|
11
+ create_table :assignments, id: false do |t|
12
12
  t.bigint :canvas_id, null: false
13
13
  t.string :title
14
14
  t.text :description
@@ -8,7 +8,7 @@
8
8
 
9
9
  class CreateSubmissions < ActiveRecord::Migration[5.1]
10
10
  def change
11
- create_table :submissions do |t|
11
+ create_table :submissions, id: false do |t|
12
12
  t.bigint :canvas_id, null: false
13
13
  t.bigint :canvas_course_id
14
14
  t.bigint :canvas_assignment_id
@@ -8,7 +8,7 @@
8
8
 
9
9
  class CreateRoles < ActiveRecord::Migration[5.1]
10
10
  def change
11
- create_table :roles do |t|
11
+ create_table :roles, id: false do |t|
12
12
  t.bigint :canvas_id, null: false
13
13
  t.string :label
14
14
  t.string :base_role_type
@@ -8,7 +8,7 @@
8
8
 
9
9
  class CreateAdmins < ActiveRecord::Migration[5.1]
10
10
  def change
11
- create_table :admins do |t|
11
+ create_table :admins, id: false do |t|
12
12
  t.bigint :canvas_id, null: false
13
13
  t.string :role_name
14
14
  t.bigint :canvas_account_id
@@ -8,7 +8,7 @@
8
8
 
9
9
  class CreateAssignmentGroups < ActiveRecord::Migration[5.1]
10
10
  def change
11
- create_table :assignment_groups do |t|
11
+ create_table :assignment_groups, id: false do |t|
12
12
  t.bigint :canvas_id, null: false
13
13
  t.bigint :canvas_course_id
14
14
  t.string :name
@@ -8,7 +8,7 @@
8
8
 
9
9
  class CreateContextModules < ActiveRecord::Migration[5.1]
10
10
  def change
11
- create_table :context_modules do |t|
11
+ create_table :context_modules, id: false do |t|
12
12
  t.bigint :canvas_id
13
13
  t.bigint :canvas_context_id
14
14
  t.string :canvas_context_type
@@ -8,7 +8,7 @@
8
8
 
9
9
  class CreateContextModuleItems < ActiveRecord::Migration[5.1]
10
10
  def change
11
- create_table :context_module_items do |t|
11
+ create_table :context_module_items, id: false do |t|
12
12
  t.bigint :canvas_id
13
13
  t.bigint :canvas_context_module_id
14
14
  t.integer :position
@@ -8,7 +8,7 @@
8
8
 
9
9
  class CreateGradingPeriods < ActiveRecord::Migration[5.1]
10
10
  def change
11
- create_table :grading_periods do |t|
11
+ create_table :grading_periods, id: false do |t|
12
12
  t.bigint :canvas_id, null: false
13
13
  t.string :title
14
14
  t.float :weight
@@ -8,7 +8,7 @@
8
8
 
9
9
  class CreateGradingPeriodGroups < ActiveRecord::Migration[5.1]
10
10
  def change
11
- create_table :grading_period_groups do |t|
11
+ create_table :grading_period_groups, id: false do |t|
12
12
  t.bigint :canvas_id, null: false
13
13
  t.string :title
14
14
  t.boolean :weighted
@@ -8,7 +8,7 @@
8
8
 
9
9
  class CreateContentMigrations < ActiveRecord::Migration[5.1]
10
10
  def change
11
- create_table :content_migrations do |t|
11
+ create_table :content_migrations, id: false do |t|
12
12
  t.bigint :canvas_id
13
13
  t.bigint :canvas_context_id
14
14
  t.string :canvas_context_type
@@ -8,7 +8,7 @@
8
8
 
9
9
  class CreateLearningOutcomes < ActiveRecord::Migration[5.1]
10
10
  def change
11
- create_table :learning_outcomes do |t|
11
+ create_table :learning_outcomes, id: false do |t|
12
12
  t.bigint :canvas_id, null: false
13
13
  t.integer :canvas_context_id
14
14
  t.string :canvas_context_type
@@ -8,7 +8,7 @@
8
8
 
9
9
  class CreateLearningOutcomeResults < ActiveRecord::Migration[5.1]
10
10
  def change
11
- create_table :learning_outcome_results do |t|
11
+ create_table :learning_outcome_results, id: false do |t|
12
12
  t.bigint :canvas_id, null: false
13
13
  t.bigint :canvas_context_id
14
14
  t.string :canvas_context_type
@@ -8,7 +8,7 @@
8
8
 
9
9
  class CreateRubrics < ActiveRecord::Migration[5.1]
10
10
  def change
11
- create_table :rubrics do |t|
11
+ create_table :rubrics, id: false do |t|
12
12
  t.bigint :canvas_id, null: false
13
13
  t.bigint :canvas_user_id
14
14
  t.bigint :canvas_rubric_id
@@ -8,7 +8,7 @@
8
8
 
9
9
  class CreateRubricAssociations < ActiveRecord::Migration[5.1]
10
10
  def change
11
- create_table :rubric_associations do |t|
11
+ create_table :rubric_associations, id: false do |t|
12
12
  t.bigint :canvas_id, null: false
13
13
  t.bigint :canvas_rubric_id
14
14
  t.bigint :canvas_association_id
@@ -8,7 +8,7 @@
8
8
 
9
9
  class CreateRubricAssessments < ActiveRecord::Migration[5.1]
10
10
  def change
11
- create_table :rubric_assessments do |t|
11
+ create_table :rubric_assessments, id: false do |t|
12
12
  t.bigint :canvas_id
13
13
  t.bigint :canvas_user_id
14
14
  t.bigint :canvas_rubric_id
@@ -1,6 +1,6 @@
1
1
  class CreateAssignmentOverrides < ActiveRecord::Migration[5.1]
2
2
  def change
3
- create_table :assignment_overrides do |t|
3
+ create_table :assignment_overrides, id: false do |t|
4
4
  t.bigint :canvas_id, null: false
5
5
  t.bigint :canvas_assignment_id
6
6
  t.bigint :canvas_group_id
@@ -8,7 +8,7 @@
8
8
 
9
9
  class CreateScores < ActiveRecord::Migration[5.1]
10
10
  def change
11
- create_table :scores do |t|
11
+ create_table :scores, id: false do |t|
12
12
  t.bigint :canvas_id, null: false
13
13
  t.bigint :canvas_enrollment_id, null: false
14
14
  t.bigint :canvas_assignment_group_id
@@ -8,7 +8,7 @@
8
8
 
9
9
  class CreateUserObservers < ActiveRecord::Migration[5.1]
10
10
  def change
11
- create_table :user_observers do |t|
11
+ create_table :user_observers, id: false do |t|
12
12
  t.bigint :observing_user_id
13
13
  t.bigint :observed_user_id
14
14
  t.string :workflow_state
@@ -8,7 +8,7 @@
8
8
 
9
9
  class CreateCourseNicknames < ActiveRecord::Migration[5.1]
10
10
  def change
11
- create_table :course_nicknames do |t|
11
+ create_table :course_nicknames, id: false do |t|
12
12
  t.bigint :canvas_user_preference_value_id, null: true
13
13
  t.integer :canvas_user_id
14
14
  t.integer :canvas_course_id
@@ -8,7 +8,7 @@
8
8
 
9
9
  class CreateCourseProgresses < ActiveRecord::Migration[5.1]
10
10
  def change
11
- create_table :course_progresses do |t|
11
+ create_table :course_progresses, id: false do |t|
12
12
  t.bigint :canvas_course_id, null: false
13
13
  t.bigint :canvas_user_id, null: false
14
14
  t.integer :requirement_count
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: canvas_sync
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.25.1
4
+ version: 0.26.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Instructure CustomDev
@@ -448,6 +448,7 @@ files:
448
448
  - lib/canvas_sync/concerns/account/ancestry.rb
449
449
  - lib/canvas_sync/concerns/account/base.rb
450
450
  - lib/canvas_sync/concerns/api_syncable.rb
451
+ - lib/canvas_sync/concerns/canvas_id_as_primary.rb
451
452
  - lib/canvas_sync/concerns/deleted_scoping.rb
452
453
  - lib/canvas_sync/concerns/legacy_columns.rb
453
454
  - lib/canvas_sync/concerns/live_event_sync.rb
@@ -690,35 +691,35 @@ files:
690
691
  - spec/internal/config/database.yml
691
692
  - spec/internal/config/routes.rb
692
693
  - spec/internal/config/storage.yml
693
- - spec/internal/db/migrate/20250912205136_create_users.rb
694
- - spec/internal/db/migrate/20250912205137_create_pseudonyms.rb
695
- - spec/internal/db/migrate/20250912205138_create_courses.rb
696
- - spec/internal/db/migrate/20250912205139_create_groups.rb
697
- - spec/internal/db/migrate/20250912205140_create_group_memberships.rb
698
- - spec/internal/db/migrate/20250912205141_create_accounts.rb
699
- - spec/internal/db/migrate/20250912205142_create_terms.rb
700
- - spec/internal/db/migrate/20250912205143_create_enrollments.rb
701
- - spec/internal/db/migrate/20250912205144_create_sections.rb
702
- - spec/internal/db/migrate/20250912205145_create_assignments.rb
703
- - spec/internal/db/migrate/20250912205146_create_submissions.rb
704
- - spec/internal/db/migrate/20250912205147_create_roles.rb
705
- - spec/internal/db/migrate/20250912205148_create_admins.rb
706
- - spec/internal/db/migrate/20250912205149_create_assignment_groups.rb
707
- - spec/internal/db/migrate/20250912205150_create_context_modules.rb
708
- - spec/internal/db/migrate/20250912205151_create_context_module_items.rb
709
- - spec/internal/db/migrate/20250912205152_create_user_observers.rb
710
- - spec/internal/db/migrate/20250912205153_create_grading_periods.rb
711
- - spec/internal/db/migrate/20250912205154_create_grading_period_groups.rb
712
- - spec/internal/db/migrate/20250912205155_create_content_migrations.rb
713
- - spec/internal/db/migrate/20250912205156_create_learning_outcomes.rb
714
- - spec/internal/db/migrate/20250912205157_create_learning_outcome_results.rb
715
- - spec/internal/db/migrate/20250912205158_create_course_nicknames.rb
716
- - spec/internal/db/migrate/20250912205159_create_rubrics.rb
717
- - spec/internal/db/migrate/20250912205160_create_rubric_associations.rb
718
- - spec/internal/db/migrate/20250912205161_create_rubric_assessments.rb
719
- - spec/internal/db/migrate/20250912205162_create_course_progresses.rb
720
- - spec/internal/db/migrate/20250912205163_create_assignment_overrides.rb
721
- - spec/internal/db/migrate/20250912205164_create_scores.rb
694
+ - spec/internal/db/migrate/20251029222307_create_users.rb
695
+ - spec/internal/db/migrate/20251029222308_create_pseudonyms.rb
696
+ - spec/internal/db/migrate/20251029222309_create_courses.rb
697
+ - spec/internal/db/migrate/20251029222310_create_groups.rb
698
+ - spec/internal/db/migrate/20251029222311_create_group_memberships.rb
699
+ - spec/internal/db/migrate/20251029222312_create_accounts.rb
700
+ - spec/internal/db/migrate/20251029222313_create_terms.rb
701
+ - spec/internal/db/migrate/20251029222314_create_enrollments.rb
702
+ - spec/internal/db/migrate/20251029222315_create_sections.rb
703
+ - spec/internal/db/migrate/20251029222316_create_assignments.rb
704
+ - spec/internal/db/migrate/20251029222317_create_submissions.rb
705
+ - spec/internal/db/migrate/20251029222318_create_roles.rb
706
+ - spec/internal/db/migrate/20251029222319_create_admins.rb
707
+ - spec/internal/db/migrate/20251029222320_create_assignment_groups.rb
708
+ - spec/internal/db/migrate/20251029222321_create_context_modules.rb
709
+ - spec/internal/db/migrate/20251029222322_create_context_module_items.rb
710
+ - spec/internal/db/migrate/20251029222324_create_grading_periods.rb
711
+ - spec/internal/db/migrate/20251029222325_create_grading_period_groups.rb
712
+ - spec/internal/db/migrate/20251029222326_create_content_migrations.rb
713
+ - spec/internal/db/migrate/20251029222327_create_learning_outcomes.rb
714
+ - spec/internal/db/migrate/20251029222328_create_learning_outcome_results.rb
715
+ - spec/internal/db/migrate/20251029222330_create_rubrics.rb
716
+ - spec/internal/db/migrate/20251029222331_create_rubric_associations.rb
717
+ - spec/internal/db/migrate/20251029222332_create_rubric_assessments.rb
718
+ - spec/internal/db/migrate/20251029222334_create_assignment_overrides.rb
719
+ - spec/internal/db/migrate/20251029222335_create_scores.rb
720
+ - spec/internal/db/migrate/20251029223411_create_user_observers.rb
721
+ - spec/internal/db/migrate/20251029224009_create_course_nicknames.rb
722
+ - spec/internal/db/migrate/20251029224010_create_course_progresses.rb
722
723
  - spec/internal/db/schema.rb
723
724
  - spec/spec_helper.rb
724
725
  - spec/support/fake_canvas.rb
@@ -891,35 +892,35 @@ test_files:
891
892
  - spec/internal/config/database.yml
892
893
  - spec/internal/config/routes.rb
893
894
  - spec/internal/config/storage.yml
894
- - spec/internal/db/migrate/20250912205136_create_users.rb
895
- - spec/internal/db/migrate/20250912205137_create_pseudonyms.rb
896
- - spec/internal/db/migrate/20250912205138_create_courses.rb
897
- - spec/internal/db/migrate/20250912205139_create_groups.rb
898
- - spec/internal/db/migrate/20250912205140_create_group_memberships.rb
899
- - spec/internal/db/migrate/20250912205141_create_accounts.rb
900
- - spec/internal/db/migrate/20250912205142_create_terms.rb
901
- - spec/internal/db/migrate/20250912205143_create_enrollments.rb
902
- - spec/internal/db/migrate/20250912205144_create_sections.rb
903
- - spec/internal/db/migrate/20250912205145_create_assignments.rb
904
- - spec/internal/db/migrate/20250912205146_create_submissions.rb
905
- - spec/internal/db/migrate/20250912205147_create_roles.rb
906
- - spec/internal/db/migrate/20250912205148_create_admins.rb
907
- - spec/internal/db/migrate/20250912205149_create_assignment_groups.rb
908
- - spec/internal/db/migrate/20250912205150_create_context_modules.rb
909
- - spec/internal/db/migrate/20250912205151_create_context_module_items.rb
910
- - spec/internal/db/migrate/20250912205152_create_user_observers.rb
911
- - spec/internal/db/migrate/20250912205153_create_grading_periods.rb
912
- - spec/internal/db/migrate/20250912205154_create_grading_period_groups.rb
913
- - spec/internal/db/migrate/20250912205155_create_content_migrations.rb
914
- - spec/internal/db/migrate/20250912205156_create_learning_outcomes.rb
915
- - spec/internal/db/migrate/20250912205157_create_learning_outcome_results.rb
916
- - spec/internal/db/migrate/20250912205158_create_course_nicknames.rb
917
- - spec/internal/db/migrate/20250912205159_create_rubrics.rb
918
- - spec/internal/db/migrate/20250912205160_create_rubric_associations.rb
919
- - spec/internal/db/migrate/20250912205161_create_rubric_assessments.rb
920
- - spec/internal/db/migrate/20250912205162_create_course_progresses.rb
921
- - spec/internal/db/migrate/20250912205163_create_assignment_overrides.rb
922
- - spec/internal/db/migrate/20250912205164_create_scores.rb
895
+ - spec/internal/db/migrate/20251029222307_create_users.rb
896
+ - spec/internal/db/migrate/20251029222308_create_pseudonyms.rb
897
+ - spec/internal/db/migrate/20251029222309_create_courses.rb
898
+ - spec/internal/db/migrate/20251029222310_create_groups.rb
899
+ - spec/internal/db/migrate/20251029222311_create_group_memberships.rb
900
+ - spec/internal/db/migrate/20251029222312_create_accounts.rb
901
+ - spec/internal/db/migrate/20251029222313_create_terms.rb
902
+ - spec/internal/db/migrate/20251029222314_create_enrollments.rb
903
+ - spec/internal/db/migrate/20251029222315_create_sections.rb
904
+ - spec/internal/db/migrate/20251029222316_create_assignments.rb
905
+ - spec/internal/db/migrate/20251029222317_create_submissions.rb
906
+ - spec/internal/db/migrate/20251029222318_create_roles.rb
907
+ - spec/internal/db/migrate/20251029222319_create_admins.rb
908
+ - spec/internal/db/migrate/20251029222320_create_assignment_groups.rb
909
+ - spec/internal/db/migrate/20251029222321_create_context_modules.rb
910
+ - spec/internal/db/migrate/20251029222322_create_context_module_items.rb
911
+ - spec/internal/db/migrate/20251029222324_create_grading_periods.rb
912
+ - spec/internal/db/migrate/20251029222325_create_grading_period_groups.rb
913
+ - spec/internal/db/migrate/20251029222326_create_content_migrations.rb
914
+ - spec/internal/db/migrate/20251029222327_create_learning_outcomes.rb
915
+ - spec/internal/db/migrate/20251029222328_create_learning_outcome_results.rb
916
+ - spec/internal/db/migrate/20251029222330_create_rubrics.rb
917
+ - spec/internal/db/migrate/20251029222331_create_rubric_associations.rb
918
+ - spec/internal/db/migrate/20251029222332_create_rubric_assessments.rb
919
+ - spec/internal/db/migrate/20251029222334_create_assignment_overrides.rb
920
+ - spec/internal/db/migrate/20251029222335_create_scores.rb
921
+ - spec/internal/db/migrate/20251029223411_create_user_observers.rb
922
+ - spec/internal/db/migrate/20251029224009_create_course_nicknames.rb
923
+ - spec/internal/db/migrate/20251029224010_create_course_progresses.rb
923
924
  - spec/internal/db/schema.rb
924
925
  - spec/spec_helper.rb
925
926
  - spec/support/fake_canvas.rb