canvas_shim 0.1.6rc → 0.1.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: 6e39a7f405530935baee9428f5dc11f644e0189002d4ea74948ca4dabe88f097
4
- data.tar.gz: 86c9afa59179b660525df9865cfd616b54907be79cb3048a35e55eb4055d56d4
2
+ SHA1:
3
+ metadata.gz: 609839eafaec6666e51e55d0cc8d6edbf03fe6b3
4
+ data.tar.gz: 3bbd30dc0a3a84a7b71b41d699dfea5d94368e94
5
5
  SHA512:
6
- metadata.gz: b1136da9362a036361b9b206ac94f851621f203682232bbb9a687b9b8051062828ecf16f0f6ec44b88ce6217295a351cf27242005e99b5acd242f7148e7e9cd8
7
- data.tar.gz: 2b1237a669712bb4b8c0b323a8f6fca9dbccd4cd6bf9c91ac20b84aad14a08cd57384644e681d627d2b2bccb84e1c420e1603cd2e13bddff2124a74712d85857
6
+ metadata.gz: 589f68146ae0b4b3cc2d087d3ae09de8174abc5af2619fd0cd736859001aaf0b09514be2a180dc8a1cab277cb25df15f11c5785a3ad83ef16b6de460e59c0a24
7
+ data.tar.gz: 9cec254fdf2b4050229c08839c29fd52bc579e30c0ed575c66849148011bef387db8ba699aaabc59f24df0617183bc6e7d758c745224d71add04d650432d8aa0
@@ -35,7 +35,9 @@ module PipelineService
35
35
  end
36
36
 
37
37
  def post_to_pipeline
38
- client.new(@args.merge(object: object)).call
38
+ client.new(
39
+ @args.merge(object: object)
40
+ ).call
39
41
  end
40
42
  end
41
43
  end
@@ -46,6 +46,7 @@ module PipelineService
46
46
  end
47
47
 
48
48
  def configure_dependencies
49
+ @message_class = @args[:message_class] || PipelinePublisher::Message
49
50
  @fetcher = @args[:fetcher] || Serializers::Fetcher
50
51
  @logger = @args[:logger] || PipelineService::Logger
51
52
  @canvas_domain = ENV['CANVAS_DOMAIN']
@@ -57,11 +58,11 @@ module PipelineService
57
58
  end
58
59
 
59
60
  def build
60
- payload.to_hash
61
+ message_class.new(payload.to_hash)
61
62
  end
62
63
 
63
64
  def noun
64
- object.class.to_s.split('::').last.underscore
65
+ object.class.to_s.underscore
65
66
  end
66
67
 
67
68
  def id
@@ -1,13 +1,16 @@
1
1
  module PipelineService
2
2
  module Events
3
3
  class Emitter
4
- def initialize args={}
4
+ def initialize(args={})
5
5
  @object = args[:object]
6
6
  @args = args
7
- @responder = @args[:responder] || Events::Responders::SIS
7
+ @responder = @args[:responder] || Events::Responders::SIS
8
+ @event = Events::GradedOutEvent
8
9
  end
9
10
 
10
11
  def call
12
+ return unless object.is_a?(Enrollment)
13
+ fetch_serializer
11
14
  build_message
12
15
  build_responder
13
16
  build_subscriptions
@@ -16,19 +19,15 @@ module PipelineService
16
19
 
17
20
  private
18
21
 
19
- attr_reader :subscriptions, :object, :responder, :message
20
-
21
- def events
22
- {
23
- graded_out: Events::GradedOutEvent,
24
- grade_changed: Events::GradeChangedEvent
25
- }
26
- end
22
+ attr_reader :subscriptions, :object, :responder, :message, :serializer, :event
27
23
 
28
24
  def build_subscriptions
29
- @subscriptions = [:graded_out, :grade_changed].map do |event_name|
30
- Events::Subscription.new(event: event_name, responder: responder)
31
- end
25
+ @subscriptions = [
26
+ Events::Subscription.new(
27
+ event: :graded_out,
28
+ responder: responder
29
+ )
30
+ ]
32
31
  end
33
32
 
34
33
  def build_responder
@@ -38,13 +37,8 @@ module PipelineService
38
37
  )
39
38
  end
40
39
 
41
- def serializer
42
- case object
43
- when PipelineService::Nouns::UnitGrades
44
- Serializers::UnitGrades
45
- when Enrollment
46
- Serializers::CanvasAPIEnrollment
47
- end
40
+ def fetch_serializer
41
+ @serializer = Serializers::CanvasAPIEnrollment
48
42
  end
49
43
 
50
44
  def build_message
@@ -53,10 +47,8 @@ module PipelineService
53
47
 
54
48
  def emit
55
49
  subscriptions.each do |subscription|
56
- next unless events[subscription.event]
57
- events[subscription.event].new(
58
- @args.merge(subscription: subscription)
59
- ).emit
50
+ next if subscription.event != :graded_out
51
+ event.new(@args.merge(subscription: subscription)).emit
60
52
  end
61
53
  end
62
54
  end
@@ -11,8 +11,7 @@ module PipelineService
11
11
  end
12
12
 
13
13
  def post(args)
14
- message = PipelinePublisher::Message.new(*args)
15
- PipelinePublisher::MessagesApi.new.messages_post(message)
14
+ PipelinePublisher::MessagesApi.new.messages_post(*args)
16
15
  end
17
16
 
18
17
  def get(endpoint, args)
@@ -6,8 +6,6 @@ module PipelineService
6
6
  # Maps any object with a class containing 'enrollment' to the enrollment serializer
7
7
  def self.fetch(object:)
8
8
  case object.class.to_s
9
- when /PipelineService::Nouns::UnitGrades/
10
- PipelineService::Serializers::UnitGrades
11
9
  when /Enrollment/
12
10
  PipelineService::Serializers::Enrollment
13
11
  else
@@ -1,15 +1,16 @@
1
1
  require 'csv'
2
+ require "rails"
2
3
  require 'grape'
3
4
  require 'grape-swagger'
4
5
  require 'grape-swagger-ui'
5
6
  require 'aws-sdk-dynamodb'
7
+ require "pipeline_publisher_ruby"
6
8
  require "business"
7
9
  require 'httparty'
8
10
  require 'aws-sdk-core'
9
11
  require 'aws-sdk-s3'
12
+ require 'inst-jobs'
10
13
  require 'pg'
11
- require "pipeline_publisher_ruby"
12
-
13
14
 
14
15
  module CanvasShim
15
16
  class Engine < ::Rails::Engine
@@ -1,3 +1,3 @@
1
1
  module CanvasShim
2
- VERSION = '0.1.6rc'
2
+ VERSION = '0.1.6'
3
3
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: canvas_shim
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6rc
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - ''
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-15 00:00:00.000000000 Z
11
+ date: 2018-11-13 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 5.0.4
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 5.0.4
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: grape
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -56,16 +70,16 @@ dependencies:
56
70
  name: aws-sdk-dynamodb
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - "~>"
73
+ - - '='
60
74
  - !ruby/object:Gem::Version
61
- version: '1.6'
75
+ version: 1.15.0
62
76
  type: :runtime
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
- - - "~>"
80
+ - - '='
67
81
  - !ruby/object:Gem::Version
68
- version: '1.6'
82
+ version: 1.15.0
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: pipeline_publisher_ruby
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -109,19 +123,61 @@ dependencies:
109
123
  - !ruby/object:Gem::Version
110
124
  version: '0'
111
125
  - !ruby/object:Gem::Dependency
112
- name: loofah
126
+ name: aws-sdk-core
113
127
  requirement: !ruby/object:Gem::Requirement
114
128
  requirements:
115
129
  - - '='
116
130
  - !ruby/object:Gem::Version
117
- version: 2.2.3
131
+ version: 3.27.0
118
132
  type: :runtime
119
133
  prerelease: false
120
134
  version_requirements: !ruby/object:Gem::Requirement
121
135
  requirements:
122
136
  - - '='
123
137
  - !ruby/object:Gem::Version
124
- version: 2.2.3
138
+ version: 3.27.0
139
+ - !ruby/object:Gem::Dependency
140
+ name: aws-sdk-s3
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: inst-jobs
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: pg
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
125
181
  description: A rails engine to be integrated with Canvas
126
182
  email:
127
183
  - ''
@@ -159,14 +215,12 @@ files:
159
215
  - app/services/pipeline_service/endpoints/pipeline.rb
160
216
  - app/services/pipeline_service/endpoints/pipeline/message_builder.rb
161
217
  - app/services/pipeline_service/events/emitter.rb
162
- - app/services/pipeline_service/events/grade_changed_event.rb
163
218
  - app/services/pipeline_service/events/graded_out_event.rb
164
219
  - app/services/pipeline_service/events/http_client.rb
165
220
  - app/services/pipeline_service/events/responders/sis.rb
166
221
  - app/services/pipeline_service/events/subscription.rb
167
222
  - app/services/pipeline_service/http_client.rb
168
223
  - app/services/pipeline_service/logger.rb
169
- - app/services/pipeline_service/nouns/unit_grades.rb
170
224
  - app/services/pipeline_service/pipeline_client.rb
171
225
  - app/services/pipeline_service/serializers/assignment.rb
172
226
  - app/services/pipeline_service/serializers/base_methods.rb
@@ -174,7 +228,6 @@ files:
174
228
  - app/services/pipeline_service/serializers/enrollment.rb
175
229
  - app/services/pipeline_service/serializers/fetcher.rb
176
230
  - app/services/pipeline_service/serializers/submission.rb
177
- - app/services/pipeline_service/serializers/unit_grades.rb
178
231
  - app/services/pipeline_service/serializers/user.rb
179
232
  - app/services/settings_service.rb
180
233
  - app/services/settings_service/api_docs.yml
@@ -197,11 +250,6 @@ files:
197
250
  - app/services/settings_service/student_assignment_repository.rb
198
251
  - app/services/settings_service/submission.rb
199
252
  - app/services/settings_service/user.rb
200
- - app/services/units_service/commands/get_unit_grades.rb
201
- - app/services/units_service/grades_calculator.rb
202
- - app/services/units_service/queries/get_category_weights.rb
203
- - app/services/units_service/queries/get_items.rb
204
- - app/services/units_service/queries/get_submissions.rb
205
253
  - app/views/layouts/canvas_shim/application.html.erb
206
254
  - config/initializers/hash.rb
207
255
  - config/initializers/string.rb
@@ -225,12 +273,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
225
273
  version: '0'
226
274
  required_rubygems_version: !ruby/object:Gem::Requirement
227
275
  requirements:
228
- - - ">"
276
+ - - ">="
229
277
  - !ruby/object:Gem::Version
230
- version: 1.3.1
278
+ version: '0'
231
279
  requirements: []
232
280
  rubyforge_project:
233
- rubygems_version: 2.7.7
281
+ rubygems_version: 2.6.14
234
282
  signing_key:
235
283
  specification_version: 4
236
284
  summary: A tool to make it easy to write code that plugs into canvas
@@ -1,24 +0,0 @@
1
- module PipelineService
2
- module Events
3
- class GradeChangedEvent
4
- def initialize args
5
- @args = args
6
- @subscription = args[:subscription]
7
- @object = args[:object]
8
- @changes = args[:changes]
9
- end
10
-
11
- def emit
12
- return unless should_trigger?
13
- @subscription.responder.call
14
- end
15
-
16
- private
17
-
18
- def should_trigger?
19
- return false unless @changes['score']
20
- @object.is_a?(PipelineService::Nouns::UnitGrades)
21
- end
22
- end
23
- end
24
- end
@@ -1,13 +0,0 @@
1
- module PipelineService
2
- module Nouns
3
- class UnitGrades
4
- attr_reader :course, :student, :id, :changes
5
- def initialize(submission)
6
- @course = submission.assignment.course
7
- @student = submission.user
8
- @id = submission.id
9
- @changes = submission.changes
10
- end
11
- end
12
- end
13
- end
@@ -1,17 +0,0 @@
1
- module PipelineService
2
- module Serializers
3
- class UnitGrades
4
- def initialize(object:)
5
- @course = object.course
6
- @student = object.student
7
- end
8
-
9
- def call
10
- UnitsService::Commands::GetUnitGrades.new(
11
- course: @course,
12
- student: @student
13
- ).call
14
- end
15
- end
16
- end
17
- end
@@ -1,40 +0,0 @@
1
- module UnitsService
2
- module Commands
3
- class GetUnitGrades
4
- def initialize(course:, student:)
5
- @course = course
6
- @student = student
7
- end
8
-
9
- def call
10
- get_submissions
11
- calculate_grades
12
- end
13
-
14
- private
15
-
16
- def get_submissions
17
- @unit_submissions = UnitsService::Queries::GetSubmissions.new(
18
- course: @course,
19
- student: @student
20
- ).query
21
- end
22
-
23
- # {
24
- # course_id: 1,
25
- # student_id: 13,
26
- # units: {
27
- # { id: 1, score: 80 },
28
- # { id: 2, grade: 83 },
29
- # { id: 3, grade: 74 },
30
- # { id: 4, grade: 56 },
31
- # { id: 5, grade: 99 },
32
- # { id: 6, grade: 12 }
33
- # }
34
- # }
35
- def calculate_grades
36
- UnitsService::GradesCalculator.new(@unit_submissions, @course).call
37
- end
38
- end
39
- end
40
- end
@@ -1,39 +0,0 @@
1
- module UnitsService
2
- class GradesCalculator
3
- def initialize unit_submissions, course
4
- @unit_submissions = unit_submissions
5
- @course = course
6
- end
7
-
8
- def call
9
- result = {}
10
-
11
- @unit_submissions.each do |unit, submissions|
12
- next if submissions.count == 0
13
- result[unit.id] = weighted_average(submissions)
14
- end
15
-
16
- result
17
- end
18
-
19
- private
20
-
21
- def weighted_average(submissions)
22
- result = {}
23
- submissions.group_by do |submission|
24
- submission.assignment.assignment_group
25
- end.each do |group, submissions|
26
- result[group.name] = [] unless result[group]
27
- average = submissions.sum(&:score).to_f / submissions.count
28
- weight = category_weights[group.name] / category_weights.values.sum
29
- result[group.name] << average * weight
30
- end
31
-
32
- result.sum { |r, weighted| weighted.sum }
33
- end
34
-
35
- def category_weights
36
- Queries::GetCategoryWeights.new(@course).query
37
- end
38
- end
39
- end
@@ -1,13 +0,0 @@
1
- module UnitsService
2
- module Queries
3
- class GetCategoryWeights
4
- def initialize(course)
5
- @course = course
6
- end
7
-
8
- def query
9
- @course.assignment_groups.map{|ag| [ag.name, ag.group_weight]}.to_h
10
- end
11
- end
12
- end
13
- end
@@ -1,24 +0,0 @@
1
- module UnitsService
2
- module Queries
3
- class GetItems
4
- def initialize(course:)
5
- @course = course
6
- @context_modules = @course.context_modules
7
- end
8
-
9
- def query
10
- result = {}
11
-
12
- @context_modules.each do |context_module|
13
- result[context_module] =
14
- context_module.content_tags.select do |ct|
15
- ct.content.present? &&
16
- ct.content.respond_to?(:submissions) &&
17
- ct.content.workflow_state == 'published'
18
- end
19
- end
20
- result
21
- end
22
- end
23
- end
24
- end
@@ -1,25 +0,0 @@
1
- module UnitsService
2
- module Queries
3
- class GetSubmissions
4
- def initialize(course:, student:)
5
- @student = student
6
- @course = course
7
- end
8
-
9
- def query
10
- result = {}
11
- units.each do |unit, items|
12
- items.each do |item|
13
- result[unit] = item.content.submissions.where(user_id: @student.id).where("excused is not true")
14
- end
15
- end
16
-
17
- result
18
- end
19
-
20
- def units
21
- GetItems.new(course: @course).query
22
- end
23
- end
24
- end
25
- end