pupilfirst_xapi 0.3.1 → 0.3.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9af22d07f8c93f261b7174d2e9e7c0718556931f7f09ec7e3efe91a20d6d6fa6
4
- data.tar.gz: 5414db57b6f4f3b6851fc6c1c5938cbe918dab54cbdc3e41666e135fa788f6b3
3
+ metadata.gz: 8f5c38a8fbf57be11cda1429b9cffc1ed6d818ca11a69d220305a2cd0e954125
4
+ data.tar.gz: c018dae18cd439930c6d70eba6fb60bafe8014d01a5ce2ae5be6ca3d5556f88c
5
5
  SHA512:
6
- metadata.gz: 5dbadb2c9cbbb1d501162bc3fd325aac8a9f2d44566a870942031fe7dba223292c4afe532a60a21a3eb2afa3393f9adb82277fb073ddb330c7cff8c6fb6482e0
7
- data.tar.gz: 8710df83e5839915c2792edb71c9dde22bfb21c52e6aa1ca4b11641e645ee409e30c81011a8b27220d7c84fed0bc4cacf4f34977b1b4272d08aba9ca04d927b4
6
+ metadata.gz: d3d62b03c85f3610a50d7cb3aa0bbbed2fad9ad4d6c3c9aa67fac48f972a64e9a08fdc6d59cc38a7b75e2400efecd2f555d2d6d960c7c889be617432ea347800
7
+ data.tar.gz: e525ac790f096b0b70a82727901cc88bacee1aeff9b44ecbca7e227e7d0e52bb2aeb39a3007af0b22b3345f05c54204d930523ec9f374f8d8fdde4650ecc246e
@@ -1,6 +1,8 @@
1
1
  require_relative 'objects/builder'
2
2
  require_relative 'objects/course'
3
3
  require_relative 'objects/target'
4
+ require_relative 'objects/video_start'
5
+ require_relative 'objects/video_end'
4
6
 
5
7
  module PupilfirstXapi
6
8
  module Objects
@@ -11,5 +13,14 @@ module PupilfirstXapi
11
13
  def self.target(target, uri_for)
12
14
  Target.new.call(target, uri_for)
13
15
  end
16
+
17
+ def self.video_start(target, uri_for)
18
+ VideoStart.new.call(target, uri_for)
19
+ end
20
+
21
+
22
+ def self.video_end(target, uri_for)
23
+ VideoEnd.new.call(target, uri_for)
24
+ end
14
25
  end
15
26
  end
@@ -10,10 +10,10 @@ module PupilfirstXapi
10
10
  name: course.name,
11
11
  description: course.description
12
12
  ).tap do |obj|
13
+ obj.with_extension('http://id.tincanapi.com/extension/ending-position', course.targets.count)
13
14
  if course.ends_at.present?
14
15
  duration = ActiveSupport::Duration.build(course.ends_at - course.created_at).iso8601
15
16
  obj.with_extension("http://id.tincanapi.com/extension/planned-duration", duration)
16
- obj.with_extension('http://id.tincanapi.com/extension/ending-position', course.targets.count)
17
17
  end
18
18
  end.call
19
19
  end
@@ -0,0 +1,16 @@
1
+ module PupilfirstXapi
2
+ module Objects
3
+ class VideoEnd
4
+ def call(target, uri_for)
5
+ target_uri = uri_for.call(target)
6
+
7
+ Builder.new(
8
+ id: target_uri,
9
+ type: "http://activitystrea.ms/schema/1.0/event",
10
+ name: "video in #{target.title}",
11
+ description: target.description
12
+ ).call
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ module PupilfirstXapi
2
+ module Objects
3
+ class VideoStart
4
+ def call(target, uri_for)
5
+ target_uri = uri_for.call(target)
6
+
7
+ Builder.new(
8
+ id: target_uri,
9
+ type: "http://activitystrea.ms/schema/1.0/event",
10
+ name: "video in #{target.title}",
11
+ description: target.description
12
+ ).call
13
+ end
14
+ end
15
+ end
16
+ end
@@ -1,6 +1,8 @@
1
1
  require "pupilfirst_xapi/statements/course_completed"
2
2
  require "pupilfirst_xapi/statements/course_registered"
3
3
  require "pupilfirst_xapi/statements/target_completed"
4
+ require "pupilfirst_xapi/statements/video_started"
5
+ require "pupilfirst_xapi/statements/video_ended"
4
6
 
5
7
  module PupilfirstXapi
6
8
  module Statements
@@ -17,6 +19,8 @@ module PupilfirstXapi
17
19
  :student_added => CourseRegistered,
18
20
  :submission_graded => TargetCompleted,
19
21
  :submission_automatically_verified => TargetCompleted,
22
+ :video_started => VideoStarted,
23
+ :video_ended => VideoEnded
20
24
  }
21
25
  end
22
26
  end
@@ -0,0 +1,20 @@
1
+ module PupilfirstXapi
2
+ module Statements
3
+ class VideoEnded
4
+ def initialize(repository, uri_for)
5
+ @repository = repository
6
+ @uri_for = uri_for
7
+ end
8
+
9
+ def call(actor_id:, resource_id:)
10
+ actor = @repository.call(:user, actor_id)
11
+ target = @repository.call(:target, resource_id)
12
+ Xapi.create_statement(
13
+ actor: Actors.agent(actor),
14
+ verb: Verbs::VIDEO_ENDED,
15
+ object: Objects.video_end(target, @uri_for)
16
+ )
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ module PupilfirstXapi
2
+ module Statements
3
+ class VideoStarted
4
+ def initialize(repository, uri_for)
5
+ @repository = repository
6
+ @uri_for = uri_for
7
+ end
8
+
9
+ def call(actor_id:, resource_id:)
10
+ actor = @repository.call(:user, actor_id)
11
+ target = @repository.call(:target, resource_id)
12
+ Xapi.create_statement(
13
+ actor: Actors.agent(actor),
14
+ verb: Verbs::VIDEO_STARTED,
15
+ object: Objects.video_start(target, @uri_for)
16
+ )
17
+ end
18
+ end
19
+ end
20
+ end
@@ -3,5 +3,7 @@ module PupilfirstXapi
3
3
  COMPLETED = Xapi.create_verb(id: 'http://adlnet.gov/expapi/verbs/completed', name: 'completed')
4
4
  COMPLETED_ASSIGNMENT = Xapi.create_verb(id: 'https://w3id.org/xapi/dod-isd/verbs/completed-assignment', name: 'completed assignment')
5
5
  REGISTERED = Xapi.create_verb(id: 'http://adlnet.gov/expapi/verbs/registered', name: 'registered')
6
+ VIDEO_STARTED = Xapi.create_verb(id: 'http://activitystrea.ms/schema/1.0/start', name: 'start')
7
+ VIDEO_ENDED = Xapi.create_verb(id: 'http://activitystrea.ms/schema/1.0/consume', name: 'consumed')
6
8
  end
7
9
  end
@@ -1,3 +1,3 @@
1
1
  module PupilfirstXapi
2
- VERSION = '0.3.1'
2
+ VERSION = '0.3.5'
3
3
  end
@@ -15,7 +15,12 @@ RSpec.describe "#xapi", type: :job, perform_jobs: true do
15
15
  description: 'These guides are designed to make you immediately productive with Rails',
16
16
  created_at: Time.new(2021,01,01),
17
17
  ends_at: nil,
18
- uri: 'https://guides.rubyonrails.org/')
18
+ uri: 'https://guides.rubyonrails.org/',
19
+ targets: [
20
+ double(:target, title: '1st target', description: 'Seems easy'),
21
+ double(:target, title: '2nd target', description: 'Seems not easy')
22
+ ]
23
+ )
19
24
  }
20
25
  let(:getting_started) {
21
26
  double(:target,
@@ -77,6 +82,7 @@ RSpec.describe "#xapi", type: :job, perform_jobs: true do
77
82
  name: {'en-US' => 'Ruby on Rails Guides'},
78
83
  description: {'en-US' => 'These guides are designed to make you immediately productive with Rails'},
79
84
  type: 'http://adlnet.gov/expapi/activities/product',
85
+ extensions: {"http://id.tincanapi.com/extension/ending-position"=>2}
80
86
  },
81
87
  },
82
88
  timestamp: timestamp.iso8601,
@@ -102,12 +108,14 @@ RSpec.describe "#xapi", type: :job, perform_jobs: true do
102
108
  resource_id: ror_guides.id,
103
109
  actor_id: john.id,
104
110
  )
105
- expect(PupilfirstXapi::Outbox::Job).to have_been_performed.with({
106
- event_type: :course_completed,
107
- actor_id: 123,
108
- resource_id: 1234,
109
- timestamp: timestamp,
110
- })
111
+ expect(PupilfirstXapi::Outbox::Job).to have_been_performed.with(
112
+ hash_including({
113
+ event_type: :course_completed,
114
+ actor_id: 123,
115
+ resource_id: 1234,
116
+ })
117
+ )
118
+
111
119
  expect(request).to have_been_requested
112
120
  end
113
121
  end
@@ -29,7 +29,9 @@ module PupilfirstXapi
29
29
  expect(xapi.object.definition.type).to eq 'http://adlnet.gov/expapi/activities/product'
30
30
  expect(xapi.object.definition.name).to eq({'en-US' => 'Rails for Begginers'})
31
31
  expect(xapi.object.definition.description).to eq({'en-US' => 'Seems easy'})
32
- expect(xapi.object.definition.extensions).to eq nil
32
+ expect(xapi.object.definition.extensions).to eq ({
33
+ "http://id.tincanapi.com/extension/ending-position" => 2
34
+ })
33
35
  end
34
36
 
35
37
  it do
metadata CHANGED
@@ -1,22 +1,19 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pupilfirst_xapi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - GrowthTribe
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-05-14 00:00:00.000000000 Z
11
+ date: 2021-07-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: 6.0.3
20
17
  - - ">="
21
18
  - !ruby/object:Gem::Version
22
19
  version: 6.0.3.4
@@ -24,9 +21,6 @@ dependencies:
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
- - - "~>"
28
- - !ruby/object:Gem::Version
29
- version: 6.0.3
30
24
  - - ">="
31
25
  - !ruby/object:Gem::Version
32
26
  version: 6.0.3.4
@@ -86,7 +80,7 @@ dependencies:
86
80
  - - ">="
87
81
  - !ruby/object:Gem::Version
88
82
  version: '0'
89
- description:
83
+ description:
90
84
  email:
91
85
  - devs@growthtribe.io
92
86
  executables: []
@@ -103,11 +97,15 @@ files:
103
97
  - lib/pupilfirst_xapi/objects/builder.rb
104
98
  - lib/pupilfirst_xapi/objects/course.rb
105
99
  - lib/pupilfirst_xapi/objects/target.rb
100
+ - lib/pupilfirst_xapi/objects/video_end.rb
101
+ - lib/pupilfirst_xapi/objects/video_start.rb
106
102
  - lib/pupilfirst_xapi/outbox.rb
107
103
  - lib/pupilfirst_xapi/statements.rb
108
104
  - lib/pupilfirst_xapi/statements/course_completed.rb
109
105
  - lib/pupilfirst_xapi/statements/course_registered.rb
110
106
  - lib/pupilfirst_xapi/statements/target_completed.rb
107
+ - lib/pupilfirst_xapi/statements/video_ended.rb
108
+ - lib/pupilfirst_xapi/statements/video_started.rb
111
109
  - lib/pupilfirst_xapi/verbs.rb
112
110
  - lib/pupilfirst_xapi/version.rb
113
111
  - spec/integration_spec.rb
@@ -126,7 +124,7 @@ metadata:
126
124
  homepage_uri: https://github.com/growthtribeacademy/pupilfirst-xapi
127
125
  source_code_uri: https://github.com/growthtribeacademy/pupilfirst-xapi/pupilfirst_xapi
128
126
  changelog_uri: https://github.com/growthtribeacademy/pupilfirst-xapi/pupilfirst_xapi/CHANGELOG.md
129
- post_install_message:
127
+ post_install_message:
130
128
  rdoc_options: []
131
129
  require_paths:
132
130
  - lib
@@ -141,17 +139,17 @@ required_rubygems_version: !ruby/object:Gem::Requirement
141
139
  - !ruby/object:Gem::Version
142
140
  version: '0'
143
141
  requirements: []
144
- rubygems_version: 3.2.3
145
- signing_key:
142
+ rubygems_version: 3.1.6
143
+ signing_key:
146
144
  specification_version: 4
147
145
  summary: XAPI statements generator and publisher to LRS for Pupilfirst
148
146
  test_files:
149
- - spec/integration_spec.rb
150
147
  - spec/objects/builder_spec.rb
151
- - spec/outbox_job_spec.rb
152
- - spec/outbox_spec.rb
153
148
  - spec/rails_helper.rb
154
- - spec/spec_helper.rb
149
+ - spec/statements/target_completed_spec.rb
155
150
  - spec/statements/course_completed_spec.rb
156
151
  - spec/statements/course_registered_spec.rb
157
- - spec/statements/target_completed_spec.rb
152
+ - spec/spec_helper.rb
153
+ - spec/outbox_spec.rb
154
+ - spec/integration_spec.rb
155
+ - spec/outbox_job_spec.rb