scorm_engine 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (147) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +3 -0
  3. data/Rakefile +13 -0
  4. data/lib/scorm_engine.rb +13 -0
  5. data/lib/scorm_engine/api/endpoints.rb +50 -0
  6. data/lib/scorm_engine/api/endpoints/about.rb +59 -0
  7. data/lib/scorm_engine/api/endpoints/courses.rb +136 -0
  8. data/lib/scorm_engine/api/endpoints/courses/configuration.rb +146 -0
  9. data/lib/scorm_engine/api/endpoints/courses/import.rb +83 -0
  10. data/lib/scorm_engine/api/endpoints/ping.rb +20 -0
  11. data/lib/scorm_engine/api/endpoints/registrations.rb +321 -0
  12. data/lib/scorm_engine/api/endpoints/registrations/configuration.rb +146 -0
  13. data/lib/scorm_engine/api/endpoints/registrations/launch_history.rb +47 -0
  14. data/lib/scorm_engine/client.rb +17 -0
  15. data/lib/scorm_engine/configuration.rb +43 -0
  16. data/lib/scorm_engine/faraday/connection.rb +35 -0
  17. data/lib/scorm_engine/faraday/request.rb +54 -0
  18. data/lib/scorm_engine/models.rb +9 -0
  19. data/lib/scorm_engine/models/course.rb +66 -0
  20. data/lib/scorm_engine/models/course_configuration.rb +37 -0
  21. data/lib/scorm_engine/models/course_import.rb +42 -0
  22. data/lib/scorm_engine/models/learner.rb +24 -0
  23. data/lib/scorm_engine/models/registration.rb +82 -0
  24. data/lib/scorm_engine/models/registration_activity_detail.rb +37 -0
  25. data/lib/scorm_engine/models/registration_configuration.rb +37 -0
  26. data/lib/scorm_engine/models/registration_launch_history.rb +92 -0
  27. data/lib/scorm_engine/models/registration_runtime_interaction.rb +52 -0
  28. data/lib/scorm_engine/response.rb +26 -0
  29. data/lib/scorm_engine/utils.rb +13 -0
  30. data/lib/scorm_engine/version.rb +3 -0
  31. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_About/_get_about/is_successful.yml +38 -0
  32. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_About/_get_about/knows_the_platform.yml +38 -0
  33. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_About/_get_about/knows_the_version.yml +38 -0
  34. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_About/_get_about_user_count/accepts_before_option.yml +38 -0
  35. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_About/_get_about_user_count/accepts_since_option.yml +38 -0
  36. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_About/_get_about_user_count/is_successful.yml +38 -0
  37. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_About/_get_about_user_count/tracks_combined_counts.yml +38 -0
  38. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_About/_get_about_user_count/tracks_per_tenantcounts.yml +38 -0
  39. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses/_delete_course/fails_when_id_is_invalid.yml +38 -0
  40. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses/_delete_course/works.yml +32 -0
  41. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses/_get_course_detail/is_successful.yml +41 -0
  42. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses/_get_course_detail/results/sucessfully_creates_the_Course_attributes.yml +41 -0
  43. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses/_get_course_preview/fails_when_id_is_invalid.yml +38 -0
  44. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses/_get_course_preview/is_successful.yml +38 -0
  45. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses/_get_course_preview/results/returns_a_URL_string.yml +38 -0
  46. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses/_get_courses/_course_id_option/fetches_a_single_course_but_perhaps_multiple_versions.yml +39 -0
  47. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses/_get_courses/_course_id_option/returns_404_when_ID_is_invalid.yml +38 -0
  48. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses/_get_courses/_more_option_pagination_/returns_all_the_courses.yml +89 -0
  49. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses/_get_courses/_more_option_pagination_/returns_the_more_key_in_the_raw_response.yml +48 -0
  50. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses/_get_courses/_since_option/fails_when_passed_an_invalid_value.yml +37 -0
  51. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses/_get_courses/_since_option/works.yml +43 -0
  52. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses/_get_courses/is_successful.yml +43 -0
  53. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses/_get_courses/results/is_an_enumerator_of_Course_models.yml +43 -0
  54. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses/_get_courses/results/sucessfully_creates_the_Course_attributes.yml +43 -0
  55. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses_Configuration/_get_course_configuration/fails_when_id_is_invalid.yml +38 -0
  56. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses_Configuration/_get_course_configuration/is_successful.yml +38 -0
  57. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses_Configuration/_get_course_configuration/results/makes_settings_available_as_key/value_pairs.yml +38 -0
  58. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses_Configuration/_get_course_configuration_setting/fails_when_course_id_is_invalid.yml +38 -0
  59. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses_Configuration/_get_course_configuration_setting/fails_when_setting_id_is_invalid.yml +36 -0
  60. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses_Configuration/_get_course_configuration_setting/is_successful.yml +65 -0
  61. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses_Configuration/_get_course_configuration_setting/results/returns_the_value_as_a_string.yml +65 -0
  62. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses_Configuration/_post_course_configuration/fails_when_id_is_invalid.yml +38 -0
  63. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses_Configuration/_post_course_configuration/fails_when_settings_are_invalid.yml +36 -0
  64. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses_Configuration/_post_course_configuration/is_successful.yml +32 -0
  65. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses_Configuration/_post_course_configuration/persists_the_settings.yml +131 -0
  66. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses_Configuration/_put_course_configuration_setting/fails_when_course_id_is_invalid.yml +38 -0
  67. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses_Configuration/_put_course_configuration_setting/fails_when_setting_id_is_invalid.yml +36 -0
  68. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses_Configuration/_put_course_configuration_setting/is_successful.yml +65 -0
  69. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses_Configuration/_put_course_configuration_setting/results/persists_the_changes.yml +98 -0
  70. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses_Import/_get_course_import/successful_imports/works.yml +147 -0
  71. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses_Import/_get_course_import/unsuccessful_imports/fails_to_import_given_an_invalid_url.yml +326 -0
  72. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses_Import/_post_course_import/successful_imports/works.yml +38 -0
  73. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Courses_Import/_post_course_import/unsuccessful_imports/fails_to_import_a_previously_existing_course.yml +36 -0
  74. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Ping/_get_ping/is_successful.yml +38 -0
  75. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Ping/_get_ping/reports_the_api_is_up.yml +38 -0
  76. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Ping/_get_ping/with_invalid_password/is_unsuccessful.yml +41 -0
  77. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Ping/_get_ping/with_invalid_password/returns_status_403.yml +41 -0
  78. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_delete_registration/is_failure_when_registration_does_not_exist.yml +38 -0
  79. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_delete_registration/is_successful_when_registration_exists.yml +32 -0
  80. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registration_exists/is_false_when_registration_does_not_exist.yml +38 -0
  81. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registration_exists/is_true_when_registration_exists.yml +36 -0
  82. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registration_instances/includes_results_we_expect.yml +39 -0
  83. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registration_instances/is_successful.yml +39 -0
  84. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registration_instances/returns_an_array_of_registrations.yml +39 -0
  85. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registration_launch_link/fails_when_id_is_invalid.yml +38 -0
  86. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registration_launch_link/is_successful.yml +38 -0
  87. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registration_launch_link/results/returns_a_URL_string.yml +38 -0
  88. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registration_progress/detail/does_not_return_activity_details_by_default.yml +39 -0
  89. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registration_progress/detail/returns_activity_details_if_requested.yml +41 -0
  90. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registration_progress/fails_when_registration_does_not_exist.yml +38 -0
  91. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registration_progress/returns_a_registration_when_it_exists.yml +39 -0
  92. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registrations/filtering_by_course_id/excludes_results.yml +38 -0
  93. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registrations/filtering_by_course_id/includes_results.yml +40 -0
  94. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registrations/filtering_by_learner_id/excludes_results.yml +38 -0
  95. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registrations/filtering_by_learner_id/includes_results.yml +39 -0
  96. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registrations/includes_results_we_expect.yml +40 -0
  97. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registrations/is_successful.yml +40 -0
  98. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registrations/returns_an_array_of_registrations.yml +40 -0
  99. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_post_registration/fails_if_course_id_is_invalid.yml +36 -0
  100. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_post_registration/fails_if_registration_id_already_exists.yml +36 -0
  101. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_post_registration/is_successful.yml +61 -0
  102. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations_Configuration/_get_registration_configuration/fails_when_id_is_invalid.yml +38 -0
  103. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations_Configuration/_get_registration_configuration/is_successful.yml +38 -0
  104. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations_Configuration/_get_registration_configuration/results/makes_settings_available_as_key/value_pairs.yml +38 -0
  105. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations_Configuration/_get_registration_configuration_setting/fails_when_registration_id_is_invalid.yml +38 -0
  106. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations_Configuration/_get_registration_configuration_setting/fails_when_setting_id_is_invalid.yml +36 -0
  107. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations_Configuration/_get_registration_configuration_setting/is_successful.yml +65 -0
  108. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations_Configuration/_get_registration_configuration_setting/results/returns_the_value_as_a_string.yml +65 -0
  109. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations_Configuration/_post_registration_configuration/fails_when_id_is_invalid.yml +38 -0
  110. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations_Configuration/_post_registration_configuration/fails_when_settings_are_invalid.yml +36 -0
  111. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations_Configuration/_post_registration_configuration/is_successful.yml +32 -0
  112. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations_Configuration/_post_registration_configuration/persists_the_settings.yml +131 -0
  113. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations_Configuration/_put_registration_configuration_setting/fails_when_registration_id_is_invalid.yml +38 -0
  114. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations_Configuration/_put_registration_configuration_setting/fails_when_setting_id_is_invalid.yml +36 -0
  115. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations_Configuration/_put_registration_configuration_setting/is_successful.yml +65 -0
  116. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations_Configuration/_put_registration_configuration_setting/results/persists_the_changes.yml +98 -0
  117. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations_LaunchHistory/_get_registration_launch_history/fails_when_registration_does_not_exist.yml +38 -0
  118. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations_LaunchHistory/_get_registration_launch_history/is_successful.yml +54 -0
  119. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations_LaunchHistory/_get_registration_launch_history/returns_an_array_of_registration_launch_histories.yml +54 -0
  120. data/spec/fixtures/zip/Non-working SCORM.zip +0 -0
  121. data/spec/fixtures/zip/RuntimeBasicCalls_SCORM20043rdEdition.zip +0 -0
  122. data/spec/scorm_engine/api/endpoints/about_spec.rb +59 -0
  123. data/spec/scorm_engine/api/endpoints/courses/configuration_spec.rb +143 -0
  124. data/spec/scorm_engine/api/endpoints/courses/import_spec.rb +92 -0
  125. data/spec/scorm_engine/api/endpoints/courses_spec.rb +155 -0
  126. data/spec/scorm_engine/api/endpoints/ping_spec.rb +27 -0
  127. data/spec/scorm_engine/api/endpoints/registrations/configuration_spec.rb +154 -0
  128. data/spec/scorm_engine/api/endpoints/registrations/launch_history_spec.rb +46 -0
  129. data/spec/scorm_engine/api/endpoints/registrations_spec.rb +201 -0
  130. data/spec/scorm_engine/configuration_spec.rb +29 -0
  131. data/spec/scorm_engine/models/course_configuration_spec.rb +16 -0
  132. data/spec/scorm_engine/models/course_import_spec.rb +86 -0
  133. data/spec/scorm_engine/models/course_spec.rb +92 -0
  134. data/spec/scorm_engine/models/learner_spec.rb +27 -0
  135. data/spec/scorm_engine/models/registration_activity_detail_spec.rb +101 -0
  136. data/spec/scorm_engine/models/registration_launch_history_spec.rb +86 -0
  137. data/spec/scorm_engine/models/registration_runtime_interaction_spec.rb +91 -0
  138. data/spec/scorm_engine/models/registration_spec.rb +82 -0
  139. data/spec/scorm_engine/utils_spec.rb +15 -0
  140. data/spec/scorm_engine/version_spec.rb +5 -0
  141. data/spec/scorm_engine_spec.rb +2 -0
  142. data/spec/spec_helper.rb +47 -0
  143. data/spec/support/scorm_engine.rb +72 -0
  144. data/spec/support/scorm_engine_client.rb +6 -0
  145. data/spec/support/scorm_engine_configuration.rb +7 -0
  146. data/spec/support/vcr.rb +53 -0
  147. metadata +329 -0
@@ -0,0 +1,20 @@
1
+ module ScormEngine
2
+ module Api
3
+ module Endpoints
4
+ module Ping
5
+ #
6
+ # Get back a message indicating that the API is working.
7
+ #
8
+ # @see http://rustici-docs.s3.amazonaws.com/engine/2017.1.x/api.html#tenant__ping_get
9
+ #
10
+ # @return [ScormEngine::Response]
11
+ #
12
+ def get_ping
13
+ response = get("ping")
14
+
15
+ Response.new(raw_response: response)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,321 @@
1
+ module ScormEngine
2
+ module Api
3
+ module Endpoints
4
+ module Registrations
5
+
6
+ #
7
+ # Gets a list of registrations including a summary of the status of
8
+ # each registration.
9
+ #
10
+ # @note Note the "since" parameter exists to allow
11
+ # retreiving only registrations that have changed, and the
12
+ # "before" parameter exists to allow retreiving only
13
+ # registrations that haven't changed.
14
+ #
15
+ # @see http://rustici-docs.s3.amazonaws.com/engine/2017.1.x/api.html#tenant__registrations_get
16
+ #
17
+ # @param [Hash] options
18
+ #
19
+ # @option options [DateTime] :before ()
20
+ # Only registrations updated before the specified ISO 8601 TimeStamp (inclusive)
21
+ # are included. If a time zone is not specified, the server's time zone will be
22
+ # used.
23
+ #
24
+ # @option options [DateTime] :since ()
25
+ # Only registrations updated since the specified ISO 8601 TimeStamp (inclusive)
26
+ # are included. If a time zone is not specified, the server's time zone will be
27
+ # used.
28
+ #
29
+ # @option options [String] :course_id ()
30
+ # Only registrations for the specified course id will be included.
31
+ #
32
+ # @option options [String] :learner_id ()
33
+ # Only registrations for the specified learner id will be included.
34
+ #
35
+ # @return [Enumerator<ScormEngine::Models::Registration>]
36
+ #
37
+ def get_registrations(options = {})
38
+ options = options.dup
39
+ options[:courseId] = options.delete(:course_id) if options.key?(:course_id)
40
+ options[:learnerId] = options.delete(:learner_id) if options.key?(:learner_id)
41
+
42
+ response = get("registrations", options)
43
+
44
+ result = Enumerator.new do |enum|
45
+ loop do
46
+ response.success? && response.body["registrations"].each do |registration|
47
+ enum << ScormEngine::Models::Registration.new_from_api(registration)
48
+ end
49
+ break if !response.success? || response.body["more"].nil?
50
+ response = get(response.body["more"])
51
+ end
52
+ end
53
+
54
+ Response.new(raw_response: response, result: result)
55
+ end
56
+
57
+ #
58
+ # Get all the instances of this the registration specified by the registration ID
59
+ #
60
+ # Multiple instances of a registration are created based on the value
61
+ # you have for the setting "WhenToRestartRegistration". By default,
62
+ # Engine will "restart" a registration once that registration is
63
+ # completed and there is a newer version of that registration's package
64
+ # is available. If both of those conditions are met when the
65
+ # registration is launched, then Engine will create a new instance for
66
+ # that registration.
67
+ #
68
+ # @see http://rustici-docs.s3.amazonaws.com/engine/2017.1.x/api.html#tenant__registrations__registrationId__instances_get
69
+ #
70
+ # @param [Hash] options
71
+ #
72
+ # @option options [String] :registration_id
73
+ # ID for the registration.
74
+ #
75
+ # @option options [DateTime] :before ()
76
+ # Only registrations updated before the specified ISO 8601 TimeStamp (inclusive)
77
+ # are included. If a time zone is not specified, the server's time zone will be
78
+ # used.
79
+ #
80
+ # @option options [DateTime] :since ()
81
+ # Only registrations updated since the specified ISO 8601 TimeStamp (inclusive)
82
+ # are included. If a time zone is not specified, the server's time zone will be
83
+ # used.
84
+ #
85
+ # @return [Enumerator<ScormEngine::Models::Registration>]
86
+ #
87
+ def get_registration_instances(options = {})
88
+ require_options(options, :registration_id)
89
+
90
+ options = options.dup
91
+ registration_id = options.delete(:registration_id)
92
+
93
+ response = get("registrations/#{registration_id}/instances", options)
94
+
95
+ result = Enumerator.new do |enum|
96
+ loop do
97
+ response.success? && response.body["registrations"].each do |registration|
98
+ enum << ScormEngine::Models::Registration.new_from_api(registration)
99
+ end
100
+ break if !response.success? || response.body["more"].nil?
101
+ response = get(response.body["more"])
102
+ end
103
+ end
104
+
105
+ Response.new(raw_response: response, result: result)
106
+ end
107
+
108
+ #
109
+ # Does this registration exist? You can also use the 'instance'
110
+ # parameter to check if a particular instance of a registrations
111
+ # exists.
112
+ #
113
+ # @see http://rustici-docs.s3.amazonaws.com/engine/2017.1.x/api.html#tenant__registrations__registrationId__get
114
+ #
115
+ # @param [Hash] options
116
+ #
117
+ # @option options [String] :registration_id
118
+ # ID for the registration.
119
+ #
120
+ # @option options [String] :instance ()
121
+ # The instance of this registration to use. If not provided, the
122
+ # latest instance will be used.
123
+ #
124
+ # @return [ScormEngine::Response]
125
+ #
126
+ def get_registration_exists(options = {})
127
+ require_options(options, :registration_id)
128
+
129
+ options = options.dup
130
+ registration_id = options.delete(:registration_id)
131
+
132
+ response = get("registrations/#{registration_id}", options)
133
+
134
+ result = response.success? && response.body["exists"]
135
+
136
+ Response.new(raw_response: response, result: result)
137
+ end
138
+
139
+ #
140
+ # Get registration summary
141
+ #
142
+ # @see http://rustici-docs.s3.amazonaws.com/engine/2017.1.x/api.html#tenant__registrations__registrationId__progress_get
143
+ # @see http://rustici-docs.s3.amazonaws.com/engine/2017.1.x/api.html#tenant__registrations__registrationId__progress_detail_get
144
+ #
145
+ # @param [Hash] options
146
+ #
147
+ # @option options [String] :registration_id
148
+ # ID for the registration.
149
+ #
150
+ # @option options [String] :instance ()
151
+ # The instance of this registration to use. If not provided, the
152
+ # latest instance will be used.
153
+ #
154
+ # @option options [Boolean] :detail (false)
155
+ # Whether or not to populate 'activityDetails'.
156
+ #
157
+ # @return [ScormEngine::Models::Registration]
158
+ #
159
+ def get_registration_progress(options = {})
160
+ require_options(options, :registration_id)
161
+
162
+ options = options.dup
163
+ registration_id = options.delete(:registration_id)
164
+ detail = !!options.delete(:detail)
165
+
166
+ url = "registrations/#{registration_id}/progress"
167
+ url += "/detail" if detail
168
+
169
+ response = get(url, options)
170
+
171
+ result = response.success? && ScormEngine::Models::Registration.new_from_api(response.body)
172
+
173
+ Response.new(raw_response: response, result: result)
174
+ end
175
+
176
+ #
177
+ # Delete a registration.
178
+ #
179
+ # @see http://rustici-docs.s3.amazonaws.com/engine/2017.1.x/api.html#tenant__registrations__registrationId__delete
180
+ #
181
+ # @param [Hash] options
182
+ #
183
+ # @option options [String] :registration_id
184
+ # ID for the registration.
185
+ #
186
+ # @return [ScormEngine::Response]
187
+ #
188
+ def delete_registration(options = {})
189
+ require_options(options, :registration_id)
190
+
191
+ options = options.dup
192
+ registration_id = options.delete(:registration_id)
193
+
194
+ response = delete("registrations/#{registration_id}")
195
+
196
+ Response.new(raw_response: response)
197
+ end
198
+
199
+ #
200
+ # Create a registration.
201
+ #
202
+ # @see http://rustici-docs.s3.amazonaws.com/engine/2017.1.x/api.html#tenant__registrations_post
203
+ #
204
+ # @param [Hash] options
205
+ #
206
+ # @option options [String] :course_id
207
+ # The course ID.
208
+ #
209
+ # @option options [String] :registration_id
210
+ # The registration's ID. Must be unique.
211
+ #
212
+ # @option options [String] :learner/:id
213
+ # The learner's ID.
214
+ #
215
+ # @option options [String] :learner/:first_name
216
+ # The learner's first name.
217
+ #
218
+ # @option options [String] :learner/:last_name
219
+ # The learner's last name.
220
+ #
221
+ # @option options [String] :post_back/:url ()
222
+ # Specifies an optional override URL for which to post activity and
223
+ # status data in real time as the course is completed. By default all
224
+ # of these settings are read from your configuration, so only specify
225
+ # this if you need to control it on a per-registration basis.
226
+ #
227
+ # @option options [String] :post_back/:auth_type ("form")
228
+ # Optional parameter to specify how to authorize against the given
229
+ # postbackurl, can be 'form' or 'httpbasic'. If form authentication,
230
+ # the username and password for authentication are submitted as form
231
+ # fields 'username' and 'password', and the registration data as the
232
+ # form field 'data'. If HTTP Basic Authentication is used, the
233
+ # username and password are placed in the standard Authorization HTTP
234
+ # header, and the registration data is the body of the message (sent
235
+ # as application/json content type).
236
+ #
237
+ # @option options [String] :post_back/:user_name ()
238
+ # The user name to be used in authorizing the postback of data to the
239
+ # URL specified by postback url.
240
+ #
241
+ # @option options [String] :post_back/:password ()
242
+ # The password to be used in authorizing the postback of data to the
243
+ # URL specified by postback url.
244
+ #
245
+ # @option options [String] :post_back/:results_format ("course")
246
+ # This parameter allows you to specify a level of detail in the
247
+ # information that is posted back while the course is being taken. It
248
+ # may be one of three values: 'course' (course summary), 'activity'
249
+ # (activity summary), or 'full' (full detail), and is set to 'course'
250
+ # by default. The information will be posted as JSON using the same
251
+ # schema as what is returned in the /progress and /progress/detail
252
+ # endpoints.
253
+ #
254
+ # @return [ScormEngine::Response]
255
+ #
256
+ def post_registration(options = {})
257
+ require_options(options, :course_id, :registration_id, [:learner, :id], [:learner, :first_name], [:learner, :last_name])
258
+
259
+ options = options.dup
260
+
261
+ body = {
262
+ courseId: options[:course_id],
263
+ registrationId: options[:registration_id],
264
+ learner: {
265
+ id: options[:learner][:id],
266
+ firstName: options[:learner][:first_name],
267
+ lastName: options[:learner][:last_name],
268
+ },
269
+ }
270
+
271
+ if options[:post_back]
272
+ body[:postBack] = {
273
+ authType: options[:post_back][:auth_type],
274
+ userName: options[:post_back][:user_name],
275
+ password: options[:post_back][:password],
276
+ resultsFormat: options[:post_back][:results_format],
277
+ }.reject { |_k, v| v.nil? }
278
+ end
279
+
280
+ response = post("registrations", {}, body)
281
+
282
+ Response.new(raw_response: response)
283
+ end
284
+ end
285
+
286
+ #
287
+ # Returns the link to use to launch this registration
288
+ #
289
+ # @see http://rustici-docs.s3.amazonaws.com/engine/2017.1.x/api.html#tenant__registrations__registrationId__launchLink_get
290
+ #
291
+ # @param [Hash] options
292
+ #
293
+ # @option options [String] :registration_id
294
+ # The ID of the registration.
295
+ #
296
+ # @option options [Integer] :expiry (0)
297
+ # Number of seconds from now this link will expire in. Use 0 for no
298
+ # expiration.
299
+ #
300
+ # @option options [String] :redirect_on_exit_url
301
+ # The URL the application should redirect to when the learner exits a
302
+ # course. If not specified, configured value will be used.
303
+ #
304
+ # @return [String]
305
+ #
306
+ def get_registration_launch_link(options = {})
307
+ require_options(options, :registration_id)
308
+
309
+ options = options.dup
310
+ registration_id = options.delete(:registration_id)
311
+ options[:redirectOnExitUrl] = options.delete(:redirect_on_exit_url) if options.key?(:redirect_on_exit_url)
312
+
313
+ response = get("registrations/#{registration_id}/launchLink", options)
314
+
315
+ result = response.success? && response.body["launchLink"]
316
+
317
+ Response.new(raw_response: response, result: result)
318
+ end
319
+ end
320
+ end
321
+ end
@@ -0,0 +1,146 @@
1
+ #
2
+ # TODO: Consider consolidating this and Courses::Configuration, but only after we're
3
+ # sure they are really 99.9% the same in terms of functionality.
4
+ #
5
+ module ScormEngine
6
+ module Api
7
+ module Endpoints
8
+ module Registrations
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__registrations__registrationId__configuration_get
16
+ #
17
+ # @param [Hash] options
18
+ #
19
+ # @option options [String] :registration_id
20
+ # The ID of the registration to get.
21
+ #
22
+ # @option options [Integer] :instance (nil)
23
+ # The instance of this registration to use. If not provided, the
24
+ # latest instance will be used.
25
+ #
26
+ # @return [ScormEngine::Models::RegistrationConfiguration]
27
+ #
28
+ def get_registration_configuration(options = {})
29
+ require_options(options, :registration_id)
30
+
31
+ options = options.dup
32
+ registration_id = options.delete(:registration_id)
33
+
34
+ response = get("registrations/#{registration_id}/configuration", options)
35
+
36
+ result = response.success? && ScormEngine::Models::RegistrationConfiguration.new_from_api(response.body)
37
+
38
+ Response.new(raw_response: response, result: result)
39
+ end
40
+
41
+ #
42
+ # Bulk set configuration settings via POST request.
43
+ #
44
+ # @see http://rustici-docs.s3.amazonaws.com/engine/2017.1.x/api.html#tenant__registrations__registrationId__configuration_post
45
+ #
46
+ # @param [Hash] options
47
+ #
48
+ # @option options [String] :registration_id
49
+ # The ID of the registration to set.
50
+ #
51
+ # @option options [Integer] :instance (nil)
52
+ # The instance of this registration to use. If not provided, the
53
+ # latest instance will be used.
54
+ #
55
+ # @option options [Hash] :settings
56
+ # Key/value pairs of configuration options to set.
57
+ #
58
+ # @return [ScormEngine::Response]
59
+ #
60
+ def post_registration_configuration(options = {})
61
+ require_options(options, :registration_id, :settings)
62
+
63
+ options = options.dup
64
+ registration_id = options.delete(:registration_id)
65
+ settings = options.delete(:settings)
66
+
67
+ body = { settings: settings.map { |k, v| { "settingId" => k, "value" => v.to_s } } }
68
+
69
+ response = post("registrations/#{registration_id}/configuration", options, body)
70
+
71
+ Response.new(raw_response: response)
72
+ end
73
+
74
+ #
75
+ # Returns the effective value for this configuration setting for the resource being configured.
76
+ #
77
+ # @see http://rustici-docs.s3.amazonaws.com/engine/2017.1.x/api.html#tenant__registrations__registrationId__configuration__settingId__get
78
+ #
79
+ # @param [Hash] options
80
+ #
81
+ # @option options [String] :registration_id
82
+ # The ID of the registration to get.
83
+ #
84
+ # @option options [String] :setting_id
85
+ # The ID of the setting to get.
86
+ #
87
+ # @option options [Integer] :instance (nil)
88
+ # The instance of this registration to use. If not provided, the
89
+ # latest instance will be used.
90
+ #
91
+ # @return [String]
92
+ #
93
+ def get_registration_configuration_setting(options = {})
94
+ require_options(options, :registration_id, :setting_id)
95
+
96
+ options = options.dup
97
+ registration_id = options.delete(:registration_id)
98
+ setting_id = options.delete(:setting_id)
99
+
100
+ response = get("registrations/#{registration_id}/configuration/#{setting_id}", options)
101
+
102
+ result = response.success? && response.body["value"]
103
+
104
+ Response.new(raw_response: response, result: result)
105
+ end
106
+
107
+ #
108
+ # Sets the value for this configuration setting, for the resource being configured.
109
+ #
110
+ # @see http://rustici-docs.s3.amazonaws.com/engine/2017.1.x/api.html#tenant__registrations__registrationId__configuration__settingId__put
111
+ #
112
+ # @param [Hash] options
113
+ #
114
+ # @option options [String] :registration_id
115
+ # The ID of the registration to set.
116
+ #
117
+ # @option options [String] :setting_id
118
+ # The ID of the setting to set.
119
+ #
120
+ # @option options [String] :value ("")
121
+ # The value of the setting to set.
122
+ #
123
+ # @option options [Integer] :instance (nil)
124
+ # The instance of this registration to use. If not provided, the
125
+ # latest instance will be used.
126
+ #
127
+ # @return [ScormEngine::Response]
128
+ #
129
+ def put_registration_configuration_setting(options = {})
130
+ require_options(options, :registration_id, :setting_id)
131
+
132
+ options = options.dup
133
+ registration_id = options.delete(:registration_id)
134
+ setting_id = options.delete(:setting_id)
135
+
136
+ body = { value: options.delete(:value).to_s }
137
+
138
+ response = put("registrations/#{registration_id}/configuration/#{setting_id}", options, body)
139
+
140
+ Response.new(raw_response: response)
141
+ end
142
+ end
143
+ end
144
+ end
145
+ end
146
+ end