From 7fd6cc8be076a92a238e34c7e109d555ce339113 Mon Sep 17 00:00:00 2001 From: Olivier Mehani Date: Tue, 9 Jan 2018 10:19:06 +1100 Subject: [PATCH 1/4] [DOC] Clearly flag demos keys as such Signed-off-by: Olivier Mehani --- README.md | 13 +++++++++---- .../app/controllers/index_controller.rb | 1 + examples/simple/init_data.rb | 1 + examples/simple/init_items.rb | 1 + spec/learnosity/sdk/request/init_spec.rb | 2 ++ 5 files changed, 14 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ea356c2..b787606 100644 --- a/README.md +++ b/README.md @@ -62,9 +62,11 @@ say, the `items` API, you just need to instantiate the require "learnosity/sdk/request/init" security_packet = { - 'consumer_key' => 'yis0TYCu7U9V4o7M', - 'domain' => 'localhost', + # XXX: This is a Learnosity Demos consumer; replace it with your own consumer key + 'consumer_key' => 'yis0TYCu7U9V4o7M', + 'domain' => 'localhost' } +# XXX: The consumer secret should be in a properly secured credential store, and *NEVER* checked in in revision control consumer_secret = '74c5fd430cf1242a527f6223aebd42d30464be22' items_request = { 'limit' => 50 } @@ -111,9 +113,11 @@ require "learnosity/sdk/request/init" security_packet = { - 'consumer_key' => 'yis0TYCu7U9V4o7M', - 'domain' => 'localhost', + # XXX: This is a Learnosity Demos consumer; replace it with your own consumer key + 'consumer_key' => 'yis0TYCu7U9V4o7M', + 'domain' => 'localhost' } +# XXX: The consumer secret should be in a properly secured credential store, and *NEVER* checked in in revision control consumer_secret = '74c5fd430cf1242a527f6223aebd42d30464be22' data_request = { 'limit' => 50 } @@ -198,6 +202,7 @@ require 'learnosity/sdk/request/init' class IndexController < ApplicationController @@security_packet = { + # XXX: This is a Learnosity Demos consumer; replace it with your own consumer key 'consumer_key' => 'yis0TYCu7U9V4o7M', 'domain' => 'localhost' } diff --git a/examples/lrn-sdk-rails/app/controllers/index_controller.rb b/examples/lrn-sdk-rails/app/controllers/index_controller.rb index 5ef67a9..983883b 100644 --- a/examples/lrn-sdk-rails/app/controllers/index_controller.rb +++ b/examples/lrn-sdk-rails/app/controllers/index_controller.rb @@ -3,6 +3,7 @@ class IndexController < ApplicationController @@security_packet = { + # XXX: This is a Learnosity Demos consumer; replace it with your own consumer key 'consumer_key' => 'yis0TYCu7U9V4o7M', 'domain' => 'localhost' } diff --git a/examples/simple/init_data.rb b/examples/simple/init_data.rb index 47230da..9bf2149 100755 --- a/examples/simple/init_data.rb +++ b/examples/simple/init_data.rb @@ -5,6 +5,7 @@ require 'learnosity/sdk/request/init' security_packet = { + # XXX: This is a Learnosity Demos consumer; replace it with your own consumer key 'consumer_key' => 'yis0TYCu7U9V4o7M', 'domain' => 'localhost' } diff --git a/examples/simple/init_items.rb b/examples/simple/init_items.rb index ebbbb5b..87c90cd 100755 --- a/examples/simple/init_items.rb +++ b/examples/simple/init_items.rb @@ -2,6 +2,7 @@ require 'learnosity/sdk/request/init' security_packet = { + # XXX: This is a Learnosity Demos consumer; replace it with your own consumer key 'consumer_key' => 'yis0TYCu7U9V4o7M', 'domain' => 'localhost' } diff --git a/spec/learnosity/sdk/request/init_spec.rb b/spec/learnosity/sdk/request/init_spec.rb index 542aa01..02d257b 100644 --- a/spec/learnosity/sdk/request/init_spec.rb +++ b/spec/learnosity/sdk/request/init_spec.rb @@ -2,10 +2,12 @@ RSpec.describe Learnosity::Sdk::Request::Init do security_packet = { + # XXX: This is a Learnosity Demos consumer; replace it with your own consumer key 'consumer_key' => 'yis0TYCu7U9V4o7M', 'domain' => 'localhost', 'timestamp' => '20140626-0528', } + # XXX: The consumer secret should be in a properly secured credential store, and *NEVER* checked in in revision control consumer_secret = '74c5fd430cf1242a527f6223aebd42d30464be22' items_request = { 'limit' => 50 } From 0bd334b1be4270f8b27b69bf7946843aa2a87b85 Mon Sep 17 00:00:00 2001 From: Olivier Mehani Date: Tue, 12 Dec 2017 17:12:32 +1100 Subject: [PATCH 2/4] [DOC] Include examples for sessions templates Signed-off-by: Olivier Mehani --- examples/advanced/session_templates_get.rb | 30 ++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100755 examples/advanced/session_templates_get.rb diff --git a/examples/advanced/session_templates_get.rb b/examples/advanced/session_templates_get.rb new file mode 100755 index 0000000..faf991d --- /dev/null +++ b/examples/advanced/session_templates_get.rb @@ -0,0 +1,30 @@ +#!/usr/bin/env ruby +require 'net/http' +require 'json' + +require 'learnosity/sdk/request/init' + +security_packet = { + # XXX: This is a Learnosity Demos consumer; replace it with your own consumer key + 'consumer_key' => 'yis0TYCu7U9V4o7M', + 'domain' => 'localhost' +} +# XXX: The consumer secret should be in a properly secured credential store, and *NEVER* checked in in revision control +consumer_secret = '74c5fd430cf1242a527f6223aebd42d30464be22' +data_request = { 'items' => [ 'dataapiMCQ10' ] } + +init = Learnosity::Sdk::Request::Init.new( + 'data', + security_packet, + consumer_secret, + data_request +) + +request = init.generate + +sessionTemplatesUri = URI('https://data.learnosity.com/v1/sessions/templates') +puts ">>> [#{sessionTemplatesUri}] #{JSON.generate(request)}" + +res = Net::HTTP.post_form(sessionTemplatesUri, request) + +puts "<<< [#{res.code}] #{res.body}" From 343a033182d025aa73f9eaf7b4e9cd0b97b1ff5c Mon Sep 17 00:00:00 2001 From: Olivier Mehani Date: Thu, 14 Dec 2017 16:05:02 +1100 Subject: [PATCH 3/4] [DOC] Move oft-modified variable closer to the top Signed-off-by: Olivier Mehani --- examples/advanced/session_templates_get.rb | 11 ++++++----- examples/simple/init_data.rb | 9 +++++---- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/examples/advanced/session_templates_get.rb b/examples/advanced/session_templates_get.rb index faf991d..0ef45b7 100755 --- a/examples/advanced/session_templates_get.rb +++ b/examples/advanced/session_templates_get.rb @@ -11,20 +11,21 @@ } # XXX: The consumer secret should be in a properly secured credential store, and *NEVER* checked in in revision control consumer_secret = '74c5fd430cf1242a527f6223aebd42d30464be22' -data_request = { 'items' => [ 'dataapiMCQ10' ] } + +sessionsTemplatesUri = URI('https://data.learnosity.com/v1/sessions/templates') +sessionsTemplatesRequest = { 'items' => [ 'dataapiMCQ10' ] } init = Learnosity::Sdk::Request::Init.new( 'data', security_packet, consumer_secret, - data_request + sessionsTemplatesRequest ) request = init.generate -sessionTemplatesUri = URI('https://data.learnosity.com/v1/sessions/templates') -puts ">>> [#{sessionTemplatesUri}] #{JSON.generate(request)}" +puts ">>> [#{sessionsTemplatesUri}] #{JSON.generate(request)}" -res = Net::HTTP.post_form(sessionTemplatesUri, request) +res = Net::HTTP.post_form(sessionsTemplatesUri, request) puts "<<< [#{res.code}] #{res.body}" diff --git a/examples/simple/init_data.rb b/examples/simple/init_data.rb index 9bf2149..2625396 100755 --- a/examples/simple/init_data.rb +++ b/examples/simple/init_data.rb @@ -11,7 +11,9 @@ } # XXX: The consumer secret should be in a properly secured credential store, and *NEVER* checked in in revision control consumer_secret = '74c5fd430cf1242a527f6223aebd42d30464be22' -data_request = { 'limit' => 1 } + +itembankUri = URI('https://data.learnosity.com/v1/itembank/items') +itembankRequest = { 'limit' => 1 } # Do 5 subsequent requests using the `next` pointer [1,2,3,4,5].each do |reqno| @@ -19,12 +21,11 @@ 'data', security_packet, consumer_secret, - data_request + itembankRequest ) request = init.generate - itembankUri = URI('https://data.learnosity.com/v1/itembank/items') puts ">>> [#{itembankUri} (#{reqno})] #{JSON.generate(request)}" res = Net::HTTP.post_form(itembankUri, request) @@ -34,6 +35,6 @@ response = JSON.parse(res.body) if ( !response['meta']['next'].nil? \ and !response['meta']['records'].nil? and response['meta']['records'] > 0) - data_request['next'] = response['meta']['next'] + itembankRequest['next'] = response['meta']['next'] end end From 70eebaf804d492d4c51f81c88bd1c4d427cac7bc Mon Sep 17 00:00:00 2001 From: Olivier Mehani Date: Thu, 21 Dec 2017 16:15:49 +1100 Subject: [PATCH 4/4] [DOC] Add example script discarding all sessions for an activity Signed-off-by: Olivier Mehani --- .../advanced/discard_sessions_by_activity.rb | 108 ++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100755 examples/advanced/discard_sessions_by_activity.rb diff --git a/examples/advanced/discard_sessions_by_activity.rb b/examples/advanced/discard_sessions_by_activity.rb new file mode 100755 index 0000000..d876047 --- /dev/null +++ b/examples/advanced/discard_sessions_by_activity.rb @@ -0,0 +1,108 @@ +#!/usr/bin/env ruby +require 'net/http' +require 'json' + +require 'learnosity/sdk/request/init' + +activityId = 'demoActivity' +maxCount = 100 + +class SessionDiscarder + def initialize + @sessionsStatusesUri = URI('https://data.learnosity.com/v1/sessions/statuses') + + @security_packet = { + # XXX: This is a Learnosity Demos consumer; replace it with your own consumer key + 'consumer_key' => 'yis0TYCu7U9V4o7M', + 'domain' => 'localhost' + } + # XXX: The consumer secret should be in a properly secured credential store, and *NEVER* checked in in revision control + @consumer_secret = '74c5fd430cf1242a527f6223aebd42d30464be22' + end + + def get_sessions_statuses(sessionIds) + request = { "session_id": sessionIds } + return do_get_sessions_statuses(request) + end + + def get_sessions_statuses_by_activity(activityId) + request = { "activity_id": [ activityId ] } + return do_get_sessions_statuses(request) + end + + def do_get_sessions_statuses(request) + + reqno = 0 + continue = true + sessions = [] + while continue do + reqno += 1 + + init = Learnosity::Sdk::Request::Init.new( + 'data', + @security_packet, + @consumer_secret, + request + ) + signedRequest = init.generate + + puts ">>> [#{@sessionsStatusesUri} (#{reqno})] #{JSON::generate(signedRequest)}" + + res = Net::HTTP.post_form(@sessionsStatusesUri, signedRequest) + response = JSON.parse(res.body) + + puts "<<< [#{res.code}] #{response['meta']['records']} records, next: #{response['meta']['next']}" + + if ( !response['meta']['next'].nil? \ + and !response['meta']['records'].nil? and response['meta']['records'] > 0) + request['next'] = response['meta']['next'] + else + continue = false + end + + response['data'].each { |session| + sessions += [ session ] + } + end + return sessions + end + + def update_statuses(statuses) + sessionsDiscardRequest = { "statuses": statuses } + + init = Learnosity::Sdk::Request::Init.new( + 'data', + @security_packet, + @consumer_secret, + sessionsDiscardRequest, + 'update' + ) + request = init.generate + + puts ">>> [#{@sessionsStatusesUri}] #{JSON::generate(sessionsDiscardRequest)}" + + res = Net::HTTP.post_form(@sessionsStatusesUri, request) + response = JSON.parse(res.body) + + puts "<<< [#{res.code}] job_reference: #{response['data']['job_reference']}" + end +end + +sd = SessionDiscarder.new + +sessions = sd.get_sessions_for_activity(activityId) + +statuses = [] +sessions.each { |session| + if session['status'] != 'Discarded' + session['status'] = 'Discarded' + statuses += [ session ] + if statuses.count == maxCount + sd.update_statuses(statuses) + statuses = [] + end + end +} +if statuses.count > 0 + sd.update_statuses(statuses) +end