scorm_engine 0.3.0 → 0.4.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 +4 -4
- data/lib/scorm_engine/api/endpoints.rb +12 -2
- data/lib/scorm_engine/api/endpoints/destinations.rb +225 -0
- data/lib/scorm_engine/api/endpoints/dispatches.rb +301 -0
- data/lib/scorm_engine/faraday/connection.rb +0 -1
- data/lib/scorm_engine/models.rb +3 -0
- data/lib/scorm_engine/models/destination.rb +27 -0
- data/lib/scorm_engine/models/dispatch.rb +51 -0
- data/lib/scorm_engine/models/dispatch_zip.rb +18 -0
- data/lib/scorm_engine/version.rb +1 -1
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_delete_destination/raises_ArgumentError_when_destination_id_is_missing.yml +32 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_delete_destination/returns_success_even_when_id_is_invalid.yml +32 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_delete_destination/works.yml +32 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_get_destination/fails_when_id_is_invalid.yml +38 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_get_destination/is_successful.yml +38 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_get_destination/results/sucessfully_creates_the_destination_attributes.yml +38 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_get_destination_dispatches_registration_count/fails_when_invalid.yml +38 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_get_destination_dispatches_registration_count/works.yml +36 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_get_destinations/_more_option_pagination_/returns_all_the_destinations.yml +73 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_get_destinations/_more_option_pagination_/returns_the_more_key_in_the_raw_response.yml +38 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_get_destinations/_since_option/fails_when_passed_an_invalid_value.yml +37 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_get_destinations/_since_option/works.yml +38 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_get_destinations/is_successful.yml +38 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_get_destinations/results/is_an_enumerator_of_Destination_models.yml +38 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_get_destinations/results/sucessfully_creates_the_Destination_attributes.yml +38 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_post_destination/is_successful.yml +61 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_post_destination/is_successful_even_if_the_destination_id_is_not_unique.yml +32 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_post_destination_dispatches_enabled/fails_when_invalid.yml +38 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_post_destination_dispatches_enabled/works_when_false.yml +32 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_post_destination_dispatches_enabled/works_when_true.yml +32 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_post_destination_dispatches_registration_instancing/fails_when_invalid.yml +38 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_post_destination_dispatches_registration_instancing/works_when_false.yml +32 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_post_destination_dispatches_registration_instancing/works_when_true.yml +32 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_put_destination/is_successful.yml +32 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_put_destination/results/sucessfully_creates_the_destination_attributes.yml +67 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_delete_dispatch/returns_success_even_when_id_is_invalid.yml +30 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_delete_dispatch/works.yml +30 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatch/fails_when_id_is_invalid.yml +36 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatch/is_successful.yml +36 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatch/results/sucessfully_creates_the_dispatch_attributes.yml +36 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatch_enabled/is_false_when_disabled.yml +63 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatch_enabled/is_true_when_enabled.yml +63 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatch_zip/fails_given_an_invalid_id.yml +36 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatch_zip/fails_given_an_invalid_type.yml +34 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatch_zip/works.yml +37 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatch_zip/works_when_type_is_AICC.yml +37 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatch_zip/works_when_type_is_SCORM12.yml +37 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatch_zip/works_when_type_is_SCORM20043RDEDITION.yml +35 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatches/_more_option_pagination_/returns_all_the_dispatches.yml +69 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatches/_more_option_pagination_/returns_the_more_key_in_the_raw_response.yml +36 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatches/_since_option/fails_when_passed_an_invalid_value.yml +35 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatches/_since_option/works.yml +36 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatches/is_successful.yml +36 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatches/results/is_an_enumerator_of_dispatch_models.yml +36 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatches/results/sucessfully_creates_the_dispatch_attributes.yml +69 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_post_dispatch/is_successful.yml +59 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_put_dispatch/is_successful.yml +32 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_put_dispatch/results/sucessfully_creates_the_dispatch_attributes.yml +65 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_put_dispatch_enabled/fails_when_invalid.yml +38 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_put_dispatch_enabled/works_when_false.yml +32 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_put_dispatch_enabled/works_when_true.yml +32 -0
- data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_post_registration/is_successful_even_when_given_a_UTF8/slashed_username.yml +97 -0
- data/spec/scorm_engine/api/endpoints/destinations_spec.rb +215 -0
- data/spec/scorm_engine/api/endpoints/dispatches_spec.rb +286 -0
- data/spec/scorm_engine/api/endpoints/registrations_spec.rb +12 -0
- data/spec/scorm_engine/models/destination_spec.rb +21 -0
- data/spec/scorm_engine/models/dispatch_spec.rb +85 -0
- data/spec/scorm_engine/models/dispatch_zip_spec.rb +18 -0
- data/spec/support/scorm_engine.rb +21 -0
- metadata +78 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ba57a4d4caf90f530093fe8825533d1b32f59ebd809979363f5b1faaea2df09f
|
4
|
+
data.tar.gz: 68d0fec6173b12b04d7a734aae2869f1c28c9f3f3848a2bccd237951e26f06ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f7c16bfb4b244fbe5fbf0c981d65c00b5fc728c50fce375ffe19d8bfbb94d4e8b9e9f435d92ebde05aa9e96b53059991d24158ff7410a43f04bbf8c70a5c4eca
|
7
|
+
data.tar.gz: 070d20fcc913d2d32d487a08b7bf06adce1bbac5fbe2692f446775e9a61a5e74a0a5758311501e2d21150c4622d4d476e0ceb58a9cfa31673c651f1814e29967
|
@@ -2,6 +2,8 @@ require_relative "endpoints/about"
|
|
2
2
|
require_relative "endpoints/courses"
|
3
3
|
require_relative "endpoints/courses/configuration"
|
4
4
|
require_relative "endpoints/courses/import"
|
5
|
+
require_relative "endpoints/destinations"
|
6
|
+
require_relative "endpoints/dispatches"
|
5
7
|
require_relative "endpoints/ping"
|
6
8
|
require_relative "endpoints/registrations"
|
7
9
|
require_relative "endpoints/registrations/configuration"
|
@@ -14,6 +16,8 @@ module ScormEngine
|
|
14
16
|
include Courses
|
15
17
|
include Courses::Configuration
|
16
18
|
include Courses::Import
|
19
|
+
include Destinations
|
20
|
+
include Dispatches
|
17
21
|
include Ping
|
18
22
|
include Registrations
|
19
23
|
include Registrations::Configuration
|
@@ -41,10 +45,16 @@ module ScormEngine
|
|
41
45
|
end
|
42
46
|
|
43
47
|
def require_option(haystack, *needles)
|
44
|
-
value = needles.reduce(haystack) { |m, o| m
|
45
|
-
return unless value.nil?
|
48
|
+
value = needles.reduce(haystack) { |m, o| value_for_key(m, o) }
|
49
|
+
return unless value.nil?
|
46
50
|
raise ArgumentError, "Required option #{needles.join("/")} missing"
|
47
51
|
end
|
52
|
+
|
53
|
+
def value_for_key(memo, obj)
|
54
|
+
return memo[obj.to_sym] if memo.key?(obj.to_sym)
|
55
|
+
return memo[obj.to_s] if memo.key?(obj.to_s)
|
56
|
+
nil
|
57
|
+
end
|
48
58
|
end
|
49
59
|
end
|
50
60
|
end
|
@@ -0,0 +1,225 @@
|
|
1
|
+
module ScormEngine
|
2
|
+
module Api
|
3
|
+
module Endpoints
|
4
|
+
module Destinations
|
5
|
+
|
6
|
+
#
|
7
|
+
# Get a list of destinations.
|
8
|
+
#
|
9
|
+
# @see http://rustici-docs.s3.amazonaws.com/engine/2017.1.x.dispatch/api-dispatch.html#tenant__destinations_get
|
10
|
+
#
|
11
|
+
# @param [Hash] options
|
12
|
+
#
|
13
|
+
# @option options [String] :course_id
|
14
|
+
# Limit the results to destinations that have dispatches of the specified course.
|
15
|
+
#
|
16
|
+
# @option options [DateTime] :since
|
17
|
+
# Only destinations updated since the specified ISO 8601 TimeStamp
|
18
|
+
# (inclusive) are included. If a time zone is not specified, the
|
19
|
+
# server's time zone will be used.
|
20
|
+
#
|
21
|
+
# @return [Enumerator<ScormEngine::Models::Destination>]
|
22
|
+
#
|
23
|
+
def get_destinations(options = {})
|
24
|
+
options = options.dup
|
25
|
+
|
26
|
+
response = get("destinations", options)
|
27
|
+
|
28
|
+
result = Enumerator.new do |enum|
|
29
|
+
loop do
|
30
|
+
response.success? && response.body["destinations"].each do |destination|
|
31
|
+
enum << ScormEngine::Models::Destination.new_from_api(destination)
|
32
|
+
end
|
33
|
+
break if !response.success? || response.body["more"].nil?
|
34
|
+
response = get(response.body["more"])
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
Response.new(raw_response: response, result: result)
|
39
|
+
end
|
40
|
+
|
41
|
+
#
|
42
|
+
# Create a destination.
|
43
|
+
#
|
44
|
+
# @see http://rustici-docs.s3.amazonaws.com/engine/2017.1.x.dispatch/api-dispatch.html#tenant__destinations_post
|
45
|
+
#
|
46
|
+
# @param [Hash] options
|
47
|
+
#
|
48
|
+
# @option options [String] :destination_id
|
49
|
+
# The destination ID.
|
50
|
+
#
|
51
|
+
# @option options [String] :name (:destination_id)
|
52
|
+
# The destination's name.
|
53
|
+
#
|
54
|
+
# @return [ScormEngine::Response]
|
55
|
+
#
|
56
|
+
def post_destination(options = {})
|
57
|
+
require_options(options, :destination_id)
|
58
|
+
|
59
|
+
options = options.dup
|
60
|
+
options[:name] ||= options[:destination_id]
|
61
|
+
|
62
|
+
body = {
|
63
|
+
destinations: [
|
64
|
+
id: options[:destination_id].to_s,
|
65
|
+
data: {
|
66
|
+
name: options[:name].to_s,
|
67
|
+
},
|
68
|
+
]
|
69
|
+
}
|
70
|
+
|
71
|
+
response = post("destinations", {}, body)
|
72
|
+
|
73
|
+
Response.new(raw_response: response)
|
74
|
+
end
|
75
|
+
|
76
|
+
#
|
77
|
+
# Get a destination.
|
78
|
+
#
|
79
|
+
# @see http://rustici-docs.s3.amazonaws.com/engine/2017.1.x.dispatch/api-dispatch.html#tenant__destinations__destinationId__get
|
80
|
+
#
|
81
|
+
# @param [Hash] options
|
82
|
+
#
|
83
|
+
# @option options [String] :destination_id
|
84
|
+
# The ID of the destination to get.
|
85
|
+
#
|
86
|
+
# @return [ScormEngine::Models::Destination]
|
87
|
+
#
|
88
|
+
def get_destination(options = {})
|
89
|
+
require_options(options, :destination_id)
|
90
|
+
|
91
|
+
response = get("destinations/#{options[:destination_id]}")
|
92
|
+
|
93
|
+
# merge options to pick up destination_id which isn't passed back in the response
|
94
|
+
result = response.success? ? ScormEngine::Models::Destination.new_from_api(options.merge(response.body)) : nil
|
95
|
+
|
96
|
+
Response.new(raw_response: response, result: result)
|
97
|
+
end
|
98
|
+
|
99
|
+
#
|
100
|
+
# Update a destination.
|
101
|
+
#
|
102
|
+
# @see http://rustici-docs.s3.amazonaws.com/engine/2017.1.x.dispatch/api-dispatch.html#tenant__destinations__destinationId__put
|
103
|
+
#
|
104
|
+
# @param [Hash] options
|
105
|
+
#
|
106
|
+
# @option options [String] :destination_id
|
107
|
+
# The destination ID.
|
108
|
+
#
|
109
|
+
# @option options [String] :name
|
110
|
+
# The destination's new name.
|
111
|
+
#
|
112
|
+
# @return [ScormEngine::Response]
|
113
|
+
#
|
114
|
+
def put_destination(options = {})
|
115
|
+
require_options(options, :destination_id, :name)
|
116
|
+
|
117
|
+
options = options.dup
|
118
|
+
|
119
|
+
body = {
|
120
|
+
name: options[:name],
|
121
|
+
}
|
122
|
+
|
123
|
+
response = put("destinations/#{options[:destination_id]}", {}, body)
|
124
|
+
|
125
|
+
Response.new(raw_response: response)
|
126
|
+
end
|
127
|
+
|
128
|
+
#
|
129
|
+
# Delete a destination.
|
130
|
+
#
|
131
|
+
# Deleting a destination will also delete all dispatches for that
|
132
|
+
# destination.
|
133
|
+
#
|
134
|
+
# @see http://rustici-docs.s3.amazonaws.com/engine/2017.1.x.dispatch/api-dispatch.html#tenant__destinations_delete
|
135
|
+
#
|
136
|
+
# @param [Hash] options
|
137
|
+
#
|
138
|
+
# @option options [String] :destination_id
|
139
|
+
# The ID of the destination to delete.
|
140
|
+
#
|
141
|
+
# @return [ScormEngine::Response]
|
142
|
+
#
|
143
|
+
def delete_destination(options = {})
|
144
|
+
require_options(options, :destination_id)
|
145
|
+
|
146
|
+
response = delete("destinations/#{options[:destination_id]}")
|
147
|
+
|
148
|
+
Response.new(raw_response: response)
|
149
|
+
end
|
150
|
+
|
151
|
+
#
|
152
|
+
# Enable or disable all related dispatches.
|
153
|
+
#
|
154
|
+
# @see http://rustici-docs.s3.amazonaws.com/engine/2017.1.x.dispatch/api-dispatch.html#tenant__destinations__destinationId__dispatches_enabled_post
|
155
|
+
#
|
156
|
+
# @param [Hash] options
|
157
|
+
#
|
158
|
+
# @option options [String] :destination_id
|
159
|
+
# The ID of the destination
|
160
|
+
#
|
161
|
+
# @option options [Boolean] :enabled
|
162
|
+
# The enabledness of all related dispatches
|
163
|
+
#
|
164
|
+
# @return [ScormEngine::Response]
|
165
|
+
#
|
166
|
+
def post_destination_dispatches_enabled(options = {})
|
167
|
+
require_options(options, :destination_id, :enabled)
|
168
|
+
|
169
|
+
body = options[:enabled].to_s
|
170
|
+
|
171
|
+
response = post("destinations/#{options[:destination_id]}/dispatches/enabled", {}, body)
|
172
|
+
|
173
|
+
Response.new(raw_response: response)
|
174
|
+
end
|
175
|
+
|
176
|
+
#
|
177
|
+
# Enable or disable registration instancing.
|
178
|
+
#
|
179
|
+
# @see http://rustici-docs.s3.amazonaws.com/engine/2017.1.x.dispatch/api-dispatch.html#tenant__destinations__destinationId__dispatches_registrationInstancing_post
|
180
|
+
#
|
181
|
+
# @param [Hash] options
|
182
|
+
#
|
183
|
+
# @option options [String] :destination_id
|
184
|
+
# The ID of the destination to delete.
|
185
|
+
#
|
186
|
+
# @option options [Boolean] :enabled
|
187
|
+
# The enabledness of the registration instancing
|
188
|
+
#
|
189
|
+
# @return [ScormEngine::Response]
|
190
|
+
#
|
191
|
+
def post_destination_dispatches_registration_instancing(options = {})
|
192
|
+
require_options(options, :destination_id, :enabled)
|
193
|
+
|
194
|
+
body = options[:enabled].to_s
|
195
|
+
|
196
|
+
response = post("destinations/#{options[:destination_id]}/dispatches/registrationInstancing", {}, body)
|
197
|
+
|
198
|
+
Response.new(raw_response: response)
|
199
|
+
end
|
200
|
+
|
201
|
+
#
|
202
|
+
# Get an aggregate count of all related dispatch registrations.
|
203
|
+
#
|
204
|
+
# @see http://rustici-docs.s3.amazonaws.com/engine/2017.1.x.dispatch/api-dispatch.html#tenant__destinations__destinationId__dispatches_registrationCount_get
|
205
|
+
#
|
206
|
+
# @param [Hash] options
|
207
|
+
#
|
208
|
+
# @option options [String] :destination_id
|
209
|
+
# The ID of the destination to delete.
|
210
|
+
#
|
211
|
+
# @return [Integer]
|
212
|
+
#
|
213
|
+
def get_destination_dispatches_registration_count(options = {})
|
214
|
+
require_options(options, :destination_id)
|
215
|
+
|
216
|
+
response = get("destinations/#{options[:destination_id]}/dispatches/registrationCount")
|
217
|
+
|
218
|
+
result = response.success? ? response.body.to_i : nil
|
219
|
+
|
220
|
+
Response.new(raw_response: response, result: result)
|
221
|
+
end
|
222
|
+
end
|
223
|
+
end
|
224
|
+
end
|
225
|
+
end
|
@@ -0,0 +1,301 @@
|
|
1
|
+
module ScormEngine
|
2
|
+
module Api
|
3
|
+
module Endpoints
|
4
|
+
module Dispatches
|
5
|
+
|
6
|
+
#
|
7
|
+
# Get a list of dispatches.
|
8
|
+
#
|
9
|
+
# @see http://rustici-docs.s3.amazonaws.com/engine/2017.1.x.dispatch/api-dispatch.html#tenant__dispatches_get
|
10
|
+
#
|
11
|
+
# @param [Hash] options
|
12
|
+
#
|
13
|
+
# @option options [String] :course_id
|
14
|
+
# Limit the results to dispatches of the specified course.
|
15
|
+
#
|
16
|
+
# @option options [DateTime] :since
|
17
|
+
# Only dispatches updated since the specified ISO 8601 TimeStamp
|
18
|
+
# (inclusive) are included. If a time zone is not specified, the
|
19
|
+
# server's time zone will be used.
|
20
|
+
#
|
21
|
+
# @return [Enumerator<ScormEngine::Models::Dispatch>]
|
22
|
+
#
|
23
|
+
def get_dispatches(options = {})
|
24
|
+
options = options.dup
|
25
|
+
|
26
|
+
response = get("dispatches", options)
|
27
|
+
|
28
|
+
result = Enumerator.new do |enum|
|
29
|
+
loop do
|
30
|
+
response.success? && response.body["dispatches"].each do |course|
|
31
|
+
enum << ScormEngine::Models::Dispatch.new_from_api(course)
|
32
|
+
end
|
33
|
+
break if !response.success? || response.body["more"].nil?
|
34
|
+
response = get(response.body["more"])
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
Response.new(raw_response: response, result: result)
|
39
|
+
end
|
40
|
+
|
41
|
+
#
|
42
|
+
# Create a dispatch.
|
43
|
+
#
|
44
|
+
# @see http://rustici-docs.s3.amazonaws.com/engine/2017.1.x.dispatch/api-dispatch.html#tenant__dispatches_post
|
45
|
+
#
|
46
|
+
# @param [Hash] options
|
47
|
+
#
|
48
|
+
# @option options [String] :dispatch_id
|
49
|
+
# The dispatch ID.
|
50
|
+
#
|
51
|
+
# @option options [String] :destination_id
|
52
|
+
# The destination ID.
|
53
|
+
#
|
54
|
+
# @option options [String] :course_id
|
55
|
+
# The course ID.
|
56
|
+
#
|
57
|
+
# @option options [Boolean] :allow_new_registrations (false)
|
58
|
+
# If true, then new registrations can be created for this dispatch.
|
59
|
+
#
|
60
|
+
# @option options [Boolean] :instanced (false)
|
61
|
+
# If true, then a new registration instance will be created if the
|
62
|
+
# client LMS doesn't provide launch data for an existing one.
|
63
|
+
# Otherwise, the same instance will always be used for the given
|
64
|
+
# cmi.learner_id.
|
65
|
+
#
|
66
|
+
# @option options [Integer] :registration_cap (0)
|
67
|
+
# The maximum number of registrations that can be created for this
|
68
|
+
# dispatch, where '0' means 'unlimited registrations'.
|
69
|
+
#
|
70
|
+
# @option options [Date] :expiration_date ("none")
|
71
|
+
# The date after which this dispatch will be disabled as an ISO 8601
|
72
|
+
# string, or \"none\" for no expiration date.
|
73
|
+
#
|
74
|
+
# @option options [String] :external_config ("")
|
75
|
+
# Serialized external configuration information to include when
|
76
|
+
# launching the dispatched package.
|
77
|
+
#
|
78
|
+
# @return [ScormEngine::Response]
|
79
|
+
#
|
80
|
+
def post_dispatch(options = {})
|
81
|
+
require_options(options, :dispatch_id, :destination_id, :course_id)
|
82
|
+
|
83
|
+
options = options.dup
|
84
|
+
|
85
|
+
options[:allow_new_registrations] = false unless options[:allow_new_registrations]
|
86
|
+
options[:instanced] = false unless options[:instanced]
|
87
|
+
options[:registration_cap] = [0, options[:registration_cap].to_i].max
|
88
|
+
options[:expiration_date] = begin
|
89
|
+
date = options[:expiration_date]
|
90
|
+
date = date.is_a?(String) ? Date.parse(date) : date
|
91
|
+
date&.iso8601 # might be nil
|
92
|
+
rescue ArgumentError
|
93
|
+
"none"
|
94
|
+
end
|
95
|
+
|
96
|
+
body = {
|
97
|
+
dispatches: [
|
98
|
+
id: options[:dispatch_id],
|
99
|
+
data: {
|
100
|
+
destinationId: options[:destination_id],
|
101
|
+
courseId: options[:course_id],
|
102
|
+
allowNewRegistrations: options[:allow_new_registrations],
|
103
|
+
instanced: options[:instanced],
|
104
|
+
registrationCap: options[:registration_cap],
|
105
|
+
expirationDate: options[:expiration_date],
|
106
|
+
externalConfig: options[:external_config],
|
107
|
+
},
|
108
|
+
]
|
109
|
+
}
|
110
|
+
|
111
|
+
response = post("dispatches", {}, body)
|
112
|
+
|
113
|
+
Response.new(raw_response: response)
|
114
|
+
end
|
115
|
+
|
116
|
+
#
|
117
|
+
# Get a dispatch.
|
118
|
+
#
|
119
|
+
# @see http://rustici-docs.s3.amazonaws.com/engine/2017.1.x.dispatch/api-dispatch.html#tenant__dispatches__dispatchId__get
|
120
|
+
#
|
121
|
+
# @param [Hash] options
|
122
|
+
#
|
123
|
+
# @option options [String] :dispatch_id
|
124
|
+
# The ID of the dispatch to get.
|
125
|
+
#
|
126
|
+
# @return [ScormEngine::Models::Dispatch]
|
127
|
+
#
|
128
|
+
def get_dispatch(options = {})
|
129
|
+
require_options(options, :dispatch_id)
|
130
|
+
|
131
|
+
response = get("dispatches/#{options[:dispatch_id]}")
|
132
|
+
|
133
|
+
result = response.success? ? ScormEngine::Models::Dispatch.new_from_api(response.body) : nil
|
134
|
+
|
135
|
+
Response.new(raw_response: response, result: result)
|
136
|
+
end
|
137
|
+
|
138
|
+
#
|
139
|
+
# Update a dispatch.
|
140
|
+
#
|
141
|
+
# @see http://rustici-docs.s3.amazonaws.com/engine/2017.1.x.dispatch/api-dispatch.html#tenant__dispatches__dispatchId__put
|
142
|
+
#
|
143
|
+
# @param [Hash] options
|
144
|
+
#
|
145
|
+
# @option options [String] :dispatch_id
|
146
|
+
# The dispatch ID.
|
147
|
+
#
|
148
|
+
# @option options [String] :destination_id
|
149
|
+
# The destination ID.
|
150
|
+
#
|
151
|
+
# @option options [String] :course_id
|
152
|
+
# The course ID.
|
153
|
+
#
|
154
|
+
# @option options [Boolean] :allow_new_registrations (false)
|
155
|
+
# If true, then new registrations can be created for this dispatch.
|
156
|
+
#
|
157
|
+
# @option options [Boolean] :instanced (false)
|
158
|
+
# If true, then a new registration instance will be created if the
|
159
|
+
# client LMS doesn't provide launch data for an existing one.
|
160
|
+
# Otherwise, the same instance will always be used for the given
|
161
|
+
# cmi.learner_id.
|
162
|
+
#
|
163
|
+
# @option options [Integer] :registration_cap (0)
|
164
|
+
# The maximum number of registrations that can be created for this
|
165
|
+
# dispatch, where '0' means 'unlimited registrations'.
|
166
|
+
#
|
167
|
+
# @option options [Date] :expiration_date ("none")
|
168
|
+
# The date after which this dispatch will be disabled as an ISO 8601
|
169
|
+
# string, or \"none\" for no expiration date.
|
170
|
+
#
|
171
|
+
# @option options [String] :external_config ("")
|
172
|
+
# Serialized external configuration information to include when
|
173
|
+
# launching the dispatched package.
|
174
|
+
#
|
175
|
+
# @return [ScormEngine::Response]
|
176
|
+
#
|
177
|
+
def put_dispatch(options = {})
|
178
|
+
require_options(options, :dispatch_id, :destination_id, :course_id)
|
179
|
+
|
180
|
+
body = {
|
181
|
+
destinationId: options[:destination_id],
|
182
|
+
courseId: options[:course_id],
|
183
|
+
allowNewRegistrations: options[:allow_new_registrations],
|
184
|
+
instanced: options[:instanced],
|
185
|
+
registrationCap: options[:registration_cap],
|
186
|
+
expirationDate: options[:expiration_date],
|
187
|
+
externalConfig: options[:external_config],
|
188
|
+
}
|
189
|
+
|
190
|
+
response = put("dispatches/#{options[:dispatch_id]}", {}, body)
|
191
|
+
|
192
|
+
Response.new(raw_response: response)
|
193
|
+
end
|
194
|
+
|
195
|
+
#
|
196
|
+
# Delete a dispatch.
|
197
|
+
#
|
198
|
+
# @see http://rustici-docs.s3.amazonaws.com/engine/2017.1.x.dispatch/api-dispatch.html#tenant__dispatches__dispatchId__delete
|
199
|
+
#
|
200
|
+
# @param [Hash] options
|
201
|
+
#
|
202
|
+
# @option options [String] :dispatch_id
|
203
|
+
# The ID of the dispatch to delete.
|
204
|
+
#
|
205
|
+
# @return [ScormEngine::Response]
|
206
|
+
#
|
207
|
+
def delete_dispatch(options = {})
|
208
|
+
require_options(options, :dispatch_id)
|
209
|
+
|
210
|
+
response = delete("dispatches/#{options[:dispatch_id]}")
|
211
|
+
|
212
|
+
Response.new(raw_response: response)
|
213
|
+
end
|
214
|
+
|
215
|
+
#
|
216
|
+
# Get the enabled status of a dispatch.
|
217
|
+
#
|
218
|
+
# @see http://rustici-docs.s3.amazonaws.com/engine/2017.1.x.dispatch/api-dispatch.html#tenant__dispatches__dispatchId__enabled_get
|
219
|
+
#
|
220
|
+
# @param [Hash] options
|
221
|
+
#
|
222
|
+
# @option options [String] :dispatch_id
|
223
|
+
# The ID of the dispatch to delete.
|
224
|
+
#
|
225
|
+
# @return [ScormEngine::Response]
|
226
|
+
#
|
227
|
+
def get_dispatch_enabled(options = {})
|
228
|
+
require_options(options, :dispatch_id)
|
229
|
+
|
230
|
+
response = get("dispatches/#{options[:dispatch_id]}/enabled")
|
231
|
+
|
232
|
+
result = response.success? ? response.body : nil
|
233
|
+
|
234
|
+
Response.new(raw_response: response, result: result)
|
235
|
+
end
|
236
|
+
|
237
|
+
#
|
238
|
+
# Enable or disable the dispatch.
|
239
|
+
#
|
240
|
+
# @see http://rustici-docs.s3.amazonaws.com/engine/2017.1.x.dispatch/api-dispatch.html#tenant__dispatches__dispatchId__enabled_put
|
241
|
+
#
|
242
|
+
# @param [Hash] options
|
243
|
+
#
|
244
|
+
# @option options [String] :dispatch_id
|
245
|
+
# The ID of the dispatch
|
246
|
+
#
|
247
|
+
# @option options [Boolean] :enabled
|
248
|
+
# The enabledness of the dispatch
|
249
|
+
#
|
250
|
+
# @return [ScormEngine::Response]
|
251
|
+
#
|
252
|
+
def put_dispatch_enabled(options = {})
|
253
|
+
require_options(options, :dispatch_id, :enabled)
|
254
|
+
|
255
|
+
body = options[:enabled].to_s
|
256
|
+
|
257
|
+
response = put("dispatches/#{options[:dispatch_id]}/enabled", {}, body)
|
258
|
+
|
259
|
+
Response.new(raw_response: response)
|
260
|
+
end
|
261
|
+
|
262
|
+
#
|
263
|
+
# Get the ZIP dispatch package.
|
264
|
+
#
|
265
|
+
# @see http://rustici-docs.s3.amazonaws.com/engine/2017.1.x.dispatch/api-dispatch.html#tenant__dispatches__dispatchId__zip_get
|
266
|
+
#
|
267
|
+
# @param [Hash] options
|
268
|
+
#
|
269
|
+
# @option options [String] :dispatch_id
|
270
|
+
# The ID of the dispatch to delete.
|
271
|
+
#
|
272
|
+
# @option options [String] :type (SCORM12)
|
273
|
+
# The type of dispatch package to export (SCORM12, SCORM20043RDEDITION or AICC)
|
274
|
+
#
|
275
|
+
# @return [ScormEngine::Models::DispatchZip]
|
276
|
+
#
|
277
|
+
def get_dispatch_zip(options = {})
|
278
|
+
require_options(options, :dispatch_id)
|
279
|
+
|
280
|
+
options = options.dup
|
281
|
+
dispatch_id = options.delete(:dispatch_id)
|
282
|
+
options[:type] ||= "SCORM12"
|
283
|
+
|
284
|
+
response = get("dispatches/#{dispatch_id}/zip", options)
|
285
|
+
|
286
|
+
result = if response.success?
|
287
|
+
ScormEngine::Models::DispatchZip.new(
|
288
|
+
dispatch_id: dispatch_id,
|
289
|
+
type: options[:type],
|
290
|
+
filename: response.headers["content-disposition"].match(/; filename="(.*?)"/)&.captures&.first,
|
291
|
+
body: response.body,
|
292
|
+
)
|
293
|
+
end
|
294
|
+
|
295
|
+
Response.new(raw_response: response, result: result)
|
296
|
+
end
|
297
|
+
|
298
|
+
end
|
299
|
+
end
|
300
|
+
end
|
301
|
+
end
|