class Xapi::RemoteLRS
Class used to communicate with a TCAPI endpoint synchronously
Constants
- VALID_PARAMS
Attributes
end_point[RW]
password[RW]
user_name[RW]
version[RW]
Public Class Methods
new(options={}, &block)
click to toggle source
# File lib/xapi/remote_lrs.rb, line 14 def initialize(options={}, &block) setup_options(options) yield_or_eval(&block) if block_given? @version ||= latest_version end
Public Instance Methods
about()
click to toggle source
# File lib/xapi/remote_lrs.rb, line 20 def about response = connection.get("#{path}about") LrsResponse.new do |lrs| lrs.status = response.status if response.status== 200 lrs.content = About.new(json: response.body) lrs.success = true else lrs.success = false end end end
clear_state(activity, agent, registration)
click to toggle source
# File lib/xapi/remote_lrs.rb, line 212 def clear_state(activity, agent, registration) # TODO: Complete this query_params = { 'activityId' => activity.id, 'agent' => agent.serialize(version).to_json } query_params['registration'] = registration if registration delete_document('activities/state', query_params) end
delete_activity_profile(profile)
click to toggle source
# File lib/xapi/remote_lrs.rb, line 252 def delete_activity_profile(profile) # TODO: Complete this query_params = { 'profileId' => profile.id, 'activityId' => profile.activity.id, } delete_document('activities/profile', query_params) end
delete_agent_profile(profile)
click to toggle source
# File lib/xapi/remote_lrs.rb, line 291 def delete_agent_profile(profile) # TODO: Complete this query_params = { 'profileId' => profile.id, 'agent' => profile.agent.serialize(version).to_json } delete_document('agents/profile', query_params) end
delete_state(state)
click to toggle source
# File lib/xapi/remote_lrs.rb, line 201 def delete_state(state) # TODO: Complete this query_params = { 'stateId' => state.id, 'activityId' => state.activity.id, 'agent' => state.agent.serialize(version).to_json } query_params['registration'] = state.registration if state.registration delete_document('activities/state', query_params) end
more_statements(more_url)
click to toggle source
# File lib/xapi/remote_lrs.rb, line 144 def more_statements(more_url) # TODO: Complete this # more_url is relative to the endpoint's server root response = connection.get do |req| req.url("#{path}#{more_url}") end LrsResponse.new do |lrs| lrs.status = response.status if response.status == 200 # TODO: FIX THIS lrs.success = true lrs.content = StatementsResult.new(json: response.body) else lrs.success = false end end end
query_statements(statement_query)
click to toggle source
# File lib/xapi/remote_lrs.rb, line 99 def query_statements(statement_query) # TODO: Complete this query = statement_query unless query query = version == TCAPIVersion::V095 ? StatementsQueryV095.new : StatementsQuery.new end # Error if the query parameters don't match the LRS version raise Errors::IncompatibleTCAPIVersion, "Attempted to issue #{version} query using a #{query.version} set of query parameters." unless version == query.version response = connection.get do |req| req.url("#{path}statements") req.params.merge!(query.parameter_map) end LrsResponse.new do |lrs| lrs.status = response.status if response.status == 200 # TODO: FIX THIS lrs.success = true lrs.content = StatementsResult.new(json: JSON.parse(response.body)) else lrs.success = false end end end
query_team_analytics(team_analytics_query)
click to toggle source
# File lib/xapi/remote_lrs.rb, line 124 def query_team_analytics(team_analytics_query) # TODO: Complete this query = team_analytics_query query = TeamAnalyticsQuery.new unless query response = connection.get do |req| req.url("#{path}team_analytics") req.params.merge!(query.parameter_map) end LrsResponse.new do |lrs| lrs.status = response.status if response.status == 200 lrs.success = true lrs.content = JSON.parse(response.body) else lrs.success = false end end end
retrieve_activity_profile(id, activity)
click to toggle source
# File lib/xapi/remote_lrs.rb, line 230 def retrieve_activity_profile(id, activity) # TODO: Complete this query_params = { 'profileId' => id, 'activityId' => activity.id, } document = Documents::ActivityProfileDocument.new do |apd| apd.id = id apd.activity = activity end get_document('activities/profile', query_params, document) end
retrieve_activity_profile_ids(activity)
click to toggle source
# File lib/xapi/remote_lrs.rb, line 222 def retrieve_activity_profile_ids(activity) # TODO: Complete this query_params = { 'activityId' => activity.id } get_profile_keys('activities/profile', query_params) end
retrieve_agent_profile(id, agent)
click to toggle source
# File lib/xapi/remote_lrs.rb, line 269 def retrieve_agent_profile(id, agent) # TODO: Complete this query_params = { 'profileId' => id, 'agent' => agent.serialize(version).to_json } document = Documents::AgentProfileDocument.new do |apd| apd.id = id apd.agent = agent end get_document('agents/profile', query_params, document) end
retrieve_agent_profile_ids(agent)
click to toggle source
# File lib/xapi/remote_lrs.rb, line 261 def retrieve_agent_profile_ids(agent) # TODO: Complete this query_params = { 'agent' => agent.serialize(version).to_json } get_profile_keys('agents/profile', query_params) end
retrieve_state(id, activity, agent, registration)
click to toggle source
# File lib/xapi/remote_lrs.rb, line 172 def retrieve_state(id, activity, agent, registration) # TODO: Complete this query_params = { 'stateId' => id, 'activityId' => activity.id, 'agent' => agent.serialize(version).to_json } document = StateDocument.new do |sd| sd.id = id sd.activity = activity sd.agent = agent end lrs_response = get_document('activities/state', query_params, document) if lrs_response.status == 200 lrs_response.content = document end lrs_response end
retrieve_state_ids(activity, agent, registration)
click to toggle source
# File lib/xapi/remote_lrs.rb, line 162 def retrieve_state_ids(activity, agent, registration) # TODO: Complete this query_params = { 'activityId' => activity.id, 'agent' => agent.serialize(version).to_json } query_params['registration'] = registration if registration get_profile_keys('activities/state', query_params) end
retrieve_statement(id)
click to toggle source
# File lib/xapi/remote_lrs.rb, line 90 def retrieve_statement(id) get_statement(id, 'statementId') end
retrieve_voided_statement(id)
click to toggle source
# File lib/xapi/remote_lrs.rb, line 94 def retrieve_voided_statement(id) param_name = version == TCAPIVersion.V095 ? 'statementId' : 'voidedStatementId' get_statement(id, param_name) end
save_activity_profile(profile)
click to toggle source
# File lib/xapi/remote_lrs.rb, line 243 def save_activity_profile(profile) # TODO: Complete this query_params = { 'profileId' => profile.id, 'activityId' => profile.activity.id, } save_document('activities/profile', query_params, profile) end
save_agent_profile(profile)
click to toggle source
# File lib/xapi/remote_lrs.rb, line 282 def save_agent_profile(profile) # TODO: Complete this query_params = { 'profileId' => profile.id, 'agent' => profile.agent.serialize(version).to_json } save_document('agents/profile', query_params, profile) end
save_state(state)
click to toggle source
# File lib/xapi/remote_lrs.rb, line 191 def save_state(state) # TODO: Complete this query_params = { 'stateId' => state.id, 'activityId' => state.activity.id, 'agent' => state.agent.serialize(version).to_json } save_document('activities/state', query_params, state) end
save_statement(statement)
click to toggle source
# File lib/xapi/remote_lrs.rb, line 33 def save_statement(statement) # TODO: Complete this if statement.id response = connection.put do |req| req.url("#{path}statements") req.headers['Content-Type'] = 'application/json' req.params.merge!({'statementId' => statement.id}) req.body = statement.serialize(latest_version).to_json end else response = connection.post do |req| req.url("#{path}statements") req.headers['Content-Type'] = 'application/json' req.body = statement.serialize(latest_version).to_json end end LrsResponse.new do |lrs| lrs.status = response.status lrs.content = statement if response.status == 200 statement.id = JSON.parse(response.body).first lrs.success = true elsif response.status == 204 lrs.success = true else lrs.success = false end end end
save_statements(statements)
click to toggle source
# File lib/xapi/remote_lrs.rb, line 63 def save_statements(statements) # TODO: Complete this if statements.empty? return LrsResponse.new do |lrs| lrs.success = true end end response = connection.post do |req| req.url("#{path}statements") req.headers['Content-Type'] = 'application/json' req.body = statements.map {|s| s.serialize(latest_version)}.to_json end LrsResponse.new do |lrs| lrs.status = response.status if response.status == 200 lrs.content = statements ids = JSON.parse(response.body) statements.each_with_index do |statement, index| statement.id = ids[index] end lrs.success = true else lrs.success = false end end end
Private Instance Methods
connection()
click to toggle source
# File lib/xapi/remote_lrs.rb, line 325 def connection base_url = "#{uri.scheme}://#{uri.host}" base_url = "#{base_url}:#{uri.port}" if uri.port @connection ||= Faraday.new(:url => base_url) do |faraday| faraday.request :url_encoded # form-encode POST params faraday.response :logger # log requests to STDOUT faraday.adapter Faraday.default_adapter # make requests with Net::HTTP faraday.headers['X-Experience-API-Version'] = version.to_s faraday.basic_auth(user_name, password) end end
delete_document(resource, params)
click to toggle source
# File lib/xapi/remote_lrs.rb, line 373 def delete_document(resource, params) response = connection.delete do |req| req.url("#{path}#{resource}") req.params.merge!(params) end LrsResponse.new do |lrs| lrs.status = response.status if response.status == 204 lrs.success = true else lrs.success = false end end end
get_document(resource, params, document)
click to toggle source
# File lib/xapi/remote_lrs.rb, line 354 def get_document(resource, params, document) response = connection.get do |req| req.url("#{path}#{resource}") req.params.merge!(params) end LrsResponse.new do |lrs| lrs.status = response.status if response.status == 200 lrs.success = true lrs.content = JSON.parse(response.body) # TODO FIX THIS elsif response.status == 404 lrs.success = true else lrs.success = false end end end
get_profile_keys(resource, params)
click to toggle source
# File lib/xapi/remote_lrs.rb, line 407 def get_profile_keys(resource, params) # TODO FIX THIS connection.get do |req| req.url("#{path}#{resource}") req.params.merge!(params) end end
get_statement(id, parameter)
click to toggle source
# File lib/xapi/remote_lrs.rb, line 337 def get_statement(id, parameter) response = connection.get do |req| req.url("#{path}statements") req.headers['Content-Type'] = 'application/json' req.params.merge!({parameter => id}) end LrsResponse.new do |lrs| lrs.status = response.status if response.status== 200 lrs.content = Statement.new(json: response.body) lrs.success = true else lrs.success = false end end end
path()
click to toggle source
# File lib/xapi/remote_lrs.rb, line 319 def path @path ||= uri.path @path += '/' unless @path.end_with?('/') @path end
save_document(resource, params, document)
click to toggle source
# File lib/xapi/remote_lrs.rb, line 388 def save_document(resource, params, document) # TODO: Complete this response = connection.put do |req| req.url("#{path}#{resource}") req.headers['Content-Type'] = 'application/json' req.headers['If-Match'] = document.etag if document.etag req.params.merge!(params) req.body = document.content end LrsResponse.new do |lrs| lrs.status = response.status if response.status == 204 lrs.success = true else lrs.success = false end end end
setup_options(options={})
click to toggle source
# File lib/xapi/remote_lrs.rb, line 302 def setup_options(options={}) options.each_pair do |key, value| if value && VALID_PARAMS.include?(key.to_s) instance_variable_set("@#{key}", value) end end end
uri()
click to toggle source
# File lib/xapi/remote_lrs.rb, line 315 def uri @uri ||= Addressable::URI.parse(end_point) end
yield_or_eval(&block)
click to toggle source
# File lib/xapi/remote_lrs.rb, line 310 def yield_or_eval(&block) return unless block block.arity < 1 ? instance_eval(&block) : block[self] end