scorm_engine 0.6.2 → 0.6.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/lib/scorm_engine/api/endpoints/dispatches.rb +1 -0
  3. data/lib/scorm_engine/api/endpoints/registrations.rb +5 -5
  4. data/lib/scorm_engine/configuration.rb +3 -2
  5. data/lib/scorm_engine/faraday/connection.rb +1 -1
  6. data/lib/scorm_engine/models/course.rb +35 -6
  7. data/lib/scorm_engine/models/course_configuration.rb +3 -3
  8. data/lib/scorm_engine/models/course_import.rb +22 -6
  9. data/lib/scorm_engine/models/destination.rb +9 -4
  10. data/lib/scorm_engine/models/dispatch.rb +44 -5
  11. data/lib/scorm_engine/models/dispatch_zip.rb +20 -2
  12. data/lib/scorm_engine/models/learner.rb +14 -4
  13. data/lib/scorm_engine/models/registration.rb +67 -22
  14. data/lib/scorm_engine/models/registration_activity_detail.rb +21 -11
  15. data/lib/scorm_engine/models/registration_configuration.rb +3 -3
  16. data/lib/scorm_engine/models/registration_launch_history.rb +46 -13
  17. data/lib/scorm_engine/models/registration_runtime_interaction.rb +58 -11
  18. data/lib/scorm_engine/version.rb +1 -1
  19. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatch_zip/fails_given_an_invalid_id.yml +3 -3
  20. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatch_zip/fails_given_an_invalid_type.yml +3 -3
  21. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatch_zip/works.yml +6 -6
  22. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatch_zip/works_when_type_is_AICC.yml +6 -6
  23. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatch_zip/works_when_type_is_SCORM12.yml +6 -6
  24. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatch_zip/works_when_type_is_SCORM2004-3RD.yml +6 -6
  25. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_delete_registration/is_failure_when_registration_does_not_exist.yml +3 -5
  26. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_delete_registration/is_successful_when_registration_exists.yml +3 -5
  27. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registration_exists/is_false_when_registration_does_not_exist.yml +3 -5
  28. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registration_exists/is_true_when_registration_exists.yml +3 -5
  29. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registration_instances/includes_results_we_expect.yml +6 -8
  30. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registration_instances/is_successful.yml +6 -8
  31. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registration_instances/returns_an_array_of_registrations.yml +6 -8
  32. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registration_launch_link/fails_when_id_is_invalid.yml +3 -5
  33. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registration_launch_link/is_successful.yml +3 -5
  34. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registration_launch_link/results/returns_a_URL_string.yml +3 -5
  35. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registration_progress/detail/does_not_return_activity_details_by_default.yml +5 -7
  36. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registration_progress/detail/returns_activity_details_if_requested.yml +5 -7
  37. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registration_progress/fails_when_registration_does_not_exist.yml +3 -5
  38. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registration_progress/returns_a_registration_when_it_exists.yml +5 -7
  39. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registrations/filtering_by_course_id/excludes_results.yml +3 -5
  40. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registrations/filtering_by_course_id/includes_results.yml +6 -9
  41. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registrations/filtering_by_learner_id/excludes_results.yml +3 -5
  42. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registrations/filtering_by_learner_id/includes_results.yml +5 -7
  43. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registrations/includes_results_we_expect.yml +6 -9
  44. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registrations/is_successful.yml +6 -9
  45. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_get_registrations/returns_an_array_of_registrations.yml +6 -9
  46. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_post_registration/fails_if_course_id_is_invalid.yml +6 -6
  47. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_post_registration/fails_if_registration_id_already_exists.yml +6 -6
  48. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_post_registration/is_successful.yml +9 -11
  49. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_post_registration/is_successful_even_when_given_a_UTF8/slashed_username.yml +9 -47
  50. data/spec/scorm_engine/api/endpoints/dispatches_spec.rb +1 -1
  51. data/spec/scorm_engine/api/endpoints/registrations_spec.rb +8 -1
  52. data/spec/scorm_engine/configuration_spec.rb +22 -0
  53. data/spec/scorm_engine/models/course_import_spec.rb +2 -2
  54. data/spec/scorm_engine/models/course_spec.rb +2 -2
  55. data/spec/scorm_engine/models/dispatch_zip_spec.rb +1 -1
  56. data/spec/scorm_engine/models/registration_runtime_interaction_spec.rb +7 -0
  57. data/spec/scorm_engine/models/registration_spec.rb +7 -0
  58. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f03bd17c2d3fdd0d6c6327553e3ed8657a7f6c796fa4535944cc003b5cc37335
4
- data.tar.gz: c136aefda64d406464d3f88cf8e6e9f4954df53c93fe351b1c03daff64ce3187
3
+ metadata.gz: 84dbb575f6c280c28cdd591bed82b4d5f208f0a2f8a0d505b2fbbdbb46f37311
4
+ data.tar.gz: b60cd4cd6e1f823c9da3105e06391d322002230fe42c3e1479a7a7a34ea6d2b0
5
5
  SHA512:
6
- metadata.gz: 98bdc0ec1d7dd57cdcb8cf64fcf2a64a5eb7a04b5da0763c4ab7c6ac7285b58119c93f8e5450f42bee9ad8c869a9824331ef4d9655b02a25880a2b2dfaa2aaf6
7
- data.tar.gz: 7aefdb729d6c36ba334da198026f51f9bfbc78de9c8f65317c314e1e23f530961f4c4315b9654b582120603238990a2c06d7f8b535e05e63be845f9046c8efb7
6
+ metadata.gz: a908341227a9c67ee3c65b58c2bd0dd2232e9ce014146f866e2c238a404bda7da36c97086211f38a59e274d1d077ca96e599e4880afd9b40156df30f15f4180f
7
+ data.tar.gz: 89ef5d20c1d7bc5b5652fc2735609e9ed5160fc37cd0d8ff26189f0cf439eff3eda64ba0e4328818850caed8917788bfd6282573c060cfcbc817ba67cd704cd7
@@ -280,6 +280,7 @@ module ScormEngine
280
280
  options = options.dup
281
281
  dispatch_id = options.delete(:dispatch_id)
282
282
  options[:type] ||= "SCORM12"
283
+ options[:type]&.upcase!
283
284
 
284
285
  response = get("dispatches/#{dispatch_id}/zip", options)
285
286
 
@@ -242,11 +242,11 @@ module ScormEngine
242
242
  # The password to be used in authorizing the postback of data to the
243
243
  # URL specified by postback url.
244
244
  #
245
- # @option options [String] :post_back/:results_format ("course")
245
+ # @option options [String] :post_back/:results_format ("COURSE")
246
246
  # This parameter allows you to specify a level of detail in the
247
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'
248
+ # may be one of three values: 'COURSE' (course summary), 'ACTIVITY'
249
+ # (activity summary), or 'FULL' (full detail), and is set to 'COURSE'
250
250
  # by default. The information will be posted as JSON using the same
251
251
  # schema as what is returned in the /progress and /progress/detail
252
252
  # endpoints.
@@ -271,10 +271,10 @@ module ScormEngine
271
271
  if options[:post_back]
272
272
  body[:postBack] = {
273
273
  url: options[:post_back][:url],
274
- authType: options[:post_back][:auth_type],
274
+ authType: options[:post_back][:auth_type]&.upcase,
275
275
  userName: options[:post_back][:user_name],
276
276
  password: options[:post_back][:password],
277
- resultsFormat: options[:post_back][:results_format],
277
+ resultsFormat: options[:post_back][:results_format]&.upcase,
278
278
  }.reject { |_k, v| v.nil? }
279
279
  end
280
280
 
@@ -11,7 +11,7 @@ module ScormEngine
11
11
 
12
12
  class Configuration
13
13
  # http://rustici-docs.s3.amazonaws.com/engine/2017.1.x/api.html
14
- attr_accessor :host, :path_prefix
14
+ attr_accessor :protocol, :host, :path_prefix
15
15
 
16
16
  # http://rustici-docs.s3.amazonaws.com/engine/2017.1.x/Architecture-API.html#api-authentication
17
17
  attr_accessor :username, :password
@@ -25,8 +25,9 @@ module ScormEngine
25
25
  end
26
26
 
27
27
  def reset
28
+ @protocol = ENV.fetch("SCORM_ENGINE_PROTOCOL", "https")
28
29
  @host = ENV["SCORM_ENGINE_HOST"]
29
- @path_prefix = "/ScormEngineInterface/api/v1/"
30
+ @path_prefix = ENV.fetch("SCORM_ENGINE_PATH_PREFIX", "/ScormEngineInterface/api/v1/")
30
31
 
31
32
  @username = ENV["SCORM_ENGINE_USERNAME"]
32
33
  @password = ENV["SCORM_ENGINE_PASSWORD"]
@@ -7,7 +7,7 @@ module ScormEngine
7
7
 
8
8
  def base_uri
9
9
  uri = URI("")
10
- uri.scheme = "https" # TODO: Make configurable
10
+ uri.scheme = ScormEngine.configuration.protocol
11
11
  uri.host = ScormEngine.configuration.host
12
12
  uri.path = ScormEngine.configuration.path_prefix
13
13
  URI(uri.to_s) # convert URI::Generic to URI:HTTPS
@@ -3,11 +3,40 @@ require "time"
3
3
  module ScormEngine
4
4
  module Models
5
5
  class Course < Base
6
- # TODO: Not sure we want this to be settable. Will depend on how we go
7
- # about creating/updating records. For now it makes it easier to create
8
- # instances from API options hash.
9
- attr_accessor :id, :version, :title, :registration_count, :updated, :description,
10
- :scaled_passing_score
6
+ # @attr
7
+ # The external identification of this course.
8
+ # @return [String]
9
+ attr_accessor :id
10
+
11
+ # @attr
12
+ # The version of this course.
13
+ # @return [Integer]
14
+ attr_accessor :version
15
+
16
+ # @attr
17
+ # The title of this course.
18
+ # @return [String]
19
+ attr_accessor :title
20
+
21
+ # @attr
22
+ #
23
+ # @return [Integer]
24
+ attr_accessor :registration_count
25
+
26
+ # @attr
27
+ #
28
+ # @return [Time]
29
+ attr_accessor :updated
30
+
31
+ # @attr
32
+ # The description of this course.
33
+ # @return [String]
34
+ attr_accessor :description
35
+
36
+ # @attr
37
+ # The score required of a learner to pass this course.
38
+ # @return [Integer]
39
+ attr_accessor :scaled_passing_score
11
40
 
12
41
  # @attr
13
42
  # The course's learning standard.
@@ -32,7 +61,7 @@ module ScormEngine
32
61
  this.updated = Time.parse(options["updated"]) if options.key?("updated")
33
62
  this.description = options.fetch("metadata", {})["description"]
34
63
  this.scaled_passing_score = get_scaled_passing_score_from_api(options)
35
- this.course_learning_standard = options["courseLearningStandard"]
64
+ this.course_learning_standard = options["courseLearningStandard"]&.upcase
36
65
  this.web_path = options["webPath"]
37
66
 
38
67
  this
@@ -1,9 +1,9 @@
1
1
  module ScormEngine
2
2
  module Models
3
3
  class CourseConfiguration < Base
4
- # TODO: Not sure we want this to be settable. Will depend on how we go
5
- # about creating/updating records. For now it makes it easier to create
6
- # instances from API options hash.
4
+ # @attr
5
+ #
6
+ # @return [Hash]
7
7
  attr_accessor :settings
8
8
 
9
9
  def self.new_from_api(options = {})
@@ -1,10 +1,26 @@
1
1
  module ScormEngine
2
2
  module Models
3
3
  class CourseImport < Base
4
- # TODO: Not sure we want this to be settable. Will depend on how we go
5
- # about creating/updating records. For now it makes it easier to create
6
- # instances from API options hash.
7
- attr_accessor :id, :status, :parser_warnings, :course
4
+
5
+ # @attr
6
+ # The ID of this course import (not the course id)
7
+ # @return [String]
8
+ attr_accessor :id
9
+
10
+ # @attr
11
+ #
12
+ # @return [String] (RUNNING, COMPLETE, ERROR)
13
+ attr_accessor :status
14
+
15
+ # @attr
16
+ #
17
+ # @return [Array<String>]
18
+ attr_accessor :parser_warnings
19
+
20
+ # @attr
21
+ #
22
+ # @return [ScormEngine::Models::Course]
23
+ attr_accessor :course
8
24
 
9
25
  def self.new_from_api(options = {})
10
26
  this = new
@@ -12,11 +28,11 @@ module ScormEngine
12
28
 
13
29
  if options.key?("importResult")
14
30
  this.id = options["result"]
15
- this.status = options.fetch("importResult", {})["status"]
31
+ this.status = options.fetch("importResult", {})["status"]&.upcase
16
32
  this.parser_warnings = options.fetch("importResult", {})["parserWarnings"]
17
33
  else
18
34
  this.id = options["jobId"]
19
- this.status = options["status"]
35
+ this.status = options["status"]&.upcase
20
36
  this.course = Course.new_from_api(options["course"]) if options.key?("course") # unavailable in error states
21
37
  end
22
38
 
@@ -1,10 +1,15 @@
1
1
  module ScormEngine
2
2
  module Models
3
3
  class Destination < Base
4
- # TODO: Not sure we want this to be settable. Will depend on how we go
5
- # about creating/updating records. For now it makes it easier to create
6
- # instances from API options hash.
7
- attr_accessor :id, :name
4
+ # @attr
5
+ # The ID of this destination.
6
+ # @return [String]
7
+ attr_accessor :id
8
+
9
+ # @attr
10
+ # The name of this destination.
11
+ # @return [String]
12
+ attr_accessor :name
8
13
 
9
14
  def self.new_from_api(options = {})
10
15
  this = new
@@ -3,11 +3,50 @@ require "date"
3
3
  module ScormEngine
4
4
  module Models
5
5
  class Dispatch < Base
6
- # TODO: Not sure we want this to be settable. Will depend on how we go
7
- # about creating/updating records. For now it makes it easier to create
8
- # instances from API options hash.
9
- attr_accessor :id, :destination_id, :course_id, :allow_new_registrations,
10
- :instanced, :registration_cap, :expiration_date, :external_config
6
+ # @attr
7
+ # The external identification of this dispatch.
8
+ # @return [String]
9
+ attr_accessor :id
10
+
11
+ # @attr
12
+ # The external identification of the destination.
13
+ # @return [String]
14
+ attr_accessor :destination_id
15
+
16
+ # @attr
17
+ # The external identification of the course.
18
+ # @return [String]
19
+ attr_accessor :course_id
20
+
21
+ # @attr
22
+ # If true, then new registrations can be created for this dispatch.
23
+ # @return [Boolean]
24
+ attr_accessor :allow_new_registrations
25
+
26
+ # @attr
27
+ # If true, then a new registration instance will be created if the client
28
+ # LMS doesn't provide launch data for an existing one. Otherwise, the
29
+ # same instance will always be used for the given cmi.learner_id.
30
+ # @return [Boolean]
31
+ attr_accessor :instanced
32
+
33
+ # @attr
34
+ # The maximum number of registrations that can be created for this
35
+ # dispatch, where '0' means 'unlimited registrations'.
36
+ # @return [Integer]
37
+ attr_accessor :registration_cap
38
+
39
+ # @attr
40
+ # The date after which this dispatch will be disabled as an ISO 8601
41
+ # string, or "none" for no expiration date.
42
+ # @return [Time]
43
+ attr_accessor :expiration_date
44
+
45
+ # @attr
46
+ # Serialized external configuration information to include when launching
47
+ # the dispatched package.
48
+ # @return [String]
49
+ attr_accessor :external_config
11
50
 
12
51
  def self.new_from_api(options = {})
13
52
  this = new
@@ -1,12 +1,30 @@
1
1
  module ScormEngine
2
2
  module Models
3
3
  class DispatchZip < Base
4
- attr_accessor :dispatch_id, :type, :filename, :body
4
+ # @attr
5
+ # The external identification of the dispatch.
6
+ # @return [String]
7
+ attr_accessor :dispatch_id
8
+
9
+ # @attr
10
+ # The type of ZIP package to generate.
11
+ # @return [String] (SCORM12, SCORM2004-3RD, AICC)
12
+ attr_accessor :type
13
+
14
+ # @attr
15
+ #
16
+ # @return [String]
17
+ attr_accessor :filename
18
+
19
+ # @attr
20
+ #
21
+ # @return [String]
22
+ attr_accessor :body
5
23
 
6
24
  def initialize(options = {})
7
25
  @options = options.dup
8
26
  @dispatch_id = options[:dispatch_id]
9
- @type = options[:type]
27
+ @type = options[:type]&.upcase
10
28
  @filename = options[:filename]
11
29
  @body = options[:body]
12
30
  end
@@ -1,10 +1,20 @@
1
1
  module ScormEngine
2
2
  module Models
3
3
  class Learner < Base
4
- # TODO: Not sure we want this to be settable. Will depend on how we go
5
- # about creating/updating records. For now it makes it easier to create
6
- # instances from API options hash.
7
- attr_accessor :id, :first_name, :last_name
4
+ # @attr
5
+ # The external identification of the learner.
6
+ # @return [String]
7
+ attr_accessor :id
8
+
9
+ # @attr
10
+ # The learner's first name.
11
+ # @return [String]
12
+ attr_accessor :first_name
13
+
14
+ # @attr
15
+ # The learner's last name.
16
+ # @return [String]
17
+ attr_accessor :last_name
8
18
 
9
19
  def self.new_from_api(options = {})
10
20
  this = new
@@ -1,21 +1,10 @@
1
- #
2
- # TODO: Incorporate all the activity props from:
3
- # http://rustici-docs.s3.amazonaws.com/engine/2017.1.x/api.html#tenant__registrations__registrationId__progress_get
4
- # http://rustici-docs.s3.amazonaws.com/engine/2017.1.x/api.html#tenant__registrations__registrationId__progress_detail_get
5
- #
6
- # TODO: Confirmed they are the only values. Integrate them into the model.
7
- # registrationCompletion: ["COMPLETED", "INCOMPLETE", "UNKNOWN"]
8
- # registrationSuccess: ["Unknown", "Passed", "Failed"]
9
- #
10
1
  module ScormEngine
11
2
  module Models
12
3
  class Registration < Base
13
- # TODO: Not sure we want this to be settable. Will depend on how we go
14
- # about creating/updating records. For now it makes it easier to create
15
- # instances from API options hash.
16
- attr_accessor :id, :instance, :updated,
17
- :total_seconds_tracked, :score, :course, :learner, :activity_details,
18
- :first_access_date, :last_access_date, :completed_date, :created_date
4
+ # @attr
5
+ # The external identification of the registration.
6
+ # @return [String]
7
+ attr_accessor :id
19
8
 
20
9
  # @attr
21
10
  # Has this registration been completed?
@@ -37,6 +26,62 @@ module ScormEngine
37
26
  # @return [Float] (Unknown Passed Failed)
38
27
  attr_accessor :registration_completion_amount
39
28
 
29
+ # @attr
30
+ # Instance of this registration (typically used for reoccurring training), starts at 0.
31
+
32
+ # @return [String]
33
+ attr_accessor :instance
34
+
35
+ # @attr
36
+ #
37
+ # @return [Time]
38
+ attr_accessor :updated
39
+
40
+ # @attr
41
+ # How long the learner spent taking this registration, in seconds.
42
+ # @return [Integer]
43
+ attr_accessor :total_seconds_tracked
44
+
45
+ # @attr
46
+ # Scaled score between 0 and 100.
47
+ # @return [Float]
48
+ attr_accessor :score
49
+
50
+ # @attr
51
+ #
52
+ # @return [ScormEngine::Models::Course]
53
+ attr_accessor :course
54
+
55
+ # @attr
56
+ #
57
+ # @return [ScormEngine::Models::Learner]
58
+ attr_accessor :learner
59
+
60
+ # @attr
61
+ #
62
+ # @return [ScormEngine::Models::RegistrationActivityDetail]
63
+ attr_accessor :activity_details
64
+
65
+ # @attr
66
+ # Time of the learner's first interaction with this registration.
67
+ # @return [Time]
68
+ attr_accessor :first_access_date
69
+
70
+ # @attr
71
+ # Time of the learner's last interaction with this registration.
72
+ # @return [Time]
73
+ attr_accessor :last_access_date
74
+
75
+ # @attr
76
+ # Time of the learner's first completion of this registration.
77
+ # @return [Time]
78
+ attr_accessor :completed_date
79
+
80
+ # @attr
81
+ # Time of the creation of this registration.
82
+ # @return [Time]
83
+ attr_accessor :created_date
84
+
40
85
  def self.new_from_api(options = {})
41
86
  this = new
42
87
 
@@ -44,9 +89,9 @@ module ScormEngine
44
89
  this.id = options["id"]
45
90
  this.instance = options["instance"]
46
91
  this.updated = Time.parse(options["updated"]) if options.key?("updated")
47
- this.registration_completion = options["registrationCompletion"]
48
- this.registration_success = options["registrationSuccess"]
49
- this.total_seconds_tracked = options["totalSecondsTracked"]
92
+ this.registration_completion = options["registrationCompletion"]&.upcase
93
+ this.registration_success = options["registrationSuccess"]&.upcase
94
+ this.total_seconds_tracked = options["totalSecondsTracked"]&.to_i
50
95
  this.first_access_date = Time.parse(options["firstAccessDate"]) if options.key?("firstAccessDate")
51
96
  this.last_access_date = Time.parse(options["lastAccessDate"]) if options.key?("lastAccessDate")
52
97
  this.created_date = Time.parse(options["createdDate"]) if options.key?("createdDate")
@@ -92,8 +137,8 @@ module ScormEngine
92
137
  # Returns true, false or nil if success status is unknown.
93
138
  #
94
139
  def passed?
95
- return nil if registration_success == "Unknown"
96
- registration_success == "Passed"
140
+ return nil if registration_success == "UNKNOWN"
141
+ registration_success == "PASSED"
97
142
  end
98
143
 
99
144
  #
@@ -103,8 +148,8 @@ module ScormEngine
103
148
  # Returns true, false or nil if success status is unknown.
104
149
  #
105
150
  def failed?
106
- return nil if registration_success == "Unknown"
107
- registration_success == "Failed"
151
+ return nil if registration_success == "UNKNOWN"
152
+ registration_success == "FAILED"
108
153
  end
109
154
 
110
155
  #