canvas_sync 0.3.23 → 0.4.0
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/Rakefile +2 -0
- data/lib/canvas_sync.rb +11 -1
- data/lib/canvas_sync/generators/templates/services/live_events/assignment/assignment_created_event.rb +5 -4
- data/lib/canvas_sync/generators/templates/services/live_events/assignment/assignment_event.rb +40 -49
- data/lib/canvas_sync/generators/templates/services/live_events/assignment/assignment_updated_event.rb +5 -3
- data/lib/canvas_sync/generators/templates/services/live_events/base_event.rb +12 -19
- data/lib/canvas_sync/generators/templates/services/live_events/course/course_created_event.rb +5 -3
- data/lib/canvas_sync/generators/templates/services/live_events/course/course_event.rb +32 -38
- data/lib/canvas_sync/generators/templates/services/live_events/course/course_updated_event.rb +5 -3
- data/lib/canvas_sync/generators/templates/services/live_events/enrollment/enrollment_created_event.rb +5 -3
- data/lib/canvas_sync/generators/templates/services/live_events/enrollment/enrollment_event.rb +53 -56
- data/lib/canvas_sync/generators/templates/services/live_events/enrollment/enrollment_updated_event.rb +5 -3
- data/lib/canvas_sync/generators/templates/services/live_events/grade/grade_changed_event.rb +5 -3
- data/lib/canvas_sync/generators/templates/services/live_events/grade/grade_event.rb +47 -48
- data/lib/canvas_sync/generators/templates/services/live_events/module/module_created_event.rb +6 -0
- data/lib/canvas_sync/generators/templates/services/live_events/module/module_event.rb +39 -0
- data/lib/canvas_sync/generators/templates/services/live_events/module/module_updated_event.rb +6 -0
- data/lib/canvas_sync/generators/templates/services/live_events/submission/submission_created_event.rb +5 -3
- data/lib/canvas_sync/generators/templates/services/live_events/submission/submission_event.rb +40 -45
- data/lib/canvas_sync/generators/templates/services/live_events/submission/submission_updated_event.rb +5 -3
- data/lib/canvas_sync/generators/templates/services/live_events/syllabus/syllabus_event.rb +29 -30
- data/lib/canvas_sync/generators/templates/services/live_events/syllabus/syllabus_updated_event.rb +4 -2
- data/lib/canvas_sync/generators/templates/services/live_events/user/user_created_event.rb +5 -3
- data/lib/canvas_sync/generators/templates/services/live_events/user/user_event.rb +5 -8
- data/lib/canvas_sync/generators/templates/services/live_events/user/user_updated_event.rb +5 -3
- data/lib/canvas_sync/version.rb +1 -1
- data/spec/canvas_sync/services/module_event_spec.rb +42 -0
- data/spec/dummy/app/services/live_events/assignment_created_event.rb +12 -0
- data/spec/dummy/app/services/live_events/assignment_event.rb +60 -0
- data/spec/dummy/app/services/live_events/assignment_updated_event.rb +12 -0
- data/spec/dummy/app/services/live_events/base_event.rb +22 -0
- data/spec/dummy/app/services/live_events/course_created_event.rb +12 -0
- data/spec/dummy/app/services/live_events/course_event.rb +42 -0
- data/spec/dummy/app/services/live_events/course_updated_event.rb +12 -0
- data/spec/dummy/app/services/live_events/enrollment_created_event.rb +12 -0
- data/spec/dummy/app/services/live_events/enrollment_event.rb +61 -0
- data/spec/dummy/app/services/live_events/enrollment_updated_event.rb +12 -0
- data/spec/dummy/app/services/live_events/grade_changed_event.rb +12 -0
- data/spec/dummy/app/services/live_events/grade_event.rb +61 -0
- data/spec/dummy/app/services/live_events/module_created_event.rb +12 -0
- data/spec/dummy/app/services/live_events/module_event.rb +45 -0
- data/spec/dummy/app/services/live_events/module_updated_event.rb +12 -0
- data/spec/dummy/app/services/live_events/submission_created_event.rb +12 -0
- data/spec/dummy/app/services/live_events/submission_event.rb +58 -0
- data/spec/dummy/app/services/live_events/submission_updated_event.rb +12 -0
- data/spec/dummy/app/services/live_events/syllabus_event.rb +40 -0
- data/spec/dummy/app/services/live_events/syllabus_updated_event.rb +12 -0
- data/spec/dummy/app/services/live_events/user_created_event.rb +12 -0
- data/spec/dummy/app/services/live_events/user_event.rb +38 -0
- data/spec/dummy/app/services/live_events/user_updated_event.rb +12 -0
- data/spec/dummy/log/development.log +666 -0
- data/spec/dummy/log/test.log +3758 -0
- data/spec/support/fake_canvas.rb +4 -0
- data/spec/support/fixtures/canvas_responses/module.json +12 -0
- metadata +57 -4
@@ -0,0 +1,12 @@
|
|
1
|
+
# #
|
2
|
+
# AUTO GENERATED LIVE EVENT
|
3
|
+
# This 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
|
+
module LiveEvents
|
10
|
+
class CourseCreatedEvent < LiveEvents::CourseEvent
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# #
|
2
|
+
# AUTO GENERATED LIVE EVENT
|
3
|
+
# This 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
|
+
module LiveEvents
|
10
|
+
class CourseEvent < LiveEvents::BaseEvent
|
11
|
+
# The following is provided in the live events call:
|
12
|
+
# {
|
13
|
+
# course_id: course.global_id,
|
14
|
+
# uuid: course.uuid,
|
15
|
+
# account_id: course.global_account_id,
|
16
|
+
# name: course.name,
|
17
|
+
# created_at: course.created_at,
|
18
|
+
# updated_at: course.updated_at,
|
19
|
+
# workflow_state: course.workflow_state
|
20
|
+
# }
|
21
|
+
|
22
|
+
def perform(event_payload)
|
23
|
+
super
|
24
|
+
attrs = {
|
25
|
+
canvas_course_id: local_canvas_id(payload[:course_id]),
|
26
|
+
canvas_account_id: local_canvas_id(payload[:account_id]),
|
27
|
+
long_name: payload[:name],
|
28
|
+
status: payload[:workflow_state],
|
29
|
+
}
|
30
|
+
create_or_update(attrs)
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def create_or_update(attrs)
|
36
|
+
course = Course.where(canva_course_id: attrs[:canva_course_id]).first_or_initialize
|
37
|
+
course.assign_attributes(attrs)
|
38
|
+
course.save!
|
39
|
+
course
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# #
|
2
|
+
# AUTO GENERATED LIVE EVENT
|
3
|
+
# This 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
|
+
module LiveEvents
|
10
|
+
class CourseUpdatedEvent < LiveEvents::CourseEvent
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# #
|
2
|
+
# AUTO GENERATED LIVE EVENT
|
3
|
+
# This 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
|
+
module LiveEvents
|
10
|
+
class EnrollmentCreatedEvent < LiveEvents::EnrollmentEvent
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# #
|
2
|
+
# AUTO GENERATED LIVE EVENT
|
3
|
+
# This 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
|
+
module LiveEvents
|
10
|
+
class EnrollmentEvent < LiveEvents::BaseEvent
|
11
|
+
# The following is provided in the live events call:
|
12
|
+
# {
|
13
|
+
#
|
14
|
+
# enrollment_id: enrollment.global_id,
|
15
|
+
# course_id: enrollment.global_course_id,
|
16
|
+
# user_id: enrollment.global_user_id,
|
17
|
+
# user_name: enrollment.user_name,
|
18
|
+
# type: enrollment.type,
|
19
|
+
# created_at: enrollment.created_at,
|
20
|
+
# updated_at: enrollment.updated_at,
|
21
|
+
# limit_privileges_to_course_section: enrollment.limit_privileges_to_course_section,
|
22
|
+
# course_section_id: enrollment.global_course_section_id,
|
23
|
+
# workflow_state: enrollment.workflow_state
|
24
|
+
# }
|
25
|
+
|
26
|
+
def perform(payload)
|
27
|
+
super
|
28
|
+
return if course.nil? || section.nil? || user.nil?
|
29
|
+
attrs = {
|
30
|
+
canvas_enrollment_id: local_canvas_id(payload[:enrollment_id]),
|
31
|
+
canvas_course_id: course.try(:id),
|
32
|
+
canvas_user_id: user.try(:id),
|
33
|
+
role: payload[:type],
|
34
|
+
canvas_section_id: section.try(:id),
|
35
|
+
status: payload[:workflow_state],
|
36
|
+
}
|
37
|
+
create_or_update(attrs)
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def create_or_update(attrs)
|
43
|
+
enrollment = Enrollment.where(canvas_enrollment_id: attrs[:canvas_enrollment_id]).first_or_initialize
|
44
|
+
enrollment.assign_attributes(attrs)
|
45
|
+
enrollment.save!
|
46
|
+
enrollment
|
47
|
+
end
|
48
|
+
|
49
|
+
def course
|
50
|
+
@course ||= Course.find_by(canvas_course_id: local_canvas_id(payload[:course_id]))
|
51
|
+
end
|
52
|
+
|
53
|
+
def section
|
54
|
+
@section ||= Section.find_by(canvas_section_id: local_canvas_id(payload[:section_id]))
|
55
|
+
end
|
56
|
+
|
57
|
+
def user
|
58
|
+
@user ||= User.find_by(canvas_user_id: local_canvas_id(payload[:user_id]))
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# #
|
2
|
+
# AUTO GENERATED LIVE EVENT
|
3
|
+
# This 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
|
+
module LiveEvents
|
10
|
+
class EnrollmentUpdatedEvent < LiveEvents::EnrollmentEvent
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# #
|
2
|
+
# AUTO GENERATED LIVE EVENT
|
3
|
+
# This 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
|
+
module LiveEvents
|
10
|
+
class GradeChangedEvent < LiveEvents::GradeEvent
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# #
|
2
|
+
# AUTO GENERATED LIVE EVENT
|
3
|
+
# This 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
|
+
module LiveEvents
|
10
|
+
class GradeEvent < LiveEvents::BaseEvent
|
11
|
+
# The following is provided in the live events call:
|
12
|
+
# {
|
13
|
+
# submission_id: submission.global_id,
|
14
|
+
# assignment_id: submission.global_assignment_id,
|
15
|
+
# grade: submission.grade,
|
16
|
+
# old_grade: old_submission.try(:grade),
|
17
|
+
# score: submission.score,
|
18
|
+
# old_score: old_submission.try(:score),
|
19
|
+
# points_possible: submission.assignment.points_possible,
|
20
|
+
# old_points_possible: old_assignment.points_possible,
|
21
|
+
# grader_id: grader_id,
|
22
|
+
# student_id: submission.global_user_id,
|
23
|
+
# user_id: submission.global_user_id,
|
24
|
+
# grading_complete: submission.graded?,
|
25
|
+
# muted: submission.muted_assignment?
|
26
|
+
# }
|
27
|
+
|
28
|
+
def perform(event_payload)
|
29
|
+
super
|
30
|
+
attrs = {
|
31
|
+
submission_id: submission.try(:id),
|
32
|
+
assignment_id: assignment.try(:id),
|
33
|
+
score: payload[:score],
|
34
|
+
points_possible: payload[:points_possible],
|
35
|
+
grader_id: payload[:grader_id],
|
36
|
+
user_id: user.try(:id),
|
37
|
+
grading_complete: payload[:grading_complete],
|
38
|
+
muted: payload[:muted],
|
39
|
+
}
|
40
|
+
create_or_update(attrs)
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def create_or_update(attrs)
|
46
|
+
# TODO: add your code here
|
47
|
+
end
|
48
|
+
|
49
|
+
def submission
|
50
|
+
Submission.find_by(canvas_submission_id: local_canvas_id(payload[:submission_id]))
|
51
|
+
end
|
52
|
+
|
53
|
+
def assignment
|
54
|
+
Assignment.find_by(canvas_assignment_id: local_canvas_id(payload[:assignment_id]))
|
55
|
+
end
|
56
|
+
|
57
|
+
def user
|
58
|
+
User.find_by(canvas_user_id: local_canvas_id(payload[:user_id]))
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# #
|
2
|
+
# AUTO GENERATED LIVE EVENT
|
3
|
+
# This 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
|
+
module LiveEvents
|
10
|
+
class ModuleCreatedEvent < LiveEvents::ModuleEvent
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# #
|
2
|
+
# AUTO GENERATED LIVE EVENT
|
3
|
+
# This 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
|
+
module LiveEvents
|
10
|
+
class ModuleEvent < LiveEvents::BaseEvent
|
11
|
+
# The following is provided in the live events call:
|
12
|
+
# {
|
13
|
+
# module_id,
|
14
|
+
# context_id,
|
15
|
+
# context_type,
|
16
|
+
# name,
|
17
|
+
# position,
|
18
|
+
# workflow_state,
|
19
|
+
# }
|
20
|
+
|
21
|
+
def perform(_event_payload)
|
22
|
+
super
|
23
|
+
create_or_update_from_api(payload)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def create_or_update_from_api(payload)
|
29
|
+
return unless payload["context_type"] == "Course"
|
30
|
+
context_module = ContextModule.find_or_initialize_by(canvas_context_module_id: payload["module_id"])
|
31
|
+
api_params = canvas_sync_client.course_module(payload["context_id"], payload["module_id"])
|
32
|
+
|
33
|
+
context_module.assign_attributes(
|
34
|
+
canvas_context_id: payload["context_id"],
|
35
|
+
canvas_context_type: payload["context_type"],
|
36
|
+
position: api_params["position"],
|
37
|
+
name: api_params["name"],
|
38
|
+
workflow_state: payload["workflow_state"],
|
39
|
+
unlock_at: api_params["unlock_at"],
|
40
|
+
)
|
41
|
+
|
42
|
+
context_module.save! if context_module.changed?
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# #
|
2
|
+
# AUTO GENERATED LIVE EVENT
|
3
|
+
# This 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
|
+
module LiveEvents
|
10
|
+
class ModuleUpdatedEvent < LiveEvents::ModuleEvent
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# #
|
2
|
+
# AUTO GENERATED LIVE EVENT
|
3
|
+
# This 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
|
+
module LiveEvents
|
10
|
+
class SubmissionCreatedEvent < LiveEvents::SubmissionEvent
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# #
|
2
|
+
# AUTO GENERATED LIVE EVENT
|
3
|
+
# This 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
|
+
module LiveEvents
|
10
|
+
class SubmissionEvent < LiveEvents::BaseEvent
|
11
|
+
# The following is provided in the live events call:
|
12
|
+
# {
|
13
|
+
# submission_id: submission.global_id,
|
14
|
+
# assignment_id: submission.global_assignment_id,
|
15
|
+
# user_id: submission.global_user_id,
|
16
|
+
# submitted_at: submission.submitted_at,
|
17
|
+
# graded_at: submission.graded_at,
|
18
|
+
# updated_at: submission.updated_at,
|
19
|
+
# score: submission.score,
|
20
|
+
# grade: submission.grade,
|
21
|
+
# submission_type: submission.submission_type,
|
22
|
+
# body: LiveEvents.truncate(submission.body),
|
23
|
+
# url: submission.url,
|
24
|
+
# attempt: submission.attempt
|
25
|
+
# }
|
26
|
+
|
27
|
+
def perform(event_payload)
|
28
|
+
super
|
29
|
+
return if assignment.nil? || user.nil?
|
30
|
+
attrs = {
|
31
|
+
canvas_submission_id: local_canvas_id(payload[:submission_id]),
|
32
|
+
canvas_assignment_id: assignment.try(:id),
|
33
|
+
canvas_user_id: user.try(:id),
|
34
|
+
submitted_at: payload[:submitted_at],
|
35
|
+
graded_at: payload[:graded_at],
|
36
|
+
score: payload[:score],
|
37
|
+
}
|
38
|
+
create_or_update(attrs)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def create_or_update(attrs)
|
45
|
+
submission = Submission.where(canvas_submission_id: attrs[:canvas_submission_id]).first_or_initialize
|
46
|
+
submission.assign_attributes(attrs)
|
47
|
+
submission.save!
|
48
|
+
submission
|
49
|
+
end
|
50
|
+
|
51
|
+
def assignment
|
52
|
+
@assignment ||= Assignment.find_by(canvas_assignment_id: local_canvas_id(payload[:assignment_id]))
|
53
|
+
end
|
54
|
+
|
55
|
+
def user
|
56
|
+
@user ||= User.find_by(canvas_user_id: local_canvas_id(payload[:user_id]))
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# #
|
2
|
+
# AUTO GENERATED LIVE EVENT
|
3
|
+
# This 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
|
+
module LiveEvents
|
10
|
+
class SubmissionUpdatedEvent < LiveEvents::SubmissionEvent
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# #
|
2
|
+
# AUTO GENERATED LIVE EVENT
|
3
|
+
# This 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
|
+
module LiveEvents
|
10
|
+
class SyllabusEvent < LiveEvents::BaseEvent
|
11
|
+
# The following is provided in the live events call:
|
12
|
+
# {
|
13
|
+
# course_id: course.global_id,
|
14
|
+
# syllabus_body: LiveEvents.truncate(course.syllabus_body),
|
15
|
+
# old_syllabus_body: LiveEvents.truncate(old_syllabus_body)
|
16
|
+
# }
|
17
|
+
#
|
18
|
+
|
19
|
+
def perform(event_payload)
|
20
|
+
super
|
21
|
+
attrs = {
|
22
|
+
course_id: course.try(:id),
|
23
|
+
syllabus_body: payload[:syllabus_body],
|
24
|
+
}
|
25
|
+
create_or_update(attrs)
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def create_or_update(attrs)
|
31
|
+
syllabus = Syllabus.where(course_id: attrs[:course_id]).first_or_initialize
|
32
|
+
syllabus.body = attrs[:syllabus_body] # Syllabus Body can get truncated by live events
|
33
|
+
syllabus.save!
|
34
|
+
end
|
35
|
+
|
36
|
+
def course
|
37
|
+
Course.find_by(canvas_course_id: local_canvas_id(payload[:course_id]))
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# #
|
2
|
+
# AUTO GENERATED LIVE EVENT
|
3
|
+
# This 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
|
+
module LiveEvents
|
10
|
+
class SyllabusUpdatedEvent < LiveEvents::SyllabusEvent
|
11
|
+
end
|
12
|
+
end
|