scorm_engine 0.7.2 → 0.7.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/scorm_engine/api/endpoints.rb +2 -0
- data/lib/scorm_engine/api/endpoints/courses/configuration.rb +1 -1
- data/lib/scorm_engine/api/endpoints/registrations/configuration.rb +1 -1
- data/lib/scorm_engine/api/endpoints/tenants/configuration.rb +108 -0
- data/lib/scorm_engine/models.rb +1 -0
- data/lib/scorm_engine/models/tenant_configuration.rb +34 -0
- data/lib/scorm_engine/version.rb +1 -1
- data/spec/scorm_engine/api/endpoints/tenants/configuration_spec.rb +126 -0
- data/spec/scorm_engine/models/tenant_configuration_spec.rb +16 -0
- data/spec/support/vcr.rb +1 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 196bff6485fdd38ce3e44ec9e52434e9f2bea54abfa011d352f27f8ecf871914
|
4
|
+
data.tar.gz: 58386090f8f6a295ac499225ff028a8e06d7db08433cd1bb696341fe33c7a0b8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 103cc84797716352274604627f5170b32c2f102af7bee0b12c1a0e83241129bd3b108f10b311303adbe2636f32f135bd3c3507f6ee21cf1bccffc904fea9db82
|
7
|
+
data.tar.gz: fd075fb87cea8faefb90cfba079614d0dee9fe7a2bd2c3200ed96ada9f08d66a21110fdaab47d3a8c64c06e1d68d50e717e64a475f9fac0077e8556e8a2f0c89
|
@@ -8,6 +8,7 @@ require_relative "endpoints/ping"
|
|
8
8
|
require_relative "endpoints/registrations"
|
9
9
|
require_relative "endpoints/registrations/configuration"
|
10
10
|
require_relative "endpoints/registrations/launch_history"
|
11
|
+
require_relative "endpoints/tenants/configuration"
|
11
12
|
|
12
13
|
module ScormEngine
|
13
14
|
module Api
|
@@ -22,6 +23,7 @@ module ScormEngine
|
|
22
23
|
include Registrations
|
23
24
|
include Registrations::Configuration
|
24
25
|
include Registrations::LaunchHistory
|
26
|
+
include Tenants::Configuration
|
25
27
|
|
26
28
|
private
|
27
29
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#
|
2
|
-
# TODO: Consider consolidating this and Registrations::Configuration, but only
|
2
|
+
# TODO: Consider consolidating this and [Registrations|Tenants]::Configuration, but only
|
3
3
|
# after we're sure they are really 99.9% the same in terms of functionality.
|
4
4
|
#
|
5
5
|
module ScormEngine
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#
|
2
|
-
# TODO: Consider consolidating this and Courses::Configuration, but only after we're
|
2
|
+
# TODO: Consider consolidating this and [Courses|Tenants]::Configuration, but only after we're
|
3
3
|
# sure they are really 99.9% the same in terms of functionality.
|
4
4
|
#
|
5
5
|
module ScormEngine
|
@@ -0,0 +1,108 @@
|
|
1
|
+
#
|
2
|
+
# TODO: Consider consolidating this and [Courses|Registrations]::Configuration, but only
|
3
|
+
# after we're sure they are really 99.9% the same in terms of functionality.
|
4
|
+
#
|
5
|
+
module ScormEngine
|
6
|
+
module Api
|
7
|
+
module Endpoints
|
8
|
+
module Tenants
|
9
|
+
module Configuration
|
10
|
+
|
11
|
+
#
|
12
|
+
# Returns the effective value of every setting at this level, as well
|
13
|
+
# as the effective value of any setting at a more specific level.
|
14
|
+
#
|
15
|
+
# @see http://rustici-docs.s3.amazonaws.com/engine/2017.1.x/api.html#tenant__configuration_get
|
16
|
+
#
|
17
|
+
# @return [ScormEngine::Models::TenantConfiguration]
|
18
|
+
#
|
19
|
+
def get_tenant_configuration
|
20
|
+
response = get("configuration")
|
21
|
+
|
22
|
+
result = response.success? ? ScormEngine::Models::TenantConfiguration.new_from_api(response.body) : nil
|
23
|
+
|
24
|
+
Response.new(raw_response: response, result: result)
|
25
|
+
end
|
26
|
+
|
27
|
+
#
|
28
|
+
# Bulk set configuration settings via POST request.
|
29
|
+
#
|
30
|
+
# @see http://rustici-docs.s3.amazonaws.com/engine/2017.1.x/api.html#tenant__configuration_post
|
31
|
+
#
|
32
|
+
# @param [Hash] options
|
33
|
+
#
|
34
|
+
# @option options [Hash] :settings
|
35
|
+
# Key/value pairs of configuration options to set.
|
36
|
+
#
|
37
|
+
# @return [ScormEngine::Response]
|
38
|
+
#
|
39
|
+
def post_tenant_configuration(options = {})
|
40
|
+
require_options(options, :settings)
|
41
|
+
|
42
|
+
options = options.dup
|
43
|
+
settings = options.delete(:settings)
|
44
|
+
|
45
|
+
body = { settings: settings.map { |k, v| { "settingId" => k, "value" => v.to_s } } }
|
46
|
+
|
47
|
+
response = post("configuration", options, body)
|
48
|
+
|
49
|
+
Response.new(raw_response: response)
|
50
|
+
end
|
51
|
+
|
52
|
+
#
|
53
|
+
# Returns the effective value for this configuration setting for the resource being configured.
|
54
|
+
#
|
55
|
+
# @see http://rustici-docs.s3.amazonaws.com/engine/2017.1.x/api.html#tenant__configuration__settingId__get
|
56
|
+
#
|
57
|
+
# @param [Hash] options
|
58
|
+
#
|
59
|
+
# @option options [String] :setting_id
|
60
|
+
# The ID of the setting to get.
|
61
|
+
#
|
62
|
+
# @return [String]
|
63
|
+
#
|
64
|
+
def get_tenant_configuration_setting(options = {})
|
65
|
+
require_options(options, :setting_id)
|
66
|
+
|
67
|
+
options = options.dup
|
68
|
+
setting_id = options.delete(:setting_id)
|
69
|
+
|
70
|
+
response = get("configuration/#{setting_id}", options)
|
71
|
+
|
72
|
+
result = response.success? ? response.body["value"] : nil
|
73
|
+
|
74
|
+
Response.new(raw_response: response, result: result)
|
75
|
+
end
|
76
|
+
|
77
|
+
#
|
78
|
+
# Sets the value for this configuration setting, for the resource being configured.
|
79
|
+
#
|
80
|
+
# @see http://rustici-docs.s3.amazonaws.com/engine/2017.1.x/api.html#tenant__configuration__settingId__put
|
81
|
+
#
|
82
|
+
# @param [Hash] options
|
83
|
+
#
|
84
|
+
# @option options [String] :setting_id
|
85
|
+
# The ID of the setting to set.
|
86
|
+
#
|
87
|
+
# @option options [String] :value ("")
|
88
|
+
# The value of the setting to set.
|
89
|
+
#
|
90
|
+
# @return [ScormEngine::Response]
|
91
|
+
#
|
92
|
+
def put_tenant_configuration_setting(options = {})
|
93
|
+
require_options(options, :setting_id)
|
94
|
+
|
95
|
+
options = options.dup
|
96
|
+
setting_id = options.delete(:setting_id)
|
97
|
+
|
98
|
+
body = { value: options.delete(:value).to_s }
|
99
|
+
|
100
|
+
response = put("configuration/#{setting_id}", options, body)
|
101
|
+
|
102
|
+
Response.new(raw_response: response)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
data/lib/scorm_engine/models.rb
CHANGED
@@ -12,3 +12,4 @@ require_relative "models/registration_activity_detail"
|
|
12
12
|
require_relative "models/registration_configuration"
|
13
13
|
require_relative "models/registration_launch_history"
|
14
14
|
require_relative "models/registration_runtime_interaction"
|
15
|
+
require_relative "models/tenant_configuration"
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module ScormEngine
|
2
|
+
module Models
|
3
|
+
class TenantConfiguration < Base
|
4
|
+
# @attr
|
5
|
+
#
|
6
|
+
# @return [Hash]
|
7
|
+
attr_accessor :settings
|
8
|
+
|
9
|
+
def self.new_from_api(options = {})
|
10
|
+
this = new
|
11
|
+
|
12
|
+
this.options = options.dup
|
13
|
+
this.settings = get_settings_from_api(options)
|
14
|
+
this
|
15
|
+
end
|
16
|
+
|
17
|
+
#
|
18
|
+
# Extract and normalize the settings from the API options.
|
19
|
+
#
|
20
|
+
# @param [Hash] options
|
21
|
+
# The API options hash
|
22
|
+
#
|
23
|
+
# @return [Hash]
|
24
|
+
# A hash of key/value pairs.
|
25
|
+
#
|
26
|
+
def self.get_settings_from_api(options = {})
|
27
|
+
options["configurationItems"].reduce({}) do |m, o|
|
28
|
+
m[o["id"]] = o["value"]
|
29
|
+
m
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/scorm_engine/version.rb
CHANGED
@@ -0,0 +1,126 @@
|
|
1
|
+
#
|
2
|
+
# NOTE: This spec will only run if a real scorm engine is available!
|
3
|
+
# This is because the results returned expose sensitive information
|
4
|
+
# and we'd rather they not get cached to VCR fixtures.
|
5
|
+
#
|
6
|
+
RSpec.describe ScormEngine::Api::Endpoints::Tenants::Configuration do
|
7
|
+
around do |example|
|
8
|
+
if scorm_engine_is_available?
|
9
|
+
VCR.turned_off do
|
10
|
+
example.run
|
11
|
+
end
|
12
|
+
else
|
13
|
+
warn "Not running because SCORM engine is not truly available."
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
let(:subject) { scorm_engine_client }
|
18
|
+
|
19
|
+
describe "#get_tenant_configuration" do
|
20
|
+
let(:response) { subject.get_tenant_configuration }
|
21
|
+
|
22
|
+
it "is successful" do
|
23
|
+
expect(response.success?).to eq true
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "results" do
|
27
|
+
it "makes settings available as key/value pairs" do
|
28
|
+
settings = response.result.settings
|
29
|
+
aggregate_failures do
|
30
|
+
# just a sampling
|
31
|
+
expect(settings.key?("ApiPostbackTimeoutSeconds")).to be_truthy
|
32
|
+
expect(settings.key?("ApiUseSignedLaunchLinks")).to be_truthy
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "#post_tenant_configuration" do
|
39
|
+
let(:response) {
|
40
|
+
subject.post_tenant_configuration(
|
41
|
+
settings: { "ApiPostbackTimeoutSeconds" => "15",
|
42
|
+
"ApiUseSignedLaunchLinks" => "true" }
|
43
|
+
)
|
44
|
+
}
|
45
|
+
|
46
|
+
it "is successful" do
|
47
|
+
expect(response.success?).to eq true
|
48
|
+
end
|
49
|
+
|
50
|
+
it "persists the settings" do
|
51
|
+
response # trigger the api
|
52
|
+
sleep 30
|
53
|
+
|
54
|
+
configuration = subject.get_tenant_configuration.result
|
55
|
+
expect(configuration.settings["ApiPostbackTimeoutSeconds"]).to eq "15"
|
56
|
+
expect(configuration.settings["ApiUseSignedLaunchLinks"]).to eq "true"
|
57
|
+
|
58
|
+
subject.post_tenant_configuration(
|
59
|
+
settings: { "ApiPostbackTimeoutSeconds" => "20",
|
60
|
+
"ApiUseSignedLaunchLinks" => "false" }
|
61
|
+
)
|
62
|
+
sleep 30
|
63
|
+
|
64
|
+
configuration = subject.get_tenant_configuration.result
|
65
|
+
expect(configuration.settings["ApiPostbackTimeoutSeconds"]).to eq "20"
|
66
|
+
expect(configuration.settings["ApiUseSignedLaunchLinks"]).to eq "false"
|
67
|
+
end
|
68
|
+
|
69
|
+
it "fails when settings are invalid" do
|
70
|
+
response = subject.post_tenant_configuration(settings: { "NonExistentSettingTotesBogus" => "YES" })
|
71
|
+
expect(response.success?).to eq false
|
72
|
+
expect(response.status).to eq 400
|
73
|
+
expect(response.message).to match(/No configuration setting found with id.*NonExistentSettingTotesBogus/)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
describe "#get_tenant_configuration_setting" do
|
78
|
+
let(:response) {
|
79
|
+
subject.put_tenant_configuration_setting(setting_id: "ApiPostbackTimeoutSeconds", value: 42)
|
80
|
+
sleep 30
|
81
|
+
subject.get_tenant_configuration_setting(setting_id: "ApiPostbackTimeoutSeconds")
|
82
|
+
}
|
83
|
+
|
84
|
+
it "is successful" do
|
85
|
+
expect(response.success?).to eq true
|
86
|
+
end
|
87
|
+
|
88
|
+
describe "results" do
|
89
|
+
it "returns the value as a string" do
|
90
|
+
expect(response.result).to eq "42"
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
it "fails when setting_id is invalid" do
|
95
|
+
response = subject.get_tenant_configuration_setting(setting_id: "NonExistentSettingTotesBogus")
|
96
|
+
expect(response.success?).to eq false
|
97
|
+
expect(response.status).to eq 400
|
98
|
+
expect(response.message).to match(/No configuration setting found with id.*NonExistentSettingTotesBogus/)
|
99
|
+
expect(response.result).to eq nil
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
describe "#put_tenant_configuration_setting" do
|
104
|
+
let(:response) { subject.put_tenant_configuration_setting(setting_id: "ApiPostbackTimeoutSeconds", value: 99) }
|
105
|
+
|
106
|
+
it "is successful" do
|
107
|
+
expect(response.success?).to eq true
|
108
|
+
end
|
109
|
+
|
110
|
+
describe "results" do
|
111
|
+
it "persists the changes" do
|
112
|
+
response # trigger the api
|
113
|
+
subject.put_tenant_configuration_setting(setting_id: "ApiPostbackTimeoutSeconds", value: 100)
|
114
|
+
new_response = subject.get_tenant_configuration_setting(setting_id: "ApiPostbackTimeoutSeconds")
|
115
|
+
expect(new_response.result).to eq "100"
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
it "fails when setting_id is invalid" do
|
120
|
+
response = subject.get_tenant_configuration_setting(setting_id: "NonExistentSettingTotesBogus", value: "42")
|
121
|
+
expect(response.success?).to eq false
|
122
|
+
expect(response.status).to eq 400
|
123
|
+
expect(response.message).to match(/No configuration setting found with id.*NonExistentSettingTotesBogus/)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
RSpec.describe ScormEngine::Models::TenantConfiguration do
|
2
|
+
describe ".new_from_api" do
|
3
|
+
describe ":settings" do
|
4
|
+
it "a hash built from configurationItems" do
|
5
|
+
config = described_class.new_from_api(
|
6
|
+
"configurationItems" => [
|
7
|
+
{ "id" => "Foo", "value" => "YES" },
|
8
|
+
{ "id" => "Bar", "value" => "123" },
|
9
|
+
]
|
10
|
+
)
|
11
|
+
expect(config.settings["Foo"]).to eq "YES"
|
12
|
+
expect(config.settings["Bar"]).to eq "123"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/spec/support/vcr.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scorm_engine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Philip Hallstrom
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-03-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -185,6 +185,7 @@ files:
|
|
185
185
|
- lib/scorm_engine/api/endpoints/registrations.rb
|
186
186
|
- lib/scorm_engine/api/endpoints/registrations/configuration.rb
|
187
187
|
- lib/scorm_engine/api/endpoints/registrations/launch_history.rb
|
188
|
+
- lib/scorm_engine/api/endpoints/tenants/configuration.rb
|
188
189
|
- lib/scorm_engine/client.rb
|
189
190
|
- lib/scorm_engine/configuration.rb
|
190
191
|
- lib/scorm_engine/faraday/connection.rb
|
@@ -204,6 +205,7 @@ files:
|
|
204
205
|
- lib/scorm_engine/models/registration_configuration.rb
|
205
206
|
- lib/scorm_engine/models/registration_launch_history.rb
|
206
207
|
- lib/scorm_engine/models/registration_runtime_interaction.rb
|
208
|
+
- lib/scorm_engine/models/tenant_configuration.rb
|
207
209
|
- lib/scorm_engine/response.rb
|
208
210
|
- lib/scorm_engine/utils.rb
|
209
211
|
- lib/scorm_engine/version.rb
|
@@ -367,6 +369,7 @@ files:
|
|
367
369
|
- spec/scorm_engine/api/endpoints/registrations/configuration_spec.rb
|
368
370
|
- spec/scorm_engine/api/endpoints/registrations/launch_history_spec.rb
|
369
371
|
- spec/scorm_engine/api/endpoints/registrations_spec.rb
|
372
|
+
- spec/scorm_engine/api/endpoints/tenants/configuration_spec.rb
|
370
373
|
- spec/scorm_engine/configuration_spec.rb
|
371
374
|
- spec/scorm_engine/faraday/connection_spec.rb
|
372
375
|
- spec/scorm_engine/models/base_spec.rb
|
@@ -382,6 +385,7 @@ files:
|
|
382
385
|
- spec/scorm_engine/models/registration_launch_history_spec.rb
|
383
386
|
- spec/scorm_engine/models/registration_runtime_interaction_spec.rb
|
384
387
|
- spec/scorm_engine/models/registration_spec.rb
|
388
|
+
- spec/scorm_engine/models/tenant_configuration_spec.rb
|
385
389
|
- spec/scorm_engine/utils_spec.rb
|
386
390
|
- spec/scorm_engine/version_spec.rb
|
387
391
|
- spec/scorm_engine_spec.rb
|