scorm_engine 0.3.0 → 0.4.0
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 +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
|