qalam_ims_lti 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Changelog.txt +0 -0
- data/LICENSE.txt +22 -0
- data/README.md +39 -0
- data/lib/ims/lis/context_type/handles.rb +10 -0
- data/lib/ims/lis/context_type/urns.rb +10 -0
- data/lib/ims/lis/roles/context/handles.rb +60 -0
- data/lib/ims/lis/roles/context/urns.rb +60 -0
- data/lib/ims/lis/roles/institution/handles.rb +22 -0
- data/lib/ims/lis/roles/institution/urns.rb +22 -0
- data/lib/ims/lis/roles/system/handles.rb +15 -0
- data/lib/ims/lis/roles/system/urns.rb +15 -0
- data/lib/ims/lis/statuses/simple_names.rb +9 -0
- data/lib/ims/lis/statuses/uris.rb +9 -0
- data/lib/ims/lis.rb +14 -0
- data/lib/ims/lti/converters/time_json_converter.rb +13 -0
- data/lib/ims/lti/converters.rb +5 -0
- data/lib/ims/lti/deprecated_role_checks.rb +52 -0
- data/lib/ims/lti/errors/authentication_failed_error.rb +11 -0
- data/lib/ims/lti/errors/invalid_lti_config_error.rb +4 -0
- data/lib/ims/lti/errors/invalid_tool_consumer_profile.rb +4 -0
- data/lib/ims/lti/errors/tool_proxy_registration_error.rb +15 -0
- data/lib/ims/lti/errors.rb +8 -0
- data/lib/ims/lti/extensions/canvas.rb +125 -0
- data/lib/ims/lti/extensions/content.rb +209 -0
- data/lib/ims/lti/extensions/outcome_data.rb +216 -0
- data/lib/ims/lti/extensions.rb +45 -0
- data/lib/ims/lti/launch_params.rb +166 -0
- data/lib/ims/lti/models/base_url_choice.rb +15 -0
- data/lib/ims/lti/models/base_url_selector.rb +5 -0
- data/lib/ims/lti/models/contact.rb +5 -0
- data/lib/ims/lti/models/content_item_container.rb +14 -0
- data/lib/ims/lti/models/content_item_placement.rb +20 -0
- data/lib/ims/lti/models/content_items/content_item.rb +32 -0
- data/lib/ims/lti/models/content_items/file_item.rb +15 -0
- data/lib/ims/lti/models/content_items/lti_link_item.rb +14 -0
- data/lib/ims/lti/models/content_items.rb +7 -0
- data/lib/ims/lti/models/icon_endpoint.rb +5 -0
- data/lib/ims/lti/models/icon_info.rb +6 -0
- data/lib/ims/lti/models/image.rb +7 -0
- data/lib/ims/lti/models/localized_name.rb +12 -0
- data/lib/ims/lti/models/localized_text.rb +12 -0
- data/lib/ims/lti/models/lti_model.rb +227 -0
- data/lib/ims/lti/models/membership_service/agent.rb +11 -0
- data/lib/ims/lti/models/membership_service/container.rb +11 -0
- data/lib/ims/lti/models/membership_service/context.rb +11 -0
- data/lib/ims/lti/models/membership_service/lis_membership_container.rb +13 -0
- data/lib/ims/lti/models/membership_service/lis_person.rb +14 -0
- data/lib/ims/lti/models/membership_service/membership.rb +14 -0
- data/lib/ims/lti/models/membership_service/organization.rb +14 -0
- data/lib/ims/lti/models/membership_service/page.rb +16 -0
- data/lib/ims/lti/models/membership_service/person.rb +13 -0
- data/lib/ims/lti/models/membership_service.rb +16 -0
- data/lib/ims/lti/models/message_handler.rb +14 -0
- data/lib/ims/lti/models/messages/basic_lti_launch_request.rb +24 -0
- data/lib/ims/lti/models/messages/content_item_selection.rb +32 -0
- data/lib/ims/lti/models/messages/content_item_selection_request.rb +26 -0
- data/lib/ims/lti/models/messages/message.rb +222 -0
- data/lib/ims/lti/models/messages/registration_request.rb +20 -0
- data/lib/ims/lti/models/messages/request_message.rb +12 -0
- data/lib/ims/lti/models/messages/tool_proxy_update_request.rb +15 -0
- data/lib/ims/lti/models/messages.rb +11 -0
- data/lib/ims/lti/models/parameter.rb +28 -0
- data/lib/ims/lti/models/product_family.rb +8 -0
- data/lib/ims/lti/models/product_info.rb +26 -0
- data/lib/ims/lti/models/product_instance.rb +10 -0
- data/lib/ims/lti/models/resource_handler.rb +22 -0
- data/lib/ims/lti/models/resource_type.rb +6 -0
- data/lib/ims/lti/models/rest_service.rb +30 -0
- data/lib/ims/lti/models/rest_service_profile.rb +15 -0
- data/lib/ims/lti/models/security_contract.rb +21 -0
- data/lib/ims/lti/models/security_profile.rb +10 -0
- data/lib/ims/lti/models/serializable.rb +12 -0
- data/lib/ims/lti/models/service_owner.rb +26 -0
- data/lib/ims/lti/models/service_provider.rb +11 -0
- data/lib/ims/lti/models/tool_consumer_profile.rb +45 -0
- data/lib/ims/lti/models/tool_profile.rb +35 -0
- data/lib/ims/lti/models/tool_proxy.rb +21 -0
- data/lib/ims/lti/models/tool_setting.rb +12 -0
- data/lib/ims/lti/models/tool_setting_container.rb +14 -0
- data/lib/ims/lti/models/vendor.rb +28 -0
- data/lib/ims/lti/models.rb +38 -0
- data/lib/ims/lti/outcome_request.rb +225 -0
- data/lib/ims/lti/outcome_response.rb +166 -0
- data/lib/ims/lti/request_validator.rb +56 -0
- data/lib/ims/lti/role_checks.rb +101 -0
- data/lib/ims/lti/serializers/base.rb +125 -0
- data/lib/ims/lti/serializers/membership_service/agent_serializer.rb +5 -0
- data/lib/ims/lti/serializers/membership_service/container_serializer.rb +6 -0
- data/lib/ims/lti/serializers/membership_service/context_serializer.rb +9 -0
- data/lib/ims/lti/serializers/membership_service/lis_membership_container_serializer.rb +9 -0
- data/lib/ims/lti/serializers/membership_service/lis_person_serializer.rb +12 -0
- data/lib/ims/lti/serializers/membership_service/membership_serializer.rb +7 -0
- data/lib/ims/lti/serializers/membership_service/organization_serializer.rb +8 -0
- data/lib/ims/lti/serializers/membership_service/page_serializer.rb +10 -0
- data/lib/ims/lti/serializers/membership_service/person_serializer.rb +8 -0
- data/lib/ims/lti/serializers/membership_service.rb +13 -0
- data/lib/ims/lti/serializers.rb +6 -0
- data/lib/ims/lti/services/authentication_service.rb +67 -0
- data/lib/ims/lti/services/message_authenticator.rb +80 -0
- data/lib/ims/lti/services/oauth2_client.rb +18 -0
- data/lib/ims/lti/services/tool_config.rb +223 -0
- data/lib/ims/lti/services/tool_consumer_profile_service.rb +16 -0
- data/lib/ims/lti/services/tool_proxy_registration_service.rb +84 -0
- data/lib/ims/lti/services/tool_proxy_validator.rb +182 -0
- data/lib/ims/lti/services.rb +11 -0
- data/lib/ims/lti/tool_base.rb +29 -0
- data/lib/ims/lti/tool_config.rb +231 -0
- data/lib/ims/lti/tool_consumer.rb +86 -0
- data/lib/ims/lti/tool_provider.rb +143 -0
- data/lib/ims/lti/version.rb +5 -0
- data/lib/ims/lti.rb +61 -0
- data/lib/ims.rb +4 -0
- metadata +379 -0
@@ -0,0 +1,143 @@
|
|
1
|
+
module IMS::LTI
|
2
|
+
|
3
|
+
# Class for implementing an LTI Tool Provider
|
4
|
+
#
|
5
|
+
# # Initialize TP object with OAuth creds and post parameters
|
6
|
+
# provider = IMS::LTI::ToolProvider.new(consumer_key, consumer_secret, params)
|
7
|
+
#
|
8
|
+
# # Verify OAuth signature by passing the request object
|
9
|
+
# if provider.valid_request?(request)
|
10
|
+
# # success
|
11
|
+
# else
|
12
|
+
# # handle invalid OAuth
|
13
|
+
# end
|
14
|
+
#
|
15
|
+
# if provider.outcome_service?
|
16
|
+
# # ready for grade write-back
|
17
|
+
# else
|
18
|
+
# # normal tool launch without grade write-back
|
19
|
+
# end
|
20
|
+
#
|
21
|
+
# If the tool was launch as an outcome service you can POST a score to the TC.
|
22
|
+
# The POST calls all return an OutcomeResponse object which can be used to
|
23
|
+
# handle the response appropriately.
|
24
|
+
#
|
25
|
+
# # post the score to the TC, score should be a float >= 0.0 and <= 1.0
|
26
|
+
# # this returns an OutcomeResponse object
|
27
|
+
# response = provider.post_replace_result!(score)
|
28
|
+
# if response.success?
|
29
|
+
# # grade write worked
|
30
|
+
# elsif response.processing?
|
31
|
+
# elsif response.unsupported?
|
32
|
+
# else
|
33
|
+
# # failed
|
34
|
+
# end
|
35
|
+
|
36
|
+
class ToolProvider < ToolBase
|
37
|
+
# List of outcome requests made through this instance
|
38
|
+
|
39
|
+
include DeprecatedRoleChecks
|
40
|
+
include RoleChecks
|
41
|
+
attr_accessor :outcome_requests
|
42
|
+
# Message to be sent back to the ToolConsumer when the user returns
|
43
|
+
attr_accessor :lti_errormsg, :lti_errorlog, :lti_msg, :lti_log
|
44
|
+
|
45
|
+
# Create a new ToolProvider
|
46
|
+
#
|
47
|
+
# @param consumer_key [String] The OAuth consumer key
|
48
|
+
# @param consumer_secret [String] The OAuth consumer secret
|
49
|
+
# @param params [Hash] Set the launch parameters as described in LaunchParams
|
50
|
+
def initialize(consumer_key, consumer_secret, params={})
|
51
|
+
super(consumer_key, consumer_secret, params)
|
52
|
+
@outcome_requests = []
|
53
|
+
end
|
54
|
+
|
55
|
+
# Check if the request was an LTI Launch Request
|
56
|
+
def launch_request?
|
57
|
+
lti_message_type == 'basic-lti-launch-request'
|
58
|
+
end
|
59
|
+
|
60
|
+
# Check if the Tool Launch expects an Outcome Result
|
61
|
+
def outcome_service?
|
62
|
+
!!(lis_outcome_service_url && lis_result_sourcedid)
|
63
|
+
end
|
64
|
+
|
65
|
+
# Return the full, given, or family name if set
|
66
|
+
def username(default=nil)
|
67
|
+
lis_person_name_given || lis_person_name_family || lis_person_name_full || default
|
68
|
+
end
|
69
|
+
|
70
|
+
# POSTs the given score to the Tool Consumer with a replaceResult
|
71
|
+
#
|
72
|
+
# Creates a new OutcomeRequest object and stores it in @outcome_requests
|
73
|
+
#
|
74
|
+
# @return [OutcomeResponse] the response from the Tool Consumer
|
75
|
+
def post_replace_result!(score)
|
76
|
+
new_request.post_replace_result!(score)
|
77
|
+
end
|
78
|
+
|
79
|
+
# POSTs a delete request to the Tool Consumer
|
80
|
+
#
|
81
|
+
# Creates a new OutcomeRequest object and stores it in @outcome_requests
|
82
|
+
#
|
83
|
+
# @return [OutcomeResponse] the response from the Tool Consumer
|
84
|
+
def post_delete_result!
|
85
|
+
new_request.post_delete_result!
|
86
|
+
end
|
87
|
+
|
88
|
+
# POSTs the given score to the Tool Consumer with a replaceResult, the
|
89
|
+
# returned OutcomeResponse will have the score
|
90
|
+
#
|
91
|
+
# Creates a new OutcomeRequest object and stores it in @outcome_requests
|
92
|
+
#
|
93
|
+
# @return [OutcomeResponse] the response from the Tool Consumer
|
94
|
+
def post_read_result!
|
95
|
+
new_request.post_read_result!
|
96
|
+
end
|
97
|
+
|
98
|
+
# Returns the most recent OutcomeRequest
|
99
|
+
def last_outcome_request
|
100
|
+
@outcome_requests.last
|
101
|
+
end
|
102
|
+
|
103
|
+
# Convenience method for whether the last OutcomeRequest was successful
|
104
|
+
def last_outcome_success?
|
105
|
+
last_outcome_request && last_outcome_request.outcome_post_successful?
|
106
|
+
end
|
107
|
+
|
108
|
+
# If the Tool Consumer sent a URL for the user to return to this will add
|
109
|
+
# any set messages to the URL.
|
110
|
+
#
|
111
|
+
# Example:
|
112
|
+
#
|
113
|
+
# tc = IMS::LTI::tc.new
|
114
|
+
# tc.launch_presentation_return_url = "http://example.com/return"
|
115
|
+
# tc.lti_msg = "hi there"
|
116
|
+
# tc.lti_errorlog = "error happens"
|
117
|
+
#
|
118
|
+
# tc.build_return_url # => "http://example.com/return?lti_msg=hi%20there<i_errorlog=error%20happens"
|
119
|
+
def build_return_url
|
120
|
+
return nil unless launch_presentation_return_url
|
121
|
+
messages = []
|
122
|
+
%w{lti_errormsg lti_errorlog lti_msg lti_log}.each do |m|
|
123
|
+
if message = self.send(m)
|
124
|
+
messages << "#{m}=#{URI.escape(message)}"
|
125
|
+
end
|
126
|
+
end
|
127
|
+
q_string = messages.any? ? ("?" + messages.join("&")) : ''
|
128
|
+
launch_presentation_return_url + q_string
|
129
|
+
end
|
130
|
+
|
131
|
+
private
|
132
|
+
|
133
|
+
def new_request
|
134
|
+
@outcome_requests << OutcomeRequest.new(:consumer_key => @consumer_key,
|
135
|
+
:consumer_secret => @consumer_secret,
|
136
|
+
:lis_outcome_service_url => lis_outcome_service_url,
|
137
|
+
:lis_result_sourcedid =>lis_result_sourcedid)
|
138
|
+
|
139
|
+
extend_outcome_request(@outcome_requests.last)
|
140
|
+
end
|
141
|
+
|
142
|
+
end
|
143
|
+
end
|
data/lib/ims/lti.rb
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'addressable/uri'
|
2
|
+
require 'builder'
|
3
|
+
require 'faraday'
|
4
|
+
require 'faraday_middleware'
|
5
|
+
require 'json'
|
6
|
+
require 'json/jwt'
|
7
|
+
require 'rexml/document'
|
8
|
+
require 'securerandom'
|
9
|
+
require 'simple_oauth'
|
10
|
+
require 'oauth'
|
11
|
+
require 'cgi'
|
12
|
+
|
13
|
+
module IMS
|
14
|
+
module LTI
|
15
|
+
require_relative 'lti/converters'
|
16
|
+
require_relative 'lti/errors'
|
17
|
+
require_relative 'lti/models'
|
18
|
+
require_relative 'lti/serializers'
|
19
|
+
require_relative 'lti/services'
|
20
|
+
end
|
21
|
+
|
22
|
+
# The versions of LTI this library supports
|
23
|
+
VERSIONS = %w{1.0 1.1}
|
24
|
+
|
25
|
+
class InvalidLTIConfigError < StandardError
|
26
|
+
end
|
27
|
+
|
28
|
+
class XMLParseError < StandardError
|
29
|
+
end
|
30
|
+
|
31
|
+
# POST a signed oauth request with the given key/secret/data
|
32
|
+
def self.post_service_request(key, secret, url, content_type, body)
|
33
|
+
raise IMS::LTI::InvalidLTIConfigError, "" unless key && secret
|
34
|
+
|
35
|
+
consumer = OAuth::Consumer.new(key, secret)
|
36
|
+
token = OAuth::AccessToken.new(consumer)
|
37
|
+
token.post(
|
38
|
+
url,
|
39
|
+
body,
|
40
|
+
'Content-Type' => content_type
|
41
|
+
)
|
42
|
+
end
|
43
|
+
|
44
|
+
# Generates a unique identifier
|
45
|
+
def self.generate_identifier
|
46
|
+
SecureRandom.uuid
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
require 'ims/lti/extensions'
|
52
|
+
require 'ims/lti/launch_params'
|
53
|
+
require 'ims/lti/request_validator'
|
54
|
+
require 'ims/lti/tool_base'
|
55
|
+
require 'ims/lti/deprecated_role_checks'
|
56
|
+
require 'ims/lti/role_checks'
|
57
|
+
require 'ims/lti/tool_provider'
|
58
|
+
require 'ims/lti/tool_consumer'
|
59
|
+
require 'ims/lti/outcome_request'
|
60
|
+
require 'ims/lti/outcome_response'
|
61
|
+
require 'ims/lti/tool_config'
|
data/lib/ims.rb
ADDED
metadata
ADDED
@@ -0,0 +1,379 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: qalam_ims_lti
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Instructure
|
8
|
+
- Abdelhamid
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2021-08-01 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: addressable
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - "~>"
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '2.5'
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 2.5.1
|
24
|
+
type: :runtime
|
25
|
+
prerelease: false
|
26
|
+
version_requirements: !ruby/object:Gem::Requirement
|
27
|
+
requirements:
|
28
|
+
- - "~>"
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '2.5'
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 2.5.1
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: builder
|
36
|
+
requirement: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3.2'
|
41
|
+
type: :runtime
|
42
|
+
prerelease: false
|
43
|
+
version_requirements: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.2'
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: faraday
|
50
|
+
requirement: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "<"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '2.0'
|
55
|
+
type: :runtime
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "<"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: faraday_middleware
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "<"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.0'
|
69
|
+
type: :runtime
|
70
|
+
prerelease: false
|
71
|
+
version_requirements: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "<"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '2.0'
|
76
|
+
- !ruby/object:Gem::Dependency
|
77
|
+
name: json-jwt
|
78
|
+
requirement: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.7'
|
83
|
+
type: :runtime
|
84
|
+
prerelease: false
|
85
|
+
version_requirements: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1.7'
|
90
|
+
- !ruby/object:Gem::Dependency
|
91
|
+
name: oauth
|
92
|
+
requirement: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 0.4.5
|
97
|
+
- - "<"
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0.6'
|
100
|
+
type: :runtime
|
101
|
+
prerelease: false
|
102
|
+
version_requirements: !ruby/object:Gem::Requirement
|
103
|
+
requirements:
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: 0.4.5
|
107
|
+
- - "<"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0.6'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: simple_oauth
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - "~>"
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: 0.3.1
|
117
|
+
type: :runtime
|
118
|
+
prerelease: false
|
119
|
+
version_requirements: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - "~>"
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: 0.3.1
|
124
|
+
- !ruby/object:Gem::Dependency
|
125
|
+
name: byebug
|
126
|
+
requirement: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - "~>"
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '9.0'
|
131
|
+
type: :development
|
132
|
+
prerelease: false
|
133
|
+
version_requirements: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - "~>"
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: '9.0'
|
138
|
+
- !ruby/object:Gem::Dependency
|
139
|
+
name: guard
|
140
|
+
requirement: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - "~>"
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '2.13'
|
145
|
+
type: :development
|
146
|
+
prerelease: false
|
147
|
+
version_requirements: !ruby/object:Gem::Requirement
|
148
|
+
requirements:
|
149
|
+
- - "~>"
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
version: '2.13'
|
152
|
+
- !ruby/object:Gem::Dependency
|
153
|
+
name: guard-rspec
|
154
|
+
requirement: !ruby/object:Gem::Requirement
|
155
|
+
requirements:
|
156
|
+
- - "~>"
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: '4.6'
|
159
|
+
type: :development
|
160
|
+
prerelease: false
|
161
|
+
version_requirements: !ruby/object:Gem::Requirement
|
162
|
+
requirements:
|
163
|
+
- - "~>"
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '4.6'
|
166
|
+
- !ruby/object:Gem::Dependency
|
167
|
+
name: listen
|
168
|
+
requirement: !ruby/object:Gem::Requirement
|
169
|
+
requirements:
|
170
|
+
- - "~>"
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: '3.0'
|
173
|
+
type: :development
|
174
|
+
prerelease: false
|
175
|
+
version_requirements: !ruby/object:Gem::Requirement
|
176
|
+
requirements:
|
177
|
+
- - "~>"
|
178
|
+
- !ruby/object:Gem::Version
|
179
|
+
version: '3.0'
|
180
|
+
- !ruby/object:Gem::Dependency
|
181
|
+
name: pry
|
182
|
+
requirement: !ruby/object:Gem::Requirement
|
183
|
+
requirements:
|
184
|
+
- - "~>"
|
185
|
+
- !ruby/object:Gem::Version
|
186
|
+
version: '0.10'
|
187
|
+
type: :development
|
188
|
+
prerelease: false
|
189
|
+
version_requirements: !ruby/object:Gem::Requirement
|
190
|
+
requirements:
|
191
|
+
- - "~>"
|
192
|
+
- !ruby/object:Gem::Version
|
193
|
+
version: '0.10'
|
194
|
+
- !ruby/object:Gem::Dependency
|
195
|
+
name: rake
|
196
|
+
requirement: !ruby/object:Gem::Requirement
|
197
|
+
requirements:
|
198
|
+
- - "~>"
|
199
|
+
- !ruby/object:Gem::Version
|
200
|
+
version: '12.0'
|
201
|
+
type: :development
|
202
|
+
prerelease: false
|
203
|
+
version_requirements: !ruby/object:Gem::Requirement
|
204
|
+
requirements:
|
205
|
+
- - "~>"
|
206
|
+
- !ruby/object:Gem::Version
|
207
|
+
version: '12.0'
|
208
|
+
- !ruby/object:Gem::Dependency
|
209
|
+
name: rspec
|
210
|
+
requirement: !ruby/object:Gem::Requirement
|
211
|
+
requirements:
|
212
|
+
- - "~>"
|
213
|
+
- !ruby/object:Gem::Version
|
214
|
+
version: '3.2'
|
215
|
+
type: :development
|
216
|
+
prerelease: false
|
217
|
+
version_requirements: !ruby/object:Gem::Requirement
|
218
|
+
requirements:
|
219
|
+
- - "~>"
|
220
|
+
- !ruby/object:Gem::Version
|
221
|
+
version: '3.2'
|
222
|
+
- !ruby/object:Gem::Dependency
|
223
|
+
name: timecop
|
224
|
+
requirement: !ruby/object:Gem::Requirement
|
225
|
+
requirements:
|
226
|
+
- - "~>"
|
227
|
+
- !ruby/object:Gem::Version
|
228
|
+
version: '0.8'
|
229
|
+
type: :development
|
230
|
+
prerelease: false
|
231
|
+
version_requirements: !ruby/object:Gem::Requirement
|
232
|
+
requirements:
|
233
|
+
- - "~>"
|
234
|
+
- !ruby/object:Gem::Version
|
235
|
+
version: '0.8'
|
236
|
+
description:
|
237
|
+
email:
|
238
|
+
- opensource@instructure.com
|
239
|
+
- a.hamid@nezam.io
|
240
|
+
executables: []
|
241
|
+
extensions: []
|
242
|
+
extra_rdoc_files: []
|
243
|
+
files:
|
244
|
+
- Changelog.txt
|
245
|
+
- LICENSE.txt
|
246
|
+
- README.md
|
247
|
+
- lib/ims.rb
|
248
|
+
- lib/ims/lis.rb
|
249
|
+
- lib/ims/lis/context_type/handles.rb
|
250
|
+
- lib/ims/lis/context_type/urns.rb
|
251
|
+
- lib/ims/lis/roles/context/handles.rb
|
252
|
+
- lib/ims/lis/roles/context/urns.rb
|
253
|
+
- lib/ims/lis/roles/institution/handles.rb
|
254
|
+
- lib/ims/lis/roles/institution/urns.rb
|
255
|
+
- lib/ims/lis/roles/system/handles.rb
|
256
|
+
- lib/ims/lis/roles/system/urns.rb
|
257
|
+
- lib/ims/lis/statuses/simple_names.rb
|
258
|
+
- lib/ims/lis/statuses/uris.rb
|
259
|
+
- lib/ims/lti.rb
|
260
|
+
- lib/ims/lti/converters.rb
|
261
|
+
- lib/ims/lti/converters/time_json_converter.rb
|
262
|
+
- lib/ims/lti/deprecated_role_checks.rb
|
263
|
+
- lib/ims/lti/errors.rb
|
264
|
+
- lib/ims/lti/errors/authentication_failed_error.rb
|
265
|
+
- lib/ims/lti/errors/invalid_lti_config_error.rb
|
266
|
+
- lib/ims/lti/errors/invalid_tool_consumer_profile.rb
|
267
|
+
- lib/ims/lti/errors/tool_proxy_registration_error.rb
|
268
|
+
- lib/ims/lti/extensions.rb
|
269
|
+
- lib/ims/lti/extensions/canvas.rb
|
270
|
+
- lib/ims/lti/extensions/content.rb
|
271
|
+
- lib/ims/lti/extensions/outcome_data.rb
|
272
|
+
- lib/ims/lti/launch_params.rb
|
273
|
+
- lib/ims/lti/models.rb
|
274
|
+
- lib/ims/lti/models/base_url_choice.rb
|
275
|
+
- lib/ims/lti/models/base_url_selector.rb
|
276
|
+
- lib/ims/lti/models/contact.rb
|
277
|
+
- lib/ims/lti/models/content_item_container.rb
|
278
|
+
- lib/ims/lti/models/content_item_placement.rb
|
279
|
+
- lib/ims/lti/models/content_items.rb
|
280
|
+
- lib/ims/lti/models/content_items/content_item.rb
|
281
|
+
- lib/ims/lti/models/content_items/file_item.rb
|
282
|
+
- lib/ims/lti/models/content_items/lti_link_item.rb
|
283
|
+
- lib/ims/lti/models/icon_endpoint.rb
|
284
|
+
- lib/ims/lti/models/icon_info.rb
|
285
|
+
- lib/ims/lti/models/image.rb
|
286
|
+
- lib/ims/lti/models/localized_name.rb
|
287
|
+
- lib/ims/lti/models/localized_text.rb
|
288
|
+
- lib/ims/lti/models/lti_model.rb
|
289
|
+
- lib/ims/lti/models/membership_service.rb
|
290
|
+
- lib/ims/lti/models/membership_service/agent.rb
|
291
|
+
- lib/ims/lti/models/membership_service/container.rb
|
292
|
+
- lib/ims/lti/models/membership_service/context.rb
|
293
|
+
- lib/ims/lti/models/membership_service/lis_membership_container.rb
|
294
|
+
- lib/ims/lti/models/membership_service/lis_person.rb
|
295
|
+
- lib/ims/lti/models/membership_service/membership.rb
|
296
|
+
- lib/ims/lti/models/membership_service/organization.rb
|
297
|
+
- lib/ims/lti/models/membership_service/page.rb
|
298
|
+
- lib/ims/lti/models/membership_service/person.rb
|
299
|
+
- lib/ims/lti/models/message_handler.rb
|
300
|
+
- lib/ims/lti/models/messages.rb
|
301
|
+
- lib/ims/lti/models/messages/basic_lti_launch_request.rb
|
302
|
+
- lib/ims/lti/models/messages/content_item_selection.rb
|
303
|
+
- lib/ims/lti/models/messages/content_item_selection_request.rb
|
304
|
+
- lib/ims/lti/models/messages/message.rb
|
305
|
+
- lib/ims/lti/models/messages/registration_request.rb
|
306
|
+
- lib/ims/lti/models/messages/request_message.rb
|
307
|
+
- lib/ims/lti/models/messages/tool_proxy_update_request.rb
|
308
|
+
- lib/ims/lti/models/parameter.rb
|
309
|
+
- lib/ims/lti/models/product_family.rb
|
310
|
+
- lib/ims/lti/models/product_info.rb
|
311
|
+
- lib/ims/lti/models/product_instance.rb
|
312
|
+
- lib/ims/lti/models/resource_handler.rb
|
313
|
+
- lib/ims/lti/models/resource_type.rb
|
314
|
+
- lib/ims/lti/models/rest_service.rb
|
315
|
+
- lib/ims/lti/models/rest_service_profile.rb
|
316
|
+
- lib/ims/lti/models/security_contract.rb
|
317
|
+
- lib/ims/lti/models/security_profile.rb
|
318
|
+
- lib/ims/lti/models/serializable.rb
|
319
|
+
- lib/ims/lti/models/service_owner.rb
|
320
|
+
- lib/ims/lti/models/service_provider.rb
|
321
|
+
- lib/ims/lti/models/tool_consumer_profile.rb
|
322
|
+
- lib/ims/lti/models/tool_profile.rb
|
323
|
+
- lib/ims/lti/models/tool_proxy.rb
|
324
|
+
- lib/ims/lti/models/tool_setting.rb
|
325
|
+
- lib/ims/lti/models/tool_setting_container.rb
|
326
|
+
- lib/ims/lti/models/vendor.rb
|
327
|
+
- lib/ims/lti/outcome_request.rb
|
328
|
+
- lib/ims/lti/outcome_response.rb
|
329
|
+
- lib/ims/lti/request_validator.rb
|
330
|
+
- lib/ims/lti/role_checks.rb
|
331
|
+
- lib/ims/lti/serializers.rb
|
332
|
+
- lib/ims/lti/serializers/base.rb
|
333
|
+
- lib/ims/lti/serializers/membership_service.rb
|
334
|
+
- lib/ims/lti/serializers/membership_service/agent_serializer.rb
|
335
|
+
- lib/ims/lti/serializers/membership_service/container_serializer.rb
|
336
|
+
- lib/ims/lti/serializers/membership_service/context_serializer.rb
|
337
|
+
- lib/ims/lti/serializers/membership_service/lis_membership_container_serializer.rb
|
338
|
+
- lib/ims/lti/serializers/membership_service/lis_person_serializer.rb
|
339
|
+
- lib/ims/lti/serializers/membership_service/membership_serializer.rb
|
340
|
+
- lib/ims/lti/serializers/membership_service/organization_serializer.rb
|
341
|
+
- lib/ims/lti/serializers/membership_service/page_serializer.rb
|
342
|
+
- lib/ims/lti/serializers/membership_service/person_serializer.rb
|
343
|
+
- lib/ims/lti/services.rb
|
344
|
+
- lib/ims/lti/services/authentication_service.rb
|
345
|
+
- lib/ims/lti/services/message_authenticator.rb
|
346
|
+
- lib/ims/lti/services/oauth2_client.rb
|
347
|
+
- lib/ims/lti/services/tool_config.rb
|
348
|
+
- lib/ims/lti/services/tool_consumer_profile_service.rb
|
349
|
+
- lib/ims/lti/services/tool_proxy_registration_service.rb
|
350
|
+
- lib/ims/lti/services/tool_proxy_validator.rb
|
351
|
+
- lib/ims/lti/tool_base.rb
|
352
|
+
- lib/ims/lti/tool_config.rb
|
353
|
+
- lib/ims/lti/tool_consumer.rb
|
354
|
+
- lib/ims/lti/tool_provider.rb
|
355
|
+
- lib/ims/lti/version.rb
|
356
|
+
homepage: http://github.com/ahmedhamid13/qalam_ims_lti
|
357
|
+
licenses:
|
358
|
+
- MIT
|
359
|
+
metadata: {}
|
360
|
+
post_install_message:
|
361
|
+
rdoc_options: []
|
362
|
+
require_paths:
|
363
|
+
- lib
|
364
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
365
|
+
requirements:
|
366
|
+
- - ">="
|
367
|
+
- !ruby/object:Gem::Version
|
368
|
+
version: '0'
|
369
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
370
|
+
requirements:
|
371
|
+
- - ">="
|
372
|
+
- !ruby/object:Gem::Version
|
373
|
+
version: '0'
|
374
|
+
requirements: []
|
375
|
+
rubygems_version: 3.2.21
|
376
|
+
signing_key:
|
377
|
+
specification_version: 4
|
378
|
+
summary: Ruby library for creating IMS LTI tool providers and consumers
|
379
|
+
test_files: []
|