canvas_sync 0.22.3 → 0.22.5
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.
- checksums.yaml +4 -4
- data/README.md +5 -0
- data/Rakefile +0 -0
- data/app/controllers/canvas_sync/api/v1/health_check_controller.rb +0 -0
- data/app/controllers/canvas_sync/api/v1/live_events_controller.rb +0 -0
- data/app/models/canvas_sync/job_log.rb +5 -1
- data/app/models/canvas_sync/sync_batch.rb +0 -1
- data/config/initializers/apartment.rb +0 -0
- data/config/routes.rb +0 -0
- data/db/migrate/20170915210836_create_canvas_sync_job_log.rb +0 -0
- data/db/migrate/20180725155729_add_job_id_to_canvas_sync_job_logs.rb +0 -0
- data/db/migrate/20190916154829_add_fork_count_to_canvas_sync_job_logs.rb +0 -0
- data/db/migrate/20201018210836_create_canvas_sync_sync_batches.rb +0 -0
- data/db/migrate/20201030210836_add_full_sync_to_canvas_sync_sync_batch.rb +0 -0
- data/lib/canvas_sync/api_syncable.rb +0 -0
- data/lib/canvas_sync/batch_processor.rb +0 -0
- data/lib/canvas_sync/class_callback_executor.rb +0 -0
- data/lib/canvas_sync/concerns/ability_helper.rb +0 -0
- data/lib/canvas_sync/concerns/account/ancestry.rb +0 -0
- data/lib/canvas_sync/concerns/account/base.rb +0 -0
- data/lib/canvas_sync/concerns/api_syncable.rb +0 -0
- data/lib/canvas_sync/concerns/auto_relations.rb +0 -0
- data/lib/canvas_sync/concerns/legacy_columns.rb +0 -0
- data/lib/canvas_sync/concerns/live_event_sync.rb +0 -0
- data/lib/canvas_sync/concerns/role/base.rb +0 -0
- data/lib/canvas_sync/concerns/sync_mapping.rb +0 -0
- data/lib/canvas_sync/config.rb +0 -0
- data/lib/canvas_sync/engine.rb +0 -0
- data/lib/canvas_sync/generators/install_generator.rb +0 -0
- data/lib/canvas_sync/generators/install_live_events_generator.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_accounts.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_admins.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_assignment_groups.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_assignments.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_content_migrations.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_context_module_items.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_context_modules.rb +2 -0
- data/lib/canvas_sync/generators/templates/migrations/create_course_nicknames.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_course_progresses.rb +20 -0
- data/lib/canvas_sync/generators/templates/migrations/create_courses.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_enrollments.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_grading_period_groups.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_grading_periods.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_group_memberships.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_groups.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_learning_outcome_results.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_learning_outcomes.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_pseudonyms.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_roles.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_rubric_assessments.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_rubric_associations.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_rubrics.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_sections.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_submissions.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_terms.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_user_observers.rb +0 -0
- data/lib/canvas_sync/generators/templates/migrations/create_users.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/account.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/admin.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/assignment.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/assignment_group.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/content_migration.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/context_module.rb +36 -2
- data/lib/canvas_sync/generators/templates/models/context_module_item.rb +11 -3
- data/lib/canvas_sync/generators/templates/models/course.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/course_nickname.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/course_progress.rb +14 -0
- data/lib/canvas_sync/generators/templates/models/enrollment.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/grading_period.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/grading_period_group.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/group.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/group_membership.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/learning_outcome.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/learning_outcome_result.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/pseudonym.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/role.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/rubric.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/rubric_assessment.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/rubric_association.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/section.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/submission.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/term.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/user.rb +0 -0
- data/lib/canvas_sync/generators/templates/models/user_observer.rb +0 -0
- data/lib/canvas_sync/generators/templates/services/live_events/assignment_event.rb +0 -0
- data/lib/canvas_sync/generators/templates/services/live_events/assignment_group_event.rb +0 -0
- data/lib/canvas_sync/generators/templates/services/live_events/course_event.rb +0 -0
- data/lib/canvas_sync/generators/templates/services/live_events/course_section_event.rb +0 -0
- data/lib/canvas_sync/generators/templates/services/live_events/enrollment_event.rb +0 -0
- data/lib/canvas_sync/generators/templates/services/live_events/grade_event.rb +0 -0
- data/lib/canvas_sync/generators/templates/services/live_events/module_event.rb +0 -0
- data/lib/canvas_sync/generators/templates/services/live_events/module_item_event.rb +0 -0
- data/lib/canvas_sync/generators/templates/services/live_events/submission_event.rb +0 -0
- data/lib/canvas_sync/generators/templates/services/live_events/syllabus_event.rb +0 -0
- data/lib/canvas_sync/generators/templates/services/live_events/user_event.rb +0 -0
- data/lib/canvas_sync/importers/bulk_importer.rb +3 -0
- data/lib/canvas_sync/importers/legacy_importer.rb +0 -0
- data/lib/canvas_sync/job.rb +0 -0
- data/lib/canvas_sync/job_batches/batch.rb +0 -0
- data/lib/canvas_sync/job_batches/callback.rb +0 -0
- data/lib/canvas_sync/job_batches/chain_builder.rb +24 -3
- data/lib/canvas_sync/job_batches/compat/active_job.rb +0 -0
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/batches_assets/css/styles.less +0 -0
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/batches_assets/js/batch_tree.js +0 -0
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/batches_assets/js/util.js +0 -0
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/helpers.rb +0 -0
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/_batch_tree.erb +0 -0
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/_batches_table.erb +0 -0
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/_common.erb +0 -0
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/_jobs_table.erb +0 -0
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/_pagination.erb +0 -0
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/batch.erb +0 -0
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/batches.erb +0 -0
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/pool.erb +0 -0
- data/lib/canvas_sync/job_batches/compat/sidekiq/web/views/pools.erb +0 -0
- data/lib/canvas_sync/job_batches/compat/sidekiq/web.rb +0 -0
- data/lib/canvas_sync/job_batches/compat/sidekiq.rb +0 -0
- data/lib/canvas_sync/job_batches/compat.rb +0 -0
- data/lib/canvas_sync/job_batches/context_hash.rb +0 -0
- data/lib/canvas_sync/job_batches/hier_batch_ids.lua +0 -0
- data/lib/canvas_sync/job_batches/jobs/base_job.rb +0 -0
- data/lib/canvas_sync/job_batches/jobs/concurrent_batch_job.rb +0 -0
- data/lib/canvas_sync/job_batches/jobs/managed_batch_job.rb +4 -0
- data/lib/canvas_sync/job_batches/jobs/serial_batch_job.rb +0 -0
- data/lib/canvas_sync/job_batches/pool.rb +0 -0
- data/lib/canvas_sync/job_batches/pool_refill.lua +0 -0
- data/lib/canvas_sync/job_batches/redis_model.rb +0 -0
- data/lib/canvas_sync/job_batches/redis_script.rb +0 -0
- data/lib/canvas_sync/job_batches/schedule_callback.lua +0 -0
- data/lib/canvas_sync/job_batches/status.rb +1 -0
- data/lib/canvas_sync/job_uniqueness/compat/active_job.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/compat/sidekiq.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/compat.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/configuration.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/job_uniqueness.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/lock_context.rb +15 -3
- data/lib/canvas_sync/job_uniqueness/locksmith.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/on_conflict/base.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/on_conflict/log.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/on_conflict/null_strategy.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/on_conflict/raise.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/on_conflict/reject.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/on_conflict/reschedule.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/on_conflict.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/strategy/base.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/strategy/until_and_while_executing.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/strategy/until_executed.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/strategy/until_executing.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/strategy/until_expired.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/strategy/while_executing.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/strategy.rb +0 -0
- data/lib/canvas_sync/job_uniqueness/unique_job_common.rb +0 -0
- data/lib/canvas_sync/jobs/begin_sync_chain_job.rb +0 -0
- data/lib/canvas_sync/jobs/canvas_process_waiter.rb +0 -0
- data/lib/canvas_sync/jobs/report_checker.rb +0 -0
- data/lib/canvas_sync/jobs/report_processor_job.rb +0 -0
- data/lib/canvas_sync/jobs/report_starter.rb +0 -0
- data/lib/canvas_sync/jobs/sync_accounts_job.rb +0 -0
- data/lib/canvas_sync/jobs/sync_admins_job.rb +0 -0
- data/lib/canvas_sync/jobs/sync_assignment_groups_job.rb +0 -0
- data/lib/canvas_sync/jobs/sync_assignments_job.rb +0 -0
- data/lib/canvas_sync/jobs/sync_content_migrations_job.rb +0 -0
- data/lib/canvas_sync/jobs/sync_context_module_items_job.rb +0 -0
- data/lib/canvas_sync/jobs/sync_context_modules_job.rb +0 -0
- data/lib/canvas_sync/jobs/sync_course_progresses_job.rb +21 -0
- data/lib/canvas_sync/jobs/sync_provisioning_report_job.rb +0 -0
- data/lib/canvas_sync/jobs/sync_roles_job.rb +0 -0
- data/lib/canvas_sync/jobs/sync_rubric_assessments_job.rb +0 -0
- data/lib/canvas_sync/jobs/sync_rubric_associations_job.rb +0 -0
- data/lib/canvas_sync/jobs/sync_rubrics_job.rb +0 -0
- data/lib/canvas_sync/jobs/sync_simple_table_job.rb +0 -0
- data/lib/canvas_sync/jobs/sync_submissions_job.rb +0 -0
- data/lib/canvas_sync/jobs/sync_terms_job.rb +0 -0
- data/lib/canvas_sync/jobs/term_batches_job.rb +4 -1
- data/lib/canvas_sync/live_events/base_handler.rb +0 -0
- data/lib/canvas_sync/live_events/process_event_job.rb +0 -0
- data/lib/canvas_sync/live_events.rb +0 -0
- data/lib/canvas_sync/misc_helper.rb +0 -0
- data/lib/canvas_sync/processors/assignment_groups_processor.rb +0 -0
- data/lib/canvas_sync/processors/assignments_processor.rb +0 -0
- data/lib/canvas_sync/processors/content_migrations_processor.rb +0 -0
- data/lib/canvas_sync/processors/context_module_items_processor.rb +0 -0
- data/lib/canvas_sync/processors/context_modules_processor.rb +0 -0
- data/lib/canvas_sync/processors/course_completion_report_processor.rb +20 -0
- data/lib/canvas_sync/processors/model_mappings.yml +27 -0
- data/lib/canvas_sync/processors/normal_processor.rb +0 -0
- data/lib/canvas_sync/processors/provisioning_report_processor.rb +0 -0
- data/lib/canvas_sync/processors/report_processor.rb +0 -0
- data/lib/canvas_sync/processors/rubric_assessments_processor.rb +0 -0
- data/lib/canvas_sync/processors/rubric_associations_processor.rb +0 -0
- data/lib/canvas_sync/processors/rubrics_processor.rb +0 -0
- data/lib/canvas_sync/processors/submissions_processor.rb +0 -0
- data/lib/canvas_sync/record.rb +0 -0
- data/lib/canvas_sync/sidekiq_job.rb +0 -0
- data/lib/canvas_sync/version.rb +1 -1
- data/lib/canvas_sync.rb +4 -0
- data/spec/canvas_sync/canvas_sync_spec.rb +59 -41
- data/spec/canvas_sync/jobs/canvas_process_waiter_spec.rb +0 -0
- data/spec/canvas_sync/jobs/job_spec.rb +0 -0
- data/spec/canvas_sync/jobs/report_checker_spec.rb +0 -0
- data/spec/canvas_sync/jobs/report_processor_job_spec.rb +0 -0
- data/spec/canvas_sync/jobs/report_starter_spec.rb +0 -0
- data/spec/canvas_sync/jobs/sync_admins_job_spec.rb +0 -0
- data/spec/canvas_sync/jobs/sync_assignment_groups_job_spec.rb +0 -0
- data/spec/canvas_sync/jobs/sync_assignments_job_spec.rb +0 -0
- data/spec/canvas_sync/jobs/sync_content_migrations_job_spec.rb +0 -0
- data/spec/canvas_sync/jobs/sync_context_module_items_job_spec.rb +0 -0
- data/spec/canvas_sync/jobs/sync_context_modules_job_spec.rb +0 -0
- data/spec/canvas_sync/jobs/sync_provisioning_report_job_spec.rb +0 -0
- data/spec/canvas_sync/jobs/sync_roles_job_spec.rb +0 -0
- data/spec/canvas_sync/jobs/sync_simple_table_job_spec.rb +0 -0
- data/spec/canvas_sync/jobs/sync_submissions_job_spec.rb +0 -0
- data/spec/canvas_sync/jobs/sync_terms_job_spec.rb +0 -0
- data/spec/canvas_sync/live_events/live_event_sync_spec.rb +0 -0
- data/spec/canvas_sync/live_events/live_events_controller_spec.rb +0 -0
- data/spec/canvas_sync/live_events/process_event_job_spec.rb +0 -0
- data/spec/canvas_sync/misc_helper_spec.rb +0 -0
- data/spec/canvas_sync/models/accounts_spec.rb +0 -0
- data/spec/canvas_sync/models/admins_spec.rb +0 -0
- data/spec/canvas_sync/models/assignment_group_spec.rb +0 -0
- data/spec/canvas_sync/models/assignment_spec.rb +0 -0
- data/spec/canvas_sync/models/context_module_item_spec.rb +0 -0
- data/spec/canvas_sync/models/context_module_spec.rb +0 -0
- data/spec/canvas_sync/models/course_spec.rb +0 -0
- data/spec/canvas_sync/models/enrollment_spec.rb +0 -0
- data/spec/canvas_sync/models/group_membership_spec.rb +0 -0
- data/spec/canvas_sync/models/group_spec.rb +0 -0
- data/spec/canvas_sync/models/roles_spec.rb +0 -0
- data/spec/canvas_sync/models/section_spec.rb +0 -0
- data/spec/canvas_sync/models/submission_spec.rb +0 -0
- data/spec/canvas_sync/models/term_spec.rb +0 -0
- data/spec/canvas_sync/models/user_spec.rb +0 -0
- data/spec/canvas_sync/processors/assignment_groups_processor_spec.rb +0 -0
- data/spec/canvas_sync/processors/assignments_processor_spec.rb +0 -0
- data/spec/canvas_sync/processors/content_migrations_processor_spec.rb +0 -0
- data/spec/canvas_sync/processors/context_module_items_processor_spec.rb +0 -0
- data/spec/canvas_sync/processors/context_modules_processor_spec.rb +14 -0
- data/spec/canvas_sync/processors/course_completion_report_processor_spec.rb +47 -0
- data/spec/canvas_sync/processors/normal_processor_spec.rb +0 -0
- data/spec/canvas_sync/processors/provisioning_report_processor_spec.rb +0 -0
- data/spec/canvas_sync/processors/rubric_assessments_spec.rb +0 -0
- data/spec/canvas_sync/processors/rubric_associations_spec.rb +0 -0
- data/spec/canvas_sync/processors/rubrics_processor_spec.rb +0 -0
- data/spec/canvas_sync/processors/submissions_processor_spec.rb +0 -0
- data/spec/canvas_sync/services/module_event_spec.rb +0 -0
- data/spec/canvas_sync/services/module_item_event_spec.rb +0 -0
- data/spec/dummy/README.rdoc +0 -0
- data/spec/dummy/Rakefile +0 -0
- data/spec/dummy/app/models/account.rb +0 -0
- data/spec/dummy/app/models/admin.rb +0 -0
- data/spec/dummy/app/models/application_record.rb +0 -0
- data/spec/dummy/app/models/assignment.rb +0 -0
- data/spec/dummy/app/models/assignment_group.rb +0 -0
- data/spec/dummy/app/models/content_migration.rb +0 -0
- data/spec/dummy/app/models/context_module.rb +36 -2
- data/spec/dummy/app/models/context_module_item.rb +11 -3
- data/spec/dummy/app/models/course.rb +0 -0
- data/spec/dummy/app/models/course_nickname.rb +0 -0
- data/spec/dummy/app/models/course_progress.rb +20 -0
- data/spec/dummy/app/models/enrollment.rb +0 -0
- data/spec/dummy/app/models/grading_period.rb +0 -0
- data/spec/dummy/app/models/grading_period_group.rb +0 -0
- data/spec/dummy/app/models/group.rb +0 -0
- data/spec/dummy/app/models/group_membership.rb +0 -0
- data/spec/dummy/app/models/learning_outcome.rb +0 -0
- data/spec/dummy/app/models/learning_outcome_result.rb +0 -0
- data/spec/dummy/app/models/pseudonym.rb +0 -0
- data/spec/dummy/app/models/role.rb +0 -0
- data/spec/dummy/app/models/rubric.rb +0 -0
- data/spec/dummy/app/models/rubric_assessment.rb +0 -0
- data/spec/dummy/app/models/rubric_association.rb +0 -0
- data/spec/dummy/app/models/section.rb +0 -0
- data/spec/dummy/app/models/submission.rb +0 -0
- data/spec/dummy/app/models/term.rb +0 -0
- data/spec/dummy/app/models/user.rb +0 -0
- data/spec/dummy/app/models/user_observer.rb +0 -0
- data/spec/dummy/app/services/live_events/assignment_created_event.rb +0 -0
- data/spec/dummy/app/services/live_events/assignment_event.rb +0 -0
- data/spec/dummy/app/services/live_events/assignment_updated_event.rb +0 -0
- data/spec/dummy/app/services/live_events/base_event.rb +0 -0
- data/spec/dummy/app/services/live_events/course_created_event.rb +0 -0
- data/spec/dummy/app/services/live_events/course_event.rb +0 -0
- data/spec/dummy/app/services/live_events/course_section_created_event.rb +0 -0
- data/spec/dummy/app/services/live_events/course_section_event.rb +0 -0
- data/spec/dummy/app/services/live_events/course_section_updated_event.rb +0 -0
- data/spec/dummy/app/services/live_events/course_updated_event.rb +0 -0
- data/spec/dummy/app/services/live_events/enrollment_created_event.rb +0 -0
- data/spec/dummy/app/services/live_events/enrollment_event.rb +0 -0
- data/spec/dummy/app/services/live_events/enrollment_updated_event.rb +0 -0
- data/spec/dummy/app/services/live_events/grade_changed_event.rb +0 -0
- data/spec/dummy/app/services/live_events/grade_event.rb +0 -0
- data/spec/dummy/app/services/live_events/module_created_event.rb +0 -0
- data/spec/dummy/app/services/live_events/module_event.rb +0 -0
- data/spec/dummy/app/services/live_events/module_item_created_event.rb +0 -0
- data/spec/dummy/app/services/live_events/module_item_event.rb +0 -0
- data/spec/dummy/app/services/live_events/module_item_updated_event.rb +0 -0
- data/spec/dummy/app/services/live_events/module_updated_event.rb +0 -0
- data/spec/dummy/app/services/live_events/submission_created_event.rb +0 -0
- data/spec/dummy/app/services/live_events/submission_event.rb +0 -0
- data/spec/dummy/app/services/live_events/submission_updated_event.rb +0 -0
- data/spec/dummy/app/services/live_events/syllabus_event.rb +0 -0
- data/spec/dummy/app/services/live_events/syllabus_updated_event.rb +0 -0
- data/spec/dummy/app/services/live_events/user_created_event.rb +0 -0
- data/spec/dummy/app/services/live_events/user_event.rb +0 -0
- data/spec/dummy/app/services/live_events/user_updated_event.rb +0 -0
- data/spec/dummy/config/application.rb +0 -0
- data/spec/dummy/config/boot.rb +0 -0
- data/spec/dummy/config/database.yml +0 -0
- data/spec/dummy/config/environment.rb +0 -0
- data/spec/dummy/config/environments/development.rb +0 -0
- data/spec/dummy/config/environments/test.rb +0 -0
- data/spec/dummy/config/initializers/assets.rb +0 -0
- data/spec/dummy/config/initializers/session_store.rb +0 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +0 -0
- data/spec/dummy/config/routes.rb +0 -0
- data/spec/dummy/config/secrets.yml +0 -0
- data/spec/dummy/config.ru +0 -0
- data/spec/dummy/db/migrate/20190702203621_create_courses.rb +0 -0
- data/spec/dummy/db/migrate/20190702203622_create_accounts.rb +0 -0
- data/spec/dummy/db/migrate/20190702203623_create_terms.rb +0 -0
- data/spec/dummy/db/migrate/20190702203624_create_enrollments.rb +0 -0
- data/spec/dummy/db/migrate/20190702203625_create_sections.rb +0 -0
- data/spec/dummy/db/migrate/20190702203626_create_assignments.rb +0 -0
- data/spec/dummy/db/migrate/20190702203627_create_submissions.rb +0 -0
- data/spec/dummy/db/migrate/20190702203630_create_assignment_groups.rb +0 -0
- data/spec/dummy/db/migrate/20190702203631_create_context_modules.rb +2 -0
- data/spec/dummy/db/migrate/20190702203632_create_context_module_items.rb +0 -0
- data/spec/dummy/db/migrate/20190927204545_create_roles.rb +0 -0
- data/spec/dummy/db/migrate/20190927204546_create_admins.rb +0 -0
- data/spec/dummy/db/migrate/20200415171620_create_groups.rb +0 -0
- data/spec/dummy/db/migrate/20200416214248_create_group_memberships.rb +0 -0
- data/spec/dummy/db/migrate/20201016181346_create_pseudonyms.rb +0 -0
- data/spec/dummy/db/migrate/20210907233329_create_user_observers.rb +0 -0
- data/spec/dummy/db/migrate/20210907233330_create_grading_periods.rb +0 -0
- data/spec/dummy/db/migrate/20211001184920_create_grading_period_groups.rb +0 -0
- data/spec/dummy/db/migrate/20220308072643_create_content_migrations.rb +0 -0
- data/spec/dummy/db/migrate/20220712210559_create_learning_outcomes.rb +0 -0
- data/spec/dummy/db/migrate/20220926221926_create_users.rb +0 -0
- data/spec/dummy/db/migrate/20240408223326_create_course_nicknames.rb +0 -0
- data/spec/dummy/db/migrate/20240509105100_create_rubrics.rb +0 -0
- data/spec/dummy/db/migrate/20240510094100_create_rubric_associations.rb +0 -0
- data/spec/dummy/db/migrate/20240510101100_create_rubric_assessments.rb +0 -0
- data/spec/dummy/db/migrate/20240523101010_create_learning_outcome_results.rb +0 -0
- data/spec/dummy/db/migrate/20240828161300_create_course_progresses.rb +26 -0
- data/spec/dummy/db/schema.rb +15 -0
- data/spec/factories/account_factory.rb +0 -0
- data/spec/factories/admin_factory.rb +0 -0
- data/spec/factories/assignment_factory.rb +0 -0
- data/spec/factories/assignment_group_factory.rb +0 -0
- data/spec/factories/context_module_factory.rb +0 -0
- data/spec/factories/context_module_item_factory.rb +0 -0
- data/spec/factories/course_factory.rb +0 -0
- data/spec/factories/enrollment_factory.rb +0 -0
- data/spec/factories/group_factory.rb +0 -0
- data/spec/factories/group_membership_factory.rb +0 -0
- data/spec/factories/role_factory.rb +0 -0
- data/spec/factories/section_factory.rb +0 -0
- data/spec/factories/submission_factory.rb +0 -0
- data/spec/factories/term_factory.rb +0 -0
- data/spec/factories/user_factory.rb +0 -0
- data/spec/job_batching/batch_spec.rb +0 -0
- data/spec/job_batching/callback_spec.rb +0 -0
- data/spec/job_batching/compat/active_job_spec.rb +0 -0
- data/spec/job_batching/compat/sidekiq_spec.rb +0 -0
- data/spec/job_batching/context_hash_spec.rb +0 -0
- data/spec/job_batching/flow_spec.rb +0 -0
- data/spec/job_batching/integration/fail_then_succeed.rb +0 -0
- data/spec/job_batching/integration/integration.rb +0 -0
- data/spec/job_batching/integration/nested.rb +0 -0
- data/spec/job_batching/integration/simple.rb +0 -0
- data/spec/job_batching/integration/workflow.rb +0 -0
- data/spec/job_batching/integration_helper.rb +0 -0
- data/spec/job_batching/pool_spec.rb +0 -0
- data/spec/job_batching/status_spec.rb +0 -0
- data/spec/job_batching/support/base_job.rb +0 -0
- data/spec/job_batching/support/sample_callback.rb +0 -0
- data/spec/job_uniqueness/compat/active_job_spec.rb +0 -0
- data/spec/job_uniqueness/compat/sidekiq_spec.rb +0 -0
- data/spec/job_uniqueness/lock_context_spec.rb +0 -0
- data/spec/job_uniqueness/on_conflict/log_spec.rb +0 -0
- data/spec/job_uniqueness/on_conflict/raise_spec.rb +0 -0
- data/spec/job_uniqueness/on_conflict/reschedule_spec.rb +0 -0
- data/spec/job_uniqueness/on_conflict_spec.rb +0 -0
- data/spec/job_uniqueness/spec_helper.rb +0 -0
- data/spec/job_uniqueness/strategy/base_spec.rb +0 -0
- data/spec/job_uniqueness/strategy/until_and_while_executing_spec.rb +0 -0
- data/spec/job_uniqueness/strategy/until_executed_spec.rb +0 -0
- data/spec/job_uniqueness/strategy/until_executing_spec.rb +0 -0
- data/spec/job_uniqueness/strategy/until_expired_spec.rb +0 -0
- data/spec/job_uniqueness/strategy/while_executing_spec.rb +0 -0
- data/spec/job_uniqueness/support/lock_strategy.rb +0 -0
- data/spec/job_uniqueness/support/on_conflict.rb +0 -0
- data/spec/job_uniqueness/support/test_worker.rb +0 -0
- data/spec/job_uniqueness/unique_job_common_spec.rb +0 -0
- data/spec/spec_helper.rb +0 -0
- data/spec/support/fake_canvas.rb +0 -0
- data/spec/support/fixtures/canvas_responses/admins.json +0 -0
- data/spec/support/fixtures/canvas_responses/module.json +0 -0
- data/spec/support/fixtures/canvas_responses/module_item.json +0 -0
- data/spec/support/fixtures/canvas_responses/roles.json +0 -0
- data/spec/support/fixtures/canvas_responses/terms.json +0 -0
- data/spec/support/fixtures/reports/assignment_groups.csv +0 -0
- data/spec/support/fixtures/reports/assignments.csv +0 -0
- data/spec/support/fixtures/reports/content_migrations.csv +0 -0
- data/spec/support/fixtures/reports/context_module_items.csv +0 -0
- data/spec/support/fixtures/reports/context_modules.csv +3 -3
- data/spec/support/fixtures/reports/course_nicknames.csv +0 -0
- data/spec/support/fixtures/reports/course_progresses.csv +3 -0
- data/spec/support/fixtures/reports/course_progresses_conflict.csv +2 -0
- data/spec/support/fixtures/reports/courses.csv +0 -0
- data/spec/support/fixtures/reports/enrollments.csv +0 -0
- data/spec/support/fixtures/reports/grading_period_groups.csv +0 -0
- data/spec/support/fixtures/reports/grading_periods.csv +0 -0
- data/spec/support/fixtures/reports/group_memberships.csv +0 -0
- data/spec/support/fixtures/reports/groups.csv +0 -0
- data/spec/support/fixtures/reports/learning_outcome_results.csv +0 -0
- data/spec/support/fixtures/reports/learning_outcomes.csv +0 -0
- data/spec/support/fixtures/reports/provisioning_csv +0 -0
- data/spec/support/fixtures/reports/provisioning_csv_unzipped/courses.csv +0 -0
- data/spec/support/fixtures/reports/provisioning_csv_unzipped/users.csv +0 -0
- data/spec/support/fixtures/reports/rubric_assessments.csv +0 -0
- data/spec/support/fixtures/reports/rubric_associations.csv +0 -0
- data/spec/support/fixtures/reports/rubrics.csv +0 -0
- data/spec/support/fixtures/reports/sections.csv +0 -0
- data/spec/support/fixtures/reports/submissions.csv +0 -0
- data/spec/support/fixtures/reports/user_observers.csv +0 -0
- data/spec/support/fixtures/reports/users.csv +0 -0
- data/spec/support/fixtures/reports/xlist.csv +0 -0
- metadata +202 -188
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -8,6 +8,20 @@ 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(
|
|
12
|
+
canvas_id: 23,
|
|
13
|
+
canvas_context_id: 785,
|
|
14
|
+
canvas_context_type: 'Course',
|
|
15
|
+
name: 'New Mod',
|
|
16
|
+
position: 1,
|
|
17
|
+
workflow_state: 'active',
|
|
18
|
+
completion_requirements: [],
|
|
19
|
+
prerequisites: []
|
|
20
|
+
)
|
|
21
|
+
# Check for properly serialized YAML
|
|
22
|
+
expect(ContextModule.last.completion_requirements).to eq([
|
|
23
|
+
{ id: 1, type: 'must_view' }
|
|
24
|
+
])
|
|
11
25
|
end
|
|
12
26
|
end
|
|
13
27
|
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
RSpec.describe CanvasSync::Processors::CourseCompletionReportProcessor do
|
|
4
|
+
|
|
5
|
+
describe '#process' do
|
|
6
|
+
it 'inserts course progresses' do
|
|
7
|
+
expect {
|
|
8
|
+
described_class.process('spec/support/fixtures/reports/course_progresses.csv', {}, 1)
|
|
9
|
+
}.to change { CourseProgress.count }.by(2)
|
|
10
|
+
cp = CourseProgress.first
|
|
11
|
+
expect(cp).to have_attributes(
|
|
12
|
+
canvas_user_id: 1,
|
|
13
|
+
canvas_course_id: 1,
|
|
14
|
+
requirement_count: 0,
|
|
15
|
+
requirement_completed_count: 0,
|
|
16
|
+
)
|
|
17
|
+
expect(cp.completion_date.strftime('%Y-%m-%d %H:%M:%S')).to eq('2024-05-01 09:00:00')
|
|
18
|
+
expect(CourseProgress.last).to have_attributes(
|
|
19
|
+
canvas_user_id: 2,
|
|
20
|
+
canvas_course_id: 2,
|
|
21
|
+
requirement_count: 1,
|
|
22
|
+
requirement_completed_count: 1,
|
|
23
|
+
completion_date: nil
|
|
24
|
+
)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
context 'record already present in the database' do
|
|
28
|
+
before do
|
|
29
|
+
described_class.process('spec/support/fixtures/reports/course_progresses.csv', {}, 1)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it 'updates the course progress' do
|
|
33
|
+
expect {
|
|
34
|
+
described_class.process('spec/support/fixtures/reports/course_progresses_conflict.csv', {}, 1)
|
|
35
|
+
}.to change { CourseProgress.count }.by(0)
|
|
36
|
+
cp = CourseProgress.first
|
|
37
|
+
expect(cp).to have_attributes(
|
|
38
|
+
canvas_user_id: 1,
|
|
39
|
+
canvas_course_id: 1,
|
|
40
|
+
requirement_count: 10,
|
|
41
|
+
requirement_completed_count: 10,
|
|
42
|
+
)
|
|
43
|
+
expect(cp.completion_date.strftime('%Y-%m-%d %H:%M:%S')).to eq('2028-05-01 09:00:00')
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
data/spec/dummy/README.rdoc
CHANGED
|
File without changes
|
data/spec/dummy/Rakefile
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -20,8 +20,42 @@ class ContextModule < ApplicationRecord
|
|
|
20
20
|
has_many :context_module_items, primary_key: :canvas_id, foreign_key: :canvas_context_module_id
|
|
21
21
|
has_many :assignments, through: :context_module_items
|
|
22
22
|
|
|
23
|
+
serialize :completion_requirements
|
|
24
|
+
serialize :prerequisites
|
|
25
|
+
|
|
23
26
|
api_syncable({
|
|
24
|
-
|
|
25
|
-
|
|
27
|
+
canvas_id: :id,
|
|
28
|
+
canvas_context_id: :context_id,
|
|
29
|
+
canvas_context_type: :context_type,
|
|
30
|
+
position: :position,
|
|
31
|
+
name: :name,
|
|
32
|
+
workflow_state: :workflow_state,
|
|
33
|
+
unlock_at: :unlock_at,
|
|
34
|
+
completion_requirements: :completion_requirements,
|
|
35
|
+
prerequisites: :prerequisites,
|
|
36
|
+
requirement_count: :requirement_count
|
|
37
|
+
}, lambda { |api|
|
|
38
|
+
course_modules = api.course_modules(canvas_context_id, { include: ['items'] }) # avoids having 2 API calls for modules as we reuse this data
|
|
39
|
+
context_module = course_modules&.detect { |course_module| course_module['id'] == canvas_id }
|
|
40
|
+
|
|
41
|
+
if context_module.nil? # no context_module here means it is deleted in Canvas
|
|
42
|
+
self.workflow_state = :deleted
|
|
43
|
+
return self
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# The ContextModule model in Canvas has the 'completion_requirements' and 'prerequisites' fields that are not returned directly from the API
|
|
47
|
+
# We need to compute them here based on data that we receive from course_modules in the API
|
|
48
|
+
context_module['prerequisites'] = course_modules.map do |course_module|
|
|
49
|
+
next unless context_module['prerequisite_module_ids']&.include?(course_module['id'])
|
|
50
|
+
|
|
51
|
+
{
|
|
52
|
+
id: course_module['id'],
|
|
53
|
+
name: course_module['name'],
|
|
54
|
+
type: 'context_module'
|
|
55
|
+
}.with_indifferent_access
|
|
56
|
+
end.compact
|
|
26
57
|
|
|
58
|
+
context_module['completion_requirements'] = context_module['items']&.map { |item| item['completion_requirement'] }&.compact
|
|
59
|
+
context_module
|
|
60
|
+
})
|
|
27
61
|
end
|
|
@@ -18,7 +18,15 @@ class ContextModuleItem < ApplicationRecord
|
|
|
18
18
|
belongs_to :assignment, foreign_key: :canvas_assignment_id, primary_key: :canvas_id
|
|
19
19
|
|
|
20
20
|
api_syncable({
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
canvas_id: :id,
|
|
22
|
+
canvas_context_module_id: :module_id,
|
|
23
|
+
position: :position,
|
|
24
|
+
canvas_content_type: :type,
|
|
25
|
+
canvas_content_id: :content_id,
|
|
26
|
+
canvas_assignment_id: :assignment_id
|
|
27
|
+
}, lambda { |api|
|
|
28
|
+
module_item = api.module_item(context_module.context.canvas_id, context_module.canvas_id, canvas_id)
|
|
29
|
+
module_item['assignment_id'] = api.assignment(context_module.context.canvas_id, module_item['content_id'])['id'] if module_item['type'] == 'Assignment'
|
|
30
|
+
module_item
|
|
31
|
+
})
|
|
24
32
|
end
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# #
|
|
2
|
+
# AUTO GENERATED MODEL
|
|
3
|
+
# This model was auto generated by the CanvasSync Gem.
|
|
4
|
+
# You can customize it as needed, but make sure you test
|
|
5
|
+
# any changes you make to the auto generated methods.
|
|
6
|
+
#
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
# CourseProgress is not a Canvas model. It is a table built from the Custom Report
|
|
10
|
+
class CourseProgress < ApplicationRecord
|
|
11
|
+
include CanvasSync::Record
|
|
12
|
+
|
|
13
|
+
canvas_sync_features :defaults
|
|
14
|
+
|
|
15
|
+
belongs_to :user, primary_key: :canvas_id, foreign_key: :canvas_user_id, optional: true
|
|
16
|
+
belongs_to :course, primary_key: :canvas_id, foreign_key: :canvas_course_id, optional: true
|
|
17
|
+
|
|
18
|
+
validates_presence_of :canvas_user_id, :canvas_course_id
|
|
19
|
+
validates_uniqueness_of :canvas_user_id, scope: :canvas_course_id
|
|
20
|
+
end
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
data/spec/dummy/config/boot.rb
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
data/spec/dummy/config/routes.rb
CHANGED
|
File without changes
|
|
File without changes
|
data/spec/dummy/config.ru
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# #
|
|
2
|
+
# AUTO GENERATED MIGRATION
|
|
3
|
+
# This migration was auto generated by the CanvasSync Gem.
|
|
4
|
+
# You can add new columns to this table, but removing or
|
|
5
|
+
# re-naming ones created here may break Canvas Syncing.
|
|
6
|
+
#
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class CreateCourseProgresses < ActiveRecord::Migration[5.1]
|
|
10
|
+
def change
|
|
11
|
+
create_table :course_progresses do |t|
|
|
12
|
+
t.bigint :canvas_course_id, null: false
|
|
13
|
+
t.bigint :canvas_user_id, null: false
|
|
14
|
+
t.integer :requirement_count
|
|
15
|
+
t.integer :requirement_completed_count
|
|
16
|
+
t.datetime :completion_date
|
|
17
|
+
|
|
18
|
+
t.timestamps
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
add_index :course_progresses, :canvas_user_id
|
|
22
|
+
add_index :course_progresses, :canvas_course_id
|
|
23
|
+
add_index :course_progresses, [:canvas_user_id, :canvas_course_id], unique: true
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
data/spec/dummy/db/schema.rb
CHANGED
|
@@ -153,6 +153,8 @@ ActiveRecord::Schema.define(version: 2024_05_23_101010) do
|
|
|
153
153
|
t.datetime "unlock_at"
|
|
154
154
|
t.datetime "created_at", null: false
|
|
155
155
|
t.datetime "updated_at", null: false
|
|
156
|
+
t.text "completion_requirements"
|
|
157
|
+
t.text "prerequisites"
|
|
156
158
|
t.index ["canvas_context_id", "canvas_context_type"], name: "index_context_modules_on_context"
|
|
157
159
|
t.index ["canvas_id"], name: "index_context_modules_on_canvas_id", unique: true
|
|
158
160
|
end
|
|
@@ -168,6 +170,19 @@ ActiveRecord::Schema.define(version: 2024_05_23_101010) do
|
|
|
168
170
|
t.index ["canvas_user_preference_value_id"], name: "index_course_nicknames_on_canvas_user_preference_value_id", unique: true
|
|
169
171
|
end
|
|
170
172
|
|
|
173
|
+
create_table "course_progresses", force: :cascade do |t|
|
|
174
|
+
t.bigint "canvas_course_id", null: false
|
|
175
|
+
t.bigint "canvas_user_id", null: false
|
|
176
|
+
t.integer "requirement_count"
|
|
177
|
+
t.integer "requirement_completed_count"
|
|
178
|
+
t.datetime "completion_date"
|
|
179
|
+
t.datetime "created_at", null: false
|
|
180
|
+
t.datetime "updated_at", null: false
|
|
181
|
+
t.index ["canvas_user_id"], name: "index_course_progresses_on_canvas_user_id"
|
|
182
|
+
t.index ["canvas_course_id"], name: "index_course_progresses_on_canvas_course_id"
|
|
183
|
+
t.index ["canvas_user_id", "canvas_course_id"], name: "index_course_progresses_on_canvas_user_id_and_canvas_course_id", unique: true
|
|
184
|
+
end
|
|
185
|
+
|
|
171
186
|
create_table "courses", force: :cascade do |t|
|
|
172
187
|
t.bigint "canvas_id", null: false
|
|
173
188
|
t.string "sis_id"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|