scorm_engine 0.6.1 → 0.6.2
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/models/registration.rb +66 -3
- data/lib/scorm_engine/models/registration_activity_detail.rb +90 -0
- data/lib/scorm_engine/version.rb +1 -1
- data/spec/scorm_engine/models/registration_activity_detail_spec.rb +102 -0
- data/spec/scorm_engine/models/registration_spec.rb +68 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f03bd17c2d3fdd0d6c6327553e3ed8657a7f6c796fa4535944cc003b5cc37335
|
4
|
+
data.tar.gz: c136aefda64d406464d3f88cf8e6e9f4954df53c93fe351b1c03daff64ce3187
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 98bdc0ec1d7dd57cdcb8cf64fcf2a64a5eb7a04b5da0763c4ab7c6ac7285b58119c93f8e5450f42bee9ad8c869a9824331ef4d9655b02a25880a2b2dfaa2aaf6
|
7
|
+
data.tar.gz: 7aefdb729d6c36ba334da198026f51f9bfbc78de9c8f65317c314e1e23f530961f4c4315b9654b582120603238990a2c06d7f8b535e05e63be845f9046c8efb7
|
@@ -13,10 +13,29 @@ module ScormEngine
|
|
13
13
|
# TODO: Not sure we want this to be settable. Will depend on how we go
|
14
14
|
# about creating/updating records. For now it makes it easier to create
|
15
15
|
# instances from API options hash.
|
16
|
-
attr_accessor :id, :instance, :updated,
|
16
|
+
attr_accessor :id, :instance, :updated,
|
17
17
|
:total_seconds_tracked, :score, :course, :learner, :activity_details,
|
18
|
-
:first_access_date, :last_access_date, :completed_date, :created_date
|
19
|
-
|
18
|
+
:first_access_date, :last_access_date, :completed_date, :created_date
|
19
|
+
|
20
|
+
# @attr
|
21
|
+
# Has this registration been completed?
|
22
|
+
# @return [String] (UNKNOWN COMPLETED INCOMPLETE)
|
23
|
+
attr_accessor :registration_completion
|
24
|
+
|
25
|
+
# @attr
|
26
|
+
# Has this registration been passed?
|
27
|
+
# @return [String] (Unknown Passed Failed)
|
28
|
+
attr_accessor :registration_success
|
29
|
+
|
30
|
+
# @attr
|
31
|
+
# A decimal value between 0 and 1 representing the percentage of this
|
32
|
+
# course that the learner has completed so far, if known. Note: for
|
33
|
+
# learning standards other than SCORM 2004 4th Edition, this value is
|
34
|
+
# based on the percentage of activities completed/passed. This means that
|
35
|
+
# single-activity courses in those standards will always return either 0
|
36
|
+
# or 1.
|
37
|
+
# @return [Float] (Unknown Passed Failed)
|
38
|
+
attr_accessor :registration_completion_amount
|
20
39
|
|
21
40
|
def self.new_from_api(options = {})
|
22
41
|
this = new
|
@@ -44,6 +63,50 @@ module ScormEngine
|
|
44
63
|
this
|
45
64
|
end
|
46
65
|
|
66
|
+
#
|
67
|
+
# Has this registration been completed?
|
68
|
+
#
|
69
|
+
# @return [Boolean]
|
70
|
+
# Returns true, false or nil if completion status is unknown.
|
71
|
+
#
|
72
|
+
def complete?
|
73
|
+
return nil if registration_completion == "UNKNOWN"
|
74
|
+
registration_completion == "COMPLETED"
|
75
|
+
end
|
76
|
+
|
77
|
+
#
|
78
|
+
# Is this registration incomplete?
|
79
|
+
#
|
80
|
+
# @return [Boolean]
|
81
|
+
# Returns true, false or nil if completion status is unknown.
|
82
|
+
#
|
83
|
+
def incomplete?
|
84
|
+
return nil if registration_completion == "UNKNOWN"
|
85
|
+
registration_completion == "INCOMPLETE"
|
86
|
+
end
|
87
|
+
|
88
|
+
#
|
89
|
+
# Has this registration been passed?
|
90
|
+
#
|
91
|
+
# @return [Boolean]
|
92
|
+
# Returns true, false or nil if success status is unknown.
|
93
|
+
#
|
94
|
+
def passed?
|
95
|
+
return nil if registration_success == "Unknown"
|
96
|
+
registration_success == "Passed"
|
97
|
+
end
|
98
|
+
|
99
|
+
#
|
100
|
+
# Has this registration failed?
|
101
|
+
#
|
102
|
+
# @return [Boolean]
|
103
|
+
# Returns true, false or nil if success status is unknown.
|
104
|
+
#
|
105
|
+
def failed?
|
106
|
+
return nil if registration_success == "Unknown"
|
107
|
+
registration_success == "Failed"
|
108
|
+
end
|
109
|
+
|
47
110
|
#
|
48
111
|
# Extract and normalize the scaled passing score from the API options.
|
49
112
|
#
|
@@ -6,11 +6,29 @@ module ScormEngine
|
|
6
6
|
# instances from API options hash.
|
7
7
|
attr_accessor :id, :children, :runtime_interactions
|
8
8
|
|
9
|
+
# @attr
|
10
|
+
# Represents whether the current attempt on the activity has been completed.
|
11
|
+
# @return [String] (UNKNOWN COMPLETED INCOMPLETE)
|
12
|
+
attr_accessor :activity_completion
|
13
|
+
|
14
|
+
# @attr
|
15
|
+
# Represents whether the previous attempt on the activity has been completed.
|
16
|
+
# @return [String] (Unknown Completed Incomplete)
|
17
|
+
attr_accessor :previous_attempt_completion
|
18
|
+
|
19
|
+
# @attr
|
20
|
+
# Pass/fail status of primary objective for this activity.
|
21
|
+
# @return [String] (UNKNOWN PASSED FAILED)
|
22
|
+
attr_accessor :activity_success
|
23
|
+
|
9
24
|
def self.new_from_api(options = {})
|
10
25
|
this = new
|
11
26
|
|
12
27
|
this.options = options.dup
|
13
28
|
this.id = options["id"]
|
29
|
+
this.activity_completion = options["activityCompletion"]
|
30
|
+
this.previous_attempt_completion = options["previousAttemptCompletion"]
|
31
|
+
this.activity_success = options["activitySuccess"]
|
14
32
|
|
15
33
|
this.runtime_interactions = get_runtime_interactions_from_api(options)
|
16
34
|
|
@@ -19,6 +37,11 @@ module ScormEngine
|
|
19
37
|
this
|
20
38
|
end
|
21
39
|
|
40
|
+
#
|
41
|
+
# Return a flattened array of all runtime interactions
|
42
|
+
#
|
43
|
+
# @return [Array<RegistrationRuntimeInteraction>]
|
44
|
+
#
|
22
45
|
def all_runtime_interactions
|
23
46
|
(runtime_interactions + children.map(&:all_runtime_interactions)).flatten
|
24
47
|
end
|
@@ -29,6 +52,73 @@ module ScormEngine
|
|
29
52
|
.fetch("runtimeInteractions", [])
|
30
53
|
.map { |e| RegistrationRuntimeInteraction.new_from_api(e) }
|
31
54
|
end
|
55
|
+
|
56
|
+
#
|
57
|
+
# Has this activity been completed?
|
58
|
+
#
|
59
|
+
# @return [Boolean]
|
60
|
+
# Returns true, false or nil if completion status is unknown.
|
61
|
+
#
|
62
|
+
def complete?
|
63
|
+
return nil if activity_completion == "UNKNOWN"
|
64
|
+
activity_completion == "COMPLETED"
|
65
|
+
end
|
66
|
+
|
67
|
+
#
|
68
|
+
# Is this activity incomplete?
|
69
|
+
#
|
70
|
+
# @return [Boolean]
|
71
|
+
# Returns true, false or nil if completion status is unknown.
|
72
|
+
#
|
73
|
+
def incomplete?
|
74
|
+
return nil if activity_completion == "UNKNOWN"
|
75
|
+
activity_completion == "INCOMPLETE"
|
76
|
+
end
|
77
|
+
|
78
|
+
#
|
79
|
+
# Has the previous attempt of this activity been completed?
|
80
|
+
#
|
81
|
+
# @return [Boolean]
|
82
|
+
# Returns true, false or nil if completion status is unknown.
|
83
|
+
#
|
84
|
+
def previous_attempt_complete?
|
85
|
+
return nil if previous_attempt_completion == "Unknown"
|
86
|
+
previous_attempt_completion == "Completed"
|
87
|
+
end
|
88
|
+
|
89
|
+
#
|
90
|
+
# Is the previous attempt of this previous_attempt incomplete?
|
91
|
+
#
|
92
|
+
# @return [Boolean]
|
93
|
+
# Returns true, false or nil if completion status is unknown.
|
94
|
+
#
|
95
|
+
def previous_attempt_incomplete?
|
96
|
+
return nil if previous_attempt_completion == "Unknown"
|
97
|
+
previous_attempt_completion == "Incomplete"
|
98
|
+
end
|
99
|
+
|
100
|
+
#
|
101
|
+
# Has this activity been passed?
|
102
|
+
#
|
103
|
+
# @return [Boolean]
|
104
|
+
# Returns true, false or nil if success status is unknown.
|
105
|
+
#
|
106
|
+
def passed?
|
107
|
+
return nil if activity_success == "UNKNOWN"
|
108
|
+
activity_success == "PASSED"
|
109
|
+
end
|
110
|
+
|
111
|
+
#
|
112
|
+
# Has this activity failed?
|
113
|
+
#
|
114
|
+
# @return [Boolean]
|
115
|
+
# Returns true, false or nil if success status is unknown.
|
116
|
+
#
|
117
|
+
def failed?
|
118
|
+
return nil if activity_success == "UNKNOWN"
|
119
|
+
activity_success == "FAILED"
|
120
|
+
end
|
121
|
+
|
32
122
|
end
|
33
123
|
end
|
34
124
|
end
|
data/lib/scorm_engine/version.rb
CHANGED
@@ -97,5 +97,107 @@ RSpec.describe ScormEngine::Models::RegistrationActivityDetail do
|
|
97
97
|
]
|
98
98
|
end
|
99
99
|
end
|
100
|
+
|
101
|
+
describe "#complete?" do
|
102
|
+
it "is nil when completion is UNKNOWN" do
|
103
|
+
activity = described_class.new_from_api("activityCompletion" => "UNKNOWN")
|
104
|
+
expect(activity.complete?).to eq nil
|
105
|
+
end
|
106
|
+
|
107
|
+
it "is false when completion is INCOMPLETE" do
|
108
|
+
activity = described_class.new_from_api("activityCompletion" => "INCOMPLETE")
|
109
|
+
expect(activity.complete?).to eq false
|
110
|
+
end
|
111
|
+
|
112
|
+
it "is true when completion is COMPLETED" do
|
113
|
+
activity = described_class.new_from_api("activityCompletion" => "COMPLETED")
|
114
|
+
expect(activity.complete?).to eq true
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
describe "#incomplete?" do
|
119
|
+
it "is nil when completion is UNKNOWN" do
|
120
|
+
activity = described_class.new_from_api("activityCompletion" => "UNKNOWN")
|
121
|
+
expect(activity.incomplete?).to eq nil
|
122
|
+
end
|
123
|
+
|
124
|
+
it "is true when completion is INCOMPLETE" do
|
125
|
+
activity = described_class.new_from_api("activityCompletion" => "INCOMPLETE")
|
126
|
+
expect(activity.incomplete?).to eq true
|
127
|
+
end
|
128
|
+
|
129
|
+
it "is false when completion is COMPLETED" do
|
130
|
+
activity = described_class.new_from_api("activityCompletion" => "COMPLETED")
|
131
|
+
expect(activity.incomplete?).to eq false
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
describe "#previous_attempt_complete?" do
|
136
|
+
it "is nil when completion is Unknown" do
|
137
|
+
activity = described_class.new_from_api("previousAttemptCompletion" => "Unknown")
|
138
|
+
expect(activity.previous_attempt_complete?).to eq nil
|
139
|
+
end
|
140
|
+
|
141
|
+
it "is false when completion is Incomplete" do
|
142
|
+
activity = described_class.new_from_api("previousAttemptCompletion" => "Incomplete")
|
143
|
+
expect(activity.previous_attempt_complete?).to eq false
|
144
|
+
end
|
145
|
+
|
146
|
+
it "is true when completion is Completed" do
|
147
|
+
activity = described_class.new_from_api("previousAttemptCompletion" => "Completed")
|
148
|
+
expect(activity.previous_attempt_complete?).to eq true
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
describe "#previous_atempt_incomplete?" do
|
153
|
+
it "is nil when completion is Unknown" do
|
154
|
+
activity = described_class.new_from_api("previousAttemptCompletion" => "Unknown")
|
155
|
+
expect(activity.previous_attempt_incomplete?).to eq nil
|
156
|
+
end
|
157
|
+
|
158
|
+
it "is true when completion is Incomplete" do
|
159
|
+
activity = described_class.new_from_api("previousAttemptCompletion" => "Incomplete")
|
160
|
+
expect(activity.previous_attempt_incomplete?).to eq true
|
161
|
+
end
|
162
|
+
|
163
|
+
it "is false when completion is Completed" do
|
164
|
+
activity = described_class.new_from_api("previousAttemptCompletion" => "Completed")
|
165
|
+
expect(activity.previous_attempt_incomplete?).to eq false
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
describe "#passed?" do
|
170
|
+
it "is nil when completion is UNKNOWN" do
|
171
|
+
activity = described_class.new_from_api("activitySuccess" => "UNKNOWN")
|
172
|
+
expect(activity.passed?).to eq nil
|
173
|
+
end
|
174
|
+
|
175
|
+
it "is false when completion is FAILED" do
|
176
|
+
activity = described_class.new_from_api("activitySuccess" => "FAILED")
|
177
|
+
expect(activity.passed?).to eq false
|
178
|
+
end
|
179
|
+
|
180
|
+
it "is true when completion is PASSED" do
|
181
|
+
activity = described_class.new_from_api("activitySuccess" => "PASSED")
|
182
|
+
expect(activity.passed?).to eq true
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
describe "#failed?" do
|
187
|
+
it "is nil when completion is UNKNOWN" do
|
188
|
+
activity = described_class.new_from_api("activitySuccess" => "UNKNOWN")
|
189
|
+
expect(activity.failed?).to eq nil
|
190
|
+
end
|
191
|
+
|
192
|
+
it "is true when completion is FAILED" do
|
193
|
+
activity = described_class.new_from_api("activitySuccess" => "FAILED")
|
194
|
+
expect(activity.failed?).to eq true
|
195
|
+
end
|
196
|
+
|
197
|
+
it "is false when completion is PASSED" do
|
198
|
+
activity = described_class.new_from_api("activitySuccess" => "PASSED")
|
199
|
+
expect(activity.failed?).to eq false
|
200
|
+
end
|
201
|
+
end
|
100
202
|
end
|
101
203
|
end
|
@@ -78,5 +78,73 @@ RSpec.describe ScormEngine::Models::Registration do
|
|
78
78
|
expect(registration.learner).to eq nil
|
79
79
|
end
|
80
80
|
end
|
81
|
+
|
82
|
+
describe "#complete?" do
|
83
|
+
it "is nil when completion is UNKNOWN" do
|
84
|
+
registration = described_class.new_from_api("registrationCompletion" => "UNKNOWN")
|
85
|
+
expect(registration.complete?).to eq nil
|
86
|
+
end
|
87
|
+
|
88
|
+
it "is false when completion is INCOMPLETE" do
|
89
|
+
registration = described_class.new_from_api("registrationCompletion" => "INCOMPLETE")
|
90
|
+
expect(registration.complete?).to eq false
|
91
|
+
end
|
92
|
+
|
93
|
+
it "is true when completion is COMPLETED" do
|
94
|
+
registration = described_class.new_from_api("registrationCompletion" => "COMPLETED")
|
95
|
+
expect(registration.complete?).to eq true
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
describe "#incomplete?" do
|
100
|
+
it "is nil when completion is UNKNOWN" do
|
101
|
+
registration = described_class.new_from_api("registrationCompletion" => "UNKNOWN")
|
102
|
+
expect(registration.incomplete?).to eq nil
|
103
|
+
end
|
104
|
+
|
105
|
+
it "is true when completion is INCOMPLETE" do
|
106
|
+
registration = described_class.new_from_api("registrationCompletion" => "INCOMPLETE")
|
107
|
+
expect(registration.incomplete?).to eq true
|
108
|
+
end
|
109
|
+
|
110
|
+
it "is false when completion is COMPLETED" do
|
111
|
+
registration = described_class.new_from_api("registrationCompletion" => "COMPLETED")
|
112
|
+
expect(registration.incomplete?).to eq false
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
describe "#passed?" do
|
117
|
+
it "is nil when completion is Unknown" do
|
118
|
+
registration = described_class.new_from_api("registrationSuccess" => "Unknown")
|
119
|
+
expect(registration.passed?).to eq nil
|
120
|
+
end
|
121
|
+
|
122
|
+
it "is false when completion is Failed" do
|
123
|
+
registration = described_class.new_from_api("registrationSuccess" => "Failed")
|
124
|
+
expect(registration.passed?).to eq false
|
125
|
+
end
|
126
|
+
|
127
|
+
it "is true when completion is Passed" do
|
128
|
+
registration = described_class.new_from_api("registrationSuccess" => "Passed")
|
129
|
+
expect(registration.passed?).to eq true
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
describe "#failed?" do
|
134
|
+
it "is nil when completion is Unknown" do
|
135
|
+
registration = described_class.new_from_api("registrationSuccess" => "Unknown")
|
136
|
+
expect(registration.failed?).to eq nil
|
137
|
+
end
|
138
|
+
|
139
|
+
it "is true when completion is Failed" do
|
140
|
+
registration = described_class.new_from_api("registrationSuccess" => "Failed")
|
141
|
+
expect(registration.failed?).to eq true
|
142
|
+
end
|
143
|
+
|
144
|
+
it "is false when completion is Passed" do
|
145
|
+
registration = described_class.new_from_api("registrationSuccess" => "Passed")
|
146
|
+
expect(registration.failed?).to eq false
|
147
|
+
end
|
148
|
+
end
|
81
149
|
end
|
82
150
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scorm_engine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Philip Hallstrom
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-08-
|
11
|
+
date: 2018-08-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|