Class: AtomicLti::Services::LineItems
- Defined in:
- app/lib/atomic_lti/services/line_items.rb
Overview
Canvas API docs canvas.instructure.com/doc/api/line_items.html
Class Method Summary collapse
- .can_manage_line_items?(id_token_decoded) ⇒ Boolean
- .can_query_line_items?(id_token_decoded) ⇒ Boolean
-
.generate(label:, max_score:, start_date_time: nil, end_date_time: nil, resource_id: nil, tag: nil, resource_link_id: nil, external_tool_url: nil, submission_review: nil) ⇒ Object
Helper method to generate a default set of attributes.
Instance Method Summary collapse
- #create(attrs = nil) ⇒ Object
- #delete(line_item_url) ⇒ Object
- #endpoint(id_token_decoded) ⇒ Object
- #generate(attrs) ⇒ Object
-
#list(query = {}, page_url: nil) ⇒ Object
List line items Canvas: canvas.beta.instructure.com/doc/api/line_items.html#method.lti/ims/line_items.index.
- #list_all(query = {}) ⇒ Object
- #scopes ⇒ Object
-
#show(line_item_url) ⇒ Object
Get a specific line item canvas.beta.instructure.com/doc/api/line_items.html#method.lti/ims/line_items.show.
-
#update(line_item_url, attrs) ⇒ Object
Update a line item Canvas: canvas.beta.instructure.com/doc/api/line_items.html#method.lti/ims/line_items.update.
Methods inherited from Base
#get_next_url, #headers, #initialize, #logged_service_call, #service_delete, #service_get, #service_post, #service_put
Constructor Details
This class inherits a constructor from AtomicLti::Services::Base
Class Method Details
.can_manage_line_items?(id_token_decoded) ⇒ Boolean
54 55 56 57 |
# File 'app/lib/atomic_lti/services/line_items.rb', line 54 def self.can_manage_line_items?(id_token_decoded) id_token_decoded.dig(AtomicLti::Definitions::AGS_CLAIM, "scope")&. include?(AtomicLti::Definitions::AGS_SCOPE_LINE_ITEM) end |
.can_query_line_items?(id_token_decoded) ⇒ Boolean
59 60 61 62 63 |
# File 'app/lib/atomic_lti/services/line_items.rb', line 59 def self.can_query_line_items?(id_token_decoded) can_manage_line_items?(id_token_decoded) || id_token_decoded.dig(AtomicLti::Definitions::AGS_CLAIM, "scope"). include?(AtomicLti::Definitions::AGS_SCOPE_LINE_ITEM_READONLY) end |
.generate(label:, max_score:, start_date_time: nil, end_date_time: nil, resource_id: nil, tag: nil, resource_link_id: nil, external_tool_url: nil, submission_review: nil) ⇒ Object
Helper method to generate a default set of attributes
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'app/lib/atomic_lti/services/line_items.rb', line 18 def self.generate( label:, max_score:, start_date_time: nil, end_date_time: nil, resource_id: nil, tag: nil, resource_link_id: nil, external_tool_url: nil, submission_review: nil ) attrs = { scoreMaximum: max_score, label: label, resourceId: resource_id, tag: tag, startDateTime: start_date_time, endDateTime: end_date_time, resourceLinkId: resource_link_id, }.compact if external_tool_url attrs[AtomicLti::Definitions::CANVAS_SUBMISSION_TYPE] = { type: "external_tool", external_tool_url: external_tool_url, } end if submission_review attrs[:submissionReview] = submission_review end attrs end |
Instance Method Details
#create(attrs = nil) ⇒ Object
99 100 101 102 103 |
# File 'app/lib/atomic_lti/services/line_items.rb', line 99 def create(attrs = nil) content_type = { "Content-Type" => "application/vnd.ims.lis.v2.lineitem+json" } response, = service_post(endpoint(@id_token_decoded), body: JSON.dump(attrs), headers: headers(content_type)) response end |
#delete(line_item_url) ⇒ Object
113 114 115 116 |
# File 'app/lib/atomic_lti/services/line_items.rb', line 113 def delete(line_item_url) response, = service_delete(line_item_url, headers: headers) response end |
#endpoint(id_token_decoded) ⇒ Object
6 7 8 9 10 11 |
# File 'app/lib/atomic_lti/services/line_items.rb', line 6 def endpoint(id_token_decoded) url = id_token_decoded.dig(AtomicLti::Definitions::AGS_CLAIM, "lineitems") raise AtomicLti::Exceptions::LineItemError, "Unable to access line items" unless url.present? url end |
#generate(attrs) ⇒ Object
50 51 52 |
# File 'app/lib/atomic_lti/services/line_items.rb', line 50 def generate(attrs) self.class.generate(**attrs) end |
#list(query = {}, page_url: nil) ⇒ Object
List line items Canvas: canvas.beta.instructure.com/doc/api/line_items.html#method.lti/ims/line_items.index
67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'app/lib/atomic_lti/services/line_items.rb', line 67 def list(query = {}, page_url: nil) url = if page_url.present? page_url else uri = Addressable::URI.parse(endpoint(@id_token_decoded)) uri.query_values = (uri.query_values || {}).merge(query) uri.to_str end accept = { "Accept" => "application/vnd.ims.lis.v2.lineitemcontainer+json" } response, = service_get(url, headers: headers(accept)) response end |
#list_all(query = {}) ⇒ Object
81 82 83 84 85 86 |
# File 'app/lib/atomic_lti/services/line_items.rb', line 81 def list_all(query = {}) AtomicLti::PagingHelper.paginate_request do |next_link| result_page = list(query, page_url: next_link) [JSON.parse(result_page.body), get_next_url(result_page)] end end |
#scopes ⇒ Object
13 14 15 |
# File 'app/lib/atomic_lti/services/line_items.rb', line 13 def scopes @id_token_decoded&.dig(AtomicLti::Definitions::AGS_CLAIM, "scope") end |
#show(line_item_url) ⇒ Object
Get a specific line item canvas.beta.instructure.com/doc/api/line_items.html#method.lti/ims/line_items.show
90 91 92 93 94 |
# File 'app/lib/atomic_lti/services/line_items.rb', line 90 def show(line_item_url) accept = { "Accept" => "application/vnd.ims.lis.v2.lineitem+json" } response, = service_get(line_item_url, headers: headers(accept)) response end |
#update(line_item_url, attrs) ⇒ Object
Update a line item Canvas: canvas.beta.instructure.com/doc/api/line_items.html#method.lti/ims/line_items.update
107 108 109 110 111 |
# File 'app/lib/atomic_lti/services/line_items.rb', line 107 def update(line_item_url, attrs) content_type = { "Content-Type" => "application/vnd.ims.lis.v2.lineitem+json" } response, = service_put(line_item_url, body: JSON.dump(attrs), headers: headers(content_type)) response end |