panda_pal 3.1.4 → 3.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5151e80c3e03b0e17390bcd3c84feda6f9a22846
4
- data.tar.gz: a092fda80b1baf5f034785b17554068f64579bcd
3
+ metadata.gz: f3df9fdf70cde120c96b5c6d58580bfa3eac730a
4
+ data.tar.gz: a12fae868bf6809b3c58f67dea9f17daa3f48527
5
5
  SHA512:
6
- metadata.gz: 6daaa931198bbaf296dd57b8c98912969884c3b869a9596cbd8e8f854ccf6b61c6b87348807c38c90ff37438f5db0d187abb1b07dd43dae9ab9d2bac6a82236b
7
- data.tar.gz: 38bcf161b7e9ab36b7b972e154d5b1b5e6c13f5a7365d751c255fbb1dbae4b74d79683492571b344e06604e7ee4077e68122b3cd4410a6434c7667ef4131f8c4
6
+ metadata.gz: 36c1f80a58381ff37585ffbd304c2f1fe6d661e97ba4e5d3c8dc953b5daf450e6e05879ab00efd0bdc25b404a36dac42bcdbf1529510b744931c422ae5e87cdf
7
+ data.tar.gz: ea225e44fb0afa53fed6a4d5d5a258a23e5a062e3e7e16edca1978fbe2f31bc425b4b6d62440c697a078963d70363d2bfa6feaa4e5f6666f7472f4121bfc2ed6
@@ -4,63 +4,25 @@ module PandaPal
4
4
  class LtiController < ApplicationController
5
5
 
6
6
  def tool_config
7
- lti_options = PandaPal.lti_options
8
- lti_properties = PandaPal.lti_properties
9
- lti_nav = PandaPal.lti_paths
10
- lti_environments = PandaPal.lti_environments
11
- lti_custom_params = PandaPal.lti_custom_params
12
7
 
13
- if lti_environments.empty?
8
+ if PandaPal.lti_environments.empty?
14
9
  render plain: 'Domains must be set in lti_environments'
15
10
  return
16
11
  end
17
-
18
- platform = lti_options.delete(:platform) || 'canvas.instructure.com'
19
- host = "#{request.scheme}://#{request.host_with_port}"
20
- ims_lti_config = {title: lti_options[:title]}
21
- if lti_options[:secure_launch_url].present? # Assumes full URL is provided
22
- ims_lti_config[:secure_launch_url] = lti_options[:secure_launch_url]
23
- elsif lti_options[:secure_launch_path].present? # Assumes path is provided
24
- ims_lti_config[:secure_launch_url] = "#{host}#{lti_options[:secure_launch_path]}"
25
- elsif lti_options[:launch_url].present? # Assumes full URL is provided
26
- ims_lti_config[:launch_url] = lti_options[:launch_url]
27
- elsif lti_options[:launch_path].present? # Assumes path is provided
28
- ims_lti_config[:launch_url] = "#{host}#{lti_options[:launch_path]}"
29
- else
30
- ims_lti_config[:launch_url] = host
31
- end
32
- tc = IMS::LTI::Services::ToolConfig.new(ims_lti_config)
33
- tc.set_ext_param(platform, :domain, request.host) unless lti_properties.has_key?(:domain)
34
- tc.set_ext_param(platform, :privacy_level, 'public') unless lti_properties.has_key?(:public)
35
- lti_properties.each do |k, v|
36
- tc.set_ext_param(platform, k, v)
37
- end
38
- lti_custom_params.each do |k, v|
39
- tc.set_custom_param k, v
40
- end
41
- if lti_options.has_key?(:custom_fields)
42
- tc.set_ext_param(platform, :custom_fields, lti_options[:custom_fields])
43
- lti_options[:custom_fields].each do |k, v|
44
- tc.set_ext_param(platform, k, v)
45
- end
12
+ platform = PandaPal.lti_options.delete(:platform) || 'canvas.instructure.com'
13
+ case platform
14
+ when 'canvas.instructure.com'
15
+ xml_config = LtiXml::CanvasPlatform.new(platform, request, main_app)
16
+ when 'bridgeapp.com'
17
+ xml_config = LtiXml::BridgePlatform.new(platform, request, main_app)
18
+ else
19
+ render plain: 'platform must be set under lti_options'
20
+ return
46
21
  end
47
22
 
48
- lti_nav.each do |k, v|
49
- tc.set_ext_param(platform, k.to_sym, ext_params(v))
50
- end
51
-
52
- tc.set_ext_param(platform, :environments, lti_environments)
53
23
 
54
- #strip the launch url
55
- xml = tc.to_xml
56
- xml = xml.sub(/<blti:launch_url>.*<\/blti:launch_url>/, '') if lti_options[:launch_url] === false
57
- render xml: xml
24
+ render xml: xml_config.xml
58
25
  end
59
26
 
60
- def ext_params(options)
61
- url = options.delete(:url)
62
- options[:url] = main_app.send([url, '_url'].join)
63
- options
64
- end
65
27
  end
66
28
  end
@@ -0,0 +1,94 @@
1
+ class LtiXml::BasePlatform
2
+
3
+ attr_accessor :request, :host, :platform, :main_app
4
+
5
+ def initialize(platform, request, main_app)
6
+ @request = request
7
+ @host = "#{request.scheme}://#{request.host_with_port}"
8
+ @main_app = main_app
9
+ @platform = platform
10
+ end
11
+
12
+ # Override one of the following formatter methods in your individual platform class, or if you must, you can override
13
+ # the whole xml method and do it all custom.
14
+ def xml
15
+ ims_tool_config
16
+ add_domain
17
+ add_privacy_level
18
+ add_lti_properties
19
+ add_lti_custom_params
20
+ add_lti_options
21
+ add_lti_nav
22
+ add_environments
23
+
24
+ #strip the launch url
25
+ xml = @tc.to_xml
26
+ xml = xml.sub(/<blti:launch_url>.*<\/blti:launch_url>/, '') if PandaPal.lti_options[:launch_url] === false
27
+
28
+ return xml
29
+ end
30
+
31
+ private
32
+
33
+ def ims_tool_config
34
+ ims_lti_config = {title: PandaPal.lti_options[:title]}
35
+ if PandaPal.lti_options[:secure_launch_url].present? # Assumes full URL is provided
36
+ ims_lti_config[:secure_launch_url] = PandaPal.lti_options[:secure_launch_url]
37
+ elsif PandaPal.lti_options[:secure_launch_path].present? # Assumes path is provided
38
+ ims_lti_config[:secure_launch_url] = "#{host}#{PandaPal.lti_options[:secure_launch_path]}"
39
+ elsif PandaPal.lti_options[:launch_url].present? # Assumes full URL is provided
40
+ ims_lti_config[:launch_url] = PandaPal.lti_options[:launch_url]
41
+ elsif PandaPal.lti_options[:launch_path].present? # Assumes path is provided
42
+ ims_lti_config[:launch_url] = "#{host}#{PandaPal.lti_options[:launch_path]}"
43
+ else
44
+ ims_lti_config[:launch_url] = host
45
+ end
46
+ @tc = IMS::LTI::Services::ToolConfig.new(ims_lti_config)
47
+ end
48
+
49
+ def add_domain
50
+ @tc.set_ext_param(platform, :domain, request.host) unless PandaPal.lti_properties.has_key?(:domain)
51
+ end
52
+
53
+ def add_privacy_level
54
+ @tc.set_ext_param(platform, :privacy_level, 'public') unless PandaPal.lti_properties.has_key?(:public)
55
+ end
56
+
57
+ def add_lti_properties
58
+ PandaPal.lti_properties.each do |k, v|
59
+ @tc.set_ext_param(platform, k, v)
60
+ end
61
+ end
62
+
63
+ def add_lti_custom_params
64
+ PandaPal.lti_custom_params.each do |k, v|
65
+ @tc.set_custom_param k, v
66
+ end
67
+ end
68
+
69
+ def add_lti_options
70
+ if PandaPal.lti_options.has_key?(:custom_fields)
71
+ @tc.set_ext_param(platform, :custom_fields, PandaPal.lti_options[:custom_fields])
72
+ PandaPal.lti_options[:custom_fields].each do |k, v|
73
+ @tc.set_ext_param(platform, k, v)
74
+ end
75
+ end
76
+ end
77
+
78
+ def add_lti_nav
79
+ PandaPal.lti_paths.each do |k, v|
80
+ @tc.set_ext_param(platform, k.to_sym, ext_params(v))
81
+ end
82
+ end
83
+
84
+ def add_environments
85
+ @tc.set_ext_param(platform, :environments, PandaPal.lti_environments)
86
+ end
87
+
88
+ def ext_params(options)
89
+ url = options.delete(:url)
90
+ options[:url] = main_app.send([url, '_url'].join)
91
+ options
92
+ end
93
+
94
+ end
@@ -0,0 +1,8 @@
1
+ class LtiXml::BridgePlatform < LtiXml::BasePlatform
2
+
3
+ def add_lti_custom_params
4
+ if PandaPal.lti_custom_params.any?
5
+ @tc.set_ext_param(platform, :custom_fields, PandaPal.lti_custom_params)
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,3 @@
1
+ class LtiXml::CanvasPlatform < LtiXml::BasePlatform
2
+
3
+ end
@@ -1,3 +1,3 @@
1
1
  module PandaPal
2
- VERSION = "3.1.4"
2
+ VERSION = "3.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: panda_pal
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.4
4
+ version: 3.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Instructure ProServe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-07 00:00:00.000000000 Z
11
+ date: 2018-06-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -161,6 +161,9 @@ files:
161
161
  - db/migrate/20170106165533_add_salesforce_id_to_organizations.rb
162
162
  - db/migrate/20171205183457_encrypt_organization_settings.rb
163
163
  - db/migrate/20171205194657_remove_old_organization_settings.rb
164
+ - lib/lti_xml/base_platform.rb
165
+ - lib/lti_xml/bridge_platform.rb
166
+ - lib/lti_xml/canvas_platform.rb
164
167
  - lib/panda_pal.rb
165
168
  - lib/panda_pal/engine.rb
166
169
  - lib/panda_pal/helpers.rb