Class: PlatformSdk::CanvasApiWrapper::Client
- Inherits:
-
Object
- Object
- PlatformSdk::CanvasApiWrapper::Client
- Defined in:
- lib/platform_sdk/canvas_api/client.rb
Overview
DataPipeline::Client
Constant Summary collapse
- PAGE_SIZE =
10
Instance Attribute Summary collapse
-
#connection ⇒ Object
readonly
Returns the value of attribute connection.
-
#host ⇒ Object
readonly
Returns the value of attribute host.
-
#multipart_connection ⇒ Object
readonly
Returns the value of attribute multipart_connection.
-
#token ⇒ Object
readonly
Returns the value of attribute token.
Instance Method Summary collapse
- #assignment(course_id:, assignment_id:) ⇒ Object
- #assignments(course_id:, module_id:) ⇒ Object
- #course_modules(course_id:) ⇒ Object
- #course_students(course_id:) ⇒ Object
- #course_users(course_id:) ⇒ Object
-
#initialize(domain:, token:) ⇒ Client
constructor
A new instance of Client.
- #module_item(course_id:, module_id:, module_item_id:) ⇒ Object
- #module_items(course_id:, module_id:) ⇒ Object
- #post_complete_quiz_submission(course_id:, quiz_id:, submission_id:, attempt:, validation_token:) ⇒ Hash
- #post_create_quiz_submission(course_id:, quiz_id:, user_id:) ⇒ Object
- #post_discussion_topic_entry(course_id:, topic_id:, user_id:, message:) ⇒ Object
-
#post_mark_module_item_done(course_id:, module_id:, module_item_id:, user_id:) ⇒ Object
Nil.
-
#post_mark_module_item_read(course_id:, module_id:, module_item_id:, user_id:) ⇒ Object
Nil.
- #put_module_prerequesites(course_id:, module_id:, prerequisite_ids:) ⇒ Object
- #put_relock_module(course_id:, module_id:) ⇒ Object
- #quiz(course_id:, quiz_id:) ⇒ Object
- #quiz_submissions(course_id:, quiz_id:, user_id:) ⇒ Array
- #submissions(course_id:, assignment_id:) ⇒ Object
- #update_submission_excused(course_id:, assignment_id:, user_id:) ⇒ Object
- #update_submission_excused_with_comment(course_id:, assignment_id:, user_id:, comment:) ⇒ Object
- #user_module_item(course_id:, module_id:, module_item_id:, user_id:) ⇒ Object
- #user_module_items(course_id:, module_id:, user_id:) ⇒ Object
Constructor Details
#initialize(domain:, token:) ⇒ Client
Returns a new instance of Client.
17 18 19 20 21 22 23 24 25 |
# File 'lib/platform_sdk/canvas_api/client.rb', line 17 def initialize(domain:, token:) @host = "https://#{domain}" @token = token @connection = Faraday.new(url: host, headers: { 'Authorization' => "Bearer #{token}" }) @multipart_connection = Faraday.new(url: host, headers: { 'Authorization' => "Bearer #{token}" }) do |f| f.request :multipart f.adapter :net_http end end |
Instance Attribute Details
#connection ⇒ Object (readonly)
Returns the value of attribute connection.
11 12 13 |
# File 'lib/platform_sdk/canvas_api/client.rb', line 11 def connection @connection end |
#host ⇒ Object (readonly)
Returns the value of attribute host.
11 12 13 |
# File 'lib/platform_sdk/canvas_api/client.rb', line 11 def host @host end |
#multipart_connection ⇒ Object (readonly)
Returns the value of attribute multipart_connection.
11 12 13 |
# File 'lib/platform_sdk/canvas_api/client.rb', line 11 def multipart_connection @multipart_connection end |
#token ⇒ Object (readonly)
Returns the value of attribute token.
11 12 13 |
# File 'lib/platform_sdk/canvas_api/client.rb', line 11 def token @token end |
Instance Method Details
#assignment(course_id:, assignment_id:) ⇒ Object
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/platform_sdk/canvas_api/client.rb', line 102 def assignment(course_id:, assignment_id:) uri = "api/v1/courses/#{course_id}/assignments/#{assignment_id}" response = @connection.get(uri) handle_rate_limiting response if success?(response.status) MultiJson.load response.body, symbolize_keys: true else result = MultiJson.load response.body, symbolize_keys: true = String.new result[:errors].each do |error| << "#{error[:message]} " end raise "Error getting quiz submissions#{}" end end |
#assignments(course_id:, module_id:) ⇒ Object
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/platform_sdk/canvas_api/client.rb', line 85 def assignments(course_id:, module_id:) response = @connection.get("/api/v1/courses/#{course_id}/modules/#{module_id}/items?per_page=#{PAGE_SIZE}") handle_rate_limiting response if success?(response.status) assignments = paginated_items headers: response.headers, initial_response: response.body assignments.select { |item| item[:type] == 'Assignment' } else result = MultiJson.load response.body, symbolize_keys: true = String.new result[:errors].each do |error| << "#{error[:message]} " end raise "Error getting assignments: #{}" end end |
#course_modules(course_id:) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/platform_sdk/canvas_api/client.rb', line 29 def course_modules(course_id:) response = @connection.get("/api/v1/courses/#{course_id}/modules") handle_rate_limiting response if success?(response.status) paginated_items headers: response.headers, initial_response: response.body else result = MultiJson.load response.body, symbolize_keys: true = String.new result[:errors].each do |error| << "#{error[:message]} " end raise "Error getting course modules: #{}" end end |
#course_students(course_id:) ⇒ Object
217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 |
# File 'lib/platform_sdk/canvas_api/client.rb', line 217 def course_students(course_id:) uri = "/api/v1/courses/#{course_id}/students?per_page=#{PAGE_SIZE}" response = @connection.get(uri) handle_rate_limiting response if success?(response.status) paginated_items headers: response.headers, initial_response: response.body else result = MultiJson.load response.body, symbolize_keys: true = String.new result[:errors].each do |error| << "#{error[:message]} " end raise "Error getting course students: #{}" end end |
#course_users(course_id:) ⇒ Object
234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 |
# File 'lib/platform_sdk/canvas_api/client.rb', line 234 def course_users(course_id:) uri = "/api/v1/courses/#{course_id}/users?per_page=#{PAGE_SIZE}" response = @connection.get(uri) handle_rate_limiting response if success?(response.status) paginated_items headers: response.headers, initial_response: response.body else result = MultiJson.load response.body, symbolize_keys: true = String.new result[:errors].each do |error| << "#{error[:message]} " end raise "Error getting course users: #{}" end end |
#module_item(course_id:, module_id:, module_item_id:) ⇒ Object
121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
# File 'lib/platform_sdk/canvas_api/client.rb', line 121 def module_item(course_id:, module_id:, module_item_id:) response = @connection.get("/api/v1/courses/#{course_id}/modules/#{module_id}/items/#{module_item_id}") handle_rate_limiting response if success?(response.status) MultiJson.load response.body, symbolize_keys: true else result = MultiJson.load response.body, symbolize_keys: true = String.new result[:errors].each do |error| << "#{error[:message]} " end raise "Error getting module item: #{}" end end |
#module_items(course_id:, module_id:) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/platform_sdk/canvas_api/client.rb', line 47 def module_items(course_id:, module_id:) response = @connection.get("/api/v1/courses/#{course_id}/modules/#{module_id}/items?per_page=#{PAGE_SIZE}") handle_rate_limiting response if success?(response.status) paginated_items headers: response.headers, initial_response: response.body else result = MultiJson.load response.body, symbolize_keys: true = String.new result[:errors].each do |error| << "#{error[:message]} " end raise "Error getting module items: #{}" end end |
#post_complete_quiz_submission(course_id:, quiz_id:, submission_id:, attempt:, validation_token:) ⇒ Hash
308 309 310 311 312 313 314 315 316 317 318 319 320 |
# File 'lib/platform_sdk/canvas_api/client.rb', line 308 def post_complete_quiz_submission(course_id:, quiz_id:, submission_id:, attempt:, validation_token:) uri = "api/v1/courses/#{course_id}/quizzes/#{quiz_id}/submissions/#{submission_id}/complete" response = @connection.post(uri) do |req| req.headers['Content-Type'] = 'application/json' req.body = { attempt:, validation_token: }.to_json end handle_rate_limiting response if success?(response.status) MultiJson.load response.body, symbolize_keys: true else handle_post_response_errors(response, 'Error completing quiz submission') end end |
#post_create_quiz_submission(course_id:, quiz_id:, user_id:) ⇒ Object
291 292 293 294 295 296 297 298 299 300 |
# File 'lib/platform_sdk/canvas_api/client.rb', line 291 def post_create_quiz_submission(course_id:, quiz_id:, user_id:) uri = "api/v1/courses/#{course_id}/quizzes/#{quiz_id}/submissions?as_user_id=#{user_id}" response = @connection.post(uri) handle_rate_limiting response if success?(response.status) MultiJson.load response.body, symbolize_keys: true else handle_post_response_errors(response, 'Error creating quiz submission') end end |
#post_discussion_topic_entry(course_id:, topic_id:, user_id:, message:) ⇒ Object
354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 |
# File 'lib/platform_sdk/canvas_api/client.rb', line 354 def post_discussion_topic_entry(course_id:, topic_id:, user_id:, message:) uri = "api/v1/courses/#{course_id}/discussion_topics/#{topic_id}/entries?as_user_id=#{user_id}" response = @connection.post(uri) do |req| req.headers['Content-Type'] = 'application/json' req.body = { 'message': .to_s }.to_json end handle_rate_limiting response if success?(response.status) MultiJson.load response.body, symbolize_keys: true else result = MultiJson.load response.body, symbolize_keys: true = String.new result[:errors]&.each do |error| << "#{error[:message]} " end raise "Error posting a reply: #{}" end end |
#post_mark_module_item_done(course_id:, module_id:, module_item_id:, user_id:) ⇒ Object
Returns nil.
343 344 345 346 347 348 349 350 351 352 |
# File 'lib/platform_sdk/canvas_api/client.rb', line 343 def post_mark_module_item_done(course_id:, module_id:, module_item_id:, user_id:) uri = "api/v1/courses/#{course_id}/modules/#{module_id}/items/#{module_item_id}/done?as_user_id=#{user_id}" response = @connection.post(uri) handle_rate_limiting response if success?(response.status) MultiJson.load response.body, symbolize_keys: true else handle_post_response_errors(response, 'Error marking module item done') end end |
#post_mark_module_item_read(course_id:, module_id:, module_item_id:, user_id:) ⇒ Object
Returns nil.
327 328 329 330 331 332 333 334 335 336 |
# File 'lib/platform_sdk/canvas_api/client.rb', line 327 def post_mark_module_item_read(course_id:, module_id:, module_item_id:, user_id:) uri = "api/v1/courses/#{course_id}/modules/#{module_id}/items/#{module_item_id}/mark_read?as_user_id=#{user_id}" response = @connection.post(uri) handle_rate_limiting response if success?(response.status) MultiJson.load response.body, symbolize_keys: true else handle_post_response_errors(response, 'Error marking module items read') end end |
#put_module_prerequesites(course_id:, module_id:, prerequisite_ids:) ⇒ Object
Note:
prerequisite_ids should be a valid module_id, sending and empty array removes all prerequisites.
392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 |
# File 'lib/platform_sdk/canvas_api/client.rb', line 392 def put_module_prerequesites(course_id:, module_id:, prerequisite_ids:) uri = "/api/v1/courses/#{course_id}/modules/#{module_id}" response = @multipart_connection.put(uri) do |req| req.headers['Content-Type'] = 'application/x-www-form-urlencoded' req.body = { 'module[prerequisite_module_ids]' => prerequisite_ids } end handle_rate_limiting response result = MultiJson.load response.body, symbolize_keys: true if success?(response.status) result else = String.new result[:errors]&.each do |error| << "#{error[:message]} " end raise "Error updating module prerequisite: #{}" end end |
#put_relock_module(course_id:, module_id:) ⇒ Object
375 376 377 378 379 380 381 382 383 384 385 386 |
# File 'lib/platform_sdk/canvas_api/client.rb', line 375 def put_relock_module(course_id:, module_id:) uri = "api/v1/courses/#{course_id}/modules/#{module_id}/relock" response = @connection.put(uri) result = MultiJson.load response.body, symbolize_keys: true handle_rate_limiting response if success?(response.status) result else = parse_response_errors(result:, message: 'Error re-locking module') raise CanvasClientError, end end |
#quiz(course_id:, quiz_id:) ⇒ Object
252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 |
# File 'lib/platform_sdk/canvas_api/client.rb', line 252 def quiz(course_id:, quiz_id:) uri = "/api/v1/courses/#{course_id}/quizzes/#{quiz_id}" response = @connection.get(uri) handle_rate_limiting response if success?(response.status) MultiJson.load response.body, symbolize_keys: true else result = MultiJson.load response.body, symbolize_keys: true = String.new result[:errors].each do |error| << "#{error[:message]} " end raise "Error getting quiz: #{}" end end |
#quiz_submissions(course_id:, quiz_id:, user_id:) ⇒ Array
272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 |
# File 'lib/platform_sdk/canvas_api/client.rb', line 272 def quiz_submissions(course_id:, quiz_id:, user_id:) uri = "api/v1/courses/#{course_id}/quizzes/#{quiz_id}/submissions?user=#{user_id}&per_page=#{PAGE_SIZE}" response = @connection.get(uri) handle_rate_limiting response if success?(response.status) paginated_items headers: response.headers, initial_response: response.body else result = MultiJson.load response.body, symbolize_keys: true = String.new result[:errors].each do |error| << "#{error[:message]} " end raise "Error getting quiz submissions#{}" end end |
#submissions(course_id:, assignment_id:) ⇒ Object
153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
# File 'lib/platform_sdk/canvas_api/client.rb', line 153 def submissions(course_id:, assignment_id:) response = @connection.get("/api/v1/courses/#{course_id}/assignments/#{assignment_id}/submissions/") handle_rate_limiting response if success?(response.status) paginated_items headers: response.headers, initial_response: response.body else result = MultiJson.load response.body, symbolize_keys: true = String.new result[:errors].each do |error| << "#{error[:message]} " end raise "Error getting submissions: #{}" end end |
#update_submission_excused(course_id:, assignment_id:, user_id:) ⇒ Object
168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 |
# File 'lib/platform_sdk/canvas_api/client.rb', line 168 def update_submission_excused(course_id:, assignment_id:, user_id:) uri = "/api/v1/courses/#{course_id}/assignments/#{assignment_id}/submissions/#{user_id}" response = @connection.put(uri) do |req| req.headers["Content-Type"] = "application/json" req.body = { submission: { excuse: true } }.to_json end handle_rate_limiting response if success?(response.status) MultiJson.load response.body, symbolize_keys: true else result = MultiJson.load response.body, symbolize_keys: true = String.new result[:errors].each do |error| << "#{error[:message]} " end raise "Error update submissions to excused: #{}" end end |
#update_submission_excused_with_comment(course_id:, assignment_id:, user_id:, comment:) ⇒ Object
191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 |
# File 'lib/platform_sdk/canvas_api/client.rb', line 191 def update_submission_excused_with_comment(course_id:, assignment_id:, user_id:, comment:) uri = "/api/v1/courses/#{course_id}/assignments/#{assignment_id}/submissions/#{user_id}" response = @connection.put(uri) do |req| req.headers['Content-Type'] = 'application/json' req.body = { 'comment': { 'text_comment': comment }, 'submission': { 'excuse': true } }.to_json end if success?(response.status) MultiJson.load response.body, symbolize_keys: true else result = MultiJson.load response.body, symbolize_keys: true = String.new result[:errors].each do |error| << "#{error[:message]} " end raise "Error update submissions to excused: #{}" end end |
#user_module_item(course_id:, module_id:, module_item_id:, user_id:) ⇒ Object
136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
# File 'lib/platform_sdk/canvas_api/client.rb', line 136 def user_module_item(course_id:, module_id:, module_item_id:, user_id:) response = @connection.get("/api/v1/courses/#{course_id}/modules/#{module_id}/items/#{module_item_id}?as_user_id=#{user_id}") handle_rate_limiting response if success?(response.status) MultiJson.load response.body, symbolize_keys: true else result = MultiJson.load response.body, symbolize_keys: true = String.new result[:errors].each do |error| << "#{error[:message]} " end raise "Error getting module item: #{}" end end |
#user_module_items(course_id:, module_id:, user_id:) ⇒ Object
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/platform_sdk/canvas_api/client.rb', line 66 def user_module_items(course_id:, module_id:, user_id:) uri = "/api/v1/courses/#{course_id}/modules/#{module_id}/items?as_user_id=#{user_id}&per_page=#{PAGE_SIZE}" response = @connection.get(uri) handle_rate_limiting response if success?(response.status) paginated_items headers: response.headers, initial_response: response.body else result = MultiJson.load response.body, symbolize_keys: true = String.new result[:errors].each do |error| << "#{error[:message]} " end raise "Error getting module items: #{}" end end |