class TinCanApi::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/tin_can_api/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/tin_can_api/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/tin_can_api/remote_lrs.rb, line 192 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/tin_can_api/remote_lrs.rb, line 236 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/tin_can_api/remote_lrs.rb, line 279 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/tin_can_api/remote_lrs.rb, line 181 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/tin_can_api/remote_lrs.rb, line 124 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/tin_can_api/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: response.body) else lrs.success = false end end end
retrieve_activity_profile(id, activity)
click to toggle source
# File lib/tin_can_api/remote_lrs.rb, line 210 def retrieve_activity_profile(id, activity) # TODO: Complete this query_params = { 'profileId' => id, 'activityId' => activity.id, } document = ActivityProfileDocument.new do |apd| apd.id = id apd.activity = activity end lrs_response = get_document('activities/profile', query_params, document) if lrs_response.status == 200 lrs_response.content = document end lrs_response end
retrieve_activity_profile_ids(activity)
click to toggle source
# File lib/tin_can_api/remote_lrs.rb, line 202 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/tin_can_api/remote_lrs.rb, line 253 def retrieve_agent_profile(id, agent) # TODO: Complete this query_params = { 'profileId' => id, 'agent' => agent.serialize(version).to_json } document = AgentProfileDocument.new do |apd| apd.id = id apd.agent = agent end lrs_response = get_document('agents/profile', query_params, document) if lrs_response.status == 200 lrs_response.content = document end lrs_response end
retrieve_agent_profile_ids(agent)
click to toggle source
# File lib/tin_can_api/remote_lrs.rb, line 245 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/tin_can_api/remote_lrs.rb, line 152 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/tin_can_api/remote_lrs.rb, line 142 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/tin_can_api/remote_lrs.rb, line 90 def retrieve_statement(id) get_statement(id, 'statementId') end
retrieve_voided_statement(id)
click to toggle source
# File lib/tin_can_api/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/tin_can_api/remote_lrs.rb, line 227 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/tin_can_api/remote_lrs.rb, line 270 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/tin_can_api/remote_lrs.rb, line 171 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/tin_can_api/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/tin_can_api/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/tin_can_api/remote_lrs.rb, line 313 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/tin_can_api/remote_lrs.rb, line 360 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/tin_can_api/remote_lrs.rb, line 342 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 # 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/tin_can_api/remote_lrs.rb, line 394 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/tin_can_api/remote_lrs.rb, line 325 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/tin_can_api/remote_lrs.rb, line 307 def path @path ||= uri.path @path += '/' unless @path.end_with?('/') @path end
save_document(resource, params, document)
click to toggle source
# File lib/tin_can_api/remote_lrs.rb, line 375 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/tin_can_api/remote_lrs.rb, line 290 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/tin_can_api/remote_lrs.rb, line 303 def uri @uri ||= Addressable::URI.parse(end_point) end
yield_or_eval(&block)
click to toggle source
# File lib/tin_can_api/remote_lrs.rb, line 298 def yield_or_eval(&block) return unless block block.arity < 1 ? instance_eval(&block) : block[self] end