domoscio_rails 0.3.4 → 0.3.8
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/domoscio_rails.rb +94 -54
- data/lib/domoscio_rails/authorization_token.rb +4 -11
- data/lib/domoscio_rails/data/content.rb +2 -1
- data/lib/domoscio_rails/data/event.rb +0 -1
- data/lib/domoscio_rails/data/instance.rb +2 -1
- data/lib/domoscio_rails/data/learning_session.rb +1 -1
- data/lib/domoscio_rails/data/recommendation.rb +7 -0
- data/lib/domoscio_rails/data/student.rb +2 -1
- data/lib/domoscio_rails/errors.rb +1 -1
- data/lib/domoscio_rails/knowledge/knowledge_edge.rb +0 -1
- data/lib/domoscio_rails/knowledge/knowledge_graph.rb +0 -1
- data/lib/domoscio_rails/knowledge/knowledge_node.rb +0 -1
- data/lib/domoscio_rails/knowledge/knowledge_node_content.rb +2 -1
- data/lib/domoscio_rails/knowledge/knowledge_node_student.rb +0 -1
- data/lib/domoscio_rails/objective/objective.rb +2 -1
- data/lib/domoscio_rails/objective/objective_knowledge_node.rb +5 -4
- data/lib/domoscio_rails/objective/objective_knowledge_node_student.rb +7 -5
- data/lib/domoscio_rails/objective/objective_student.rb +2 -1
- data/lib/domoscio_rails/tag/tag.rb +2 -1
- data/lib/domoscio_rails/tag/tag_edge.rb +2 -1
- data/lib/domoscio_rails/tag/tag_set.rb +2 -1
- data/lib/domoscio_rails/tag/tagging.rb +2 -1
- data/lib/domoscio_rails/utils/gameplay_util.rb +2 -1
- data/lib/domoscio_rails/utils/recommendation_util.rb +6 -5
- data/lib/domoscio_rails/utils/review_util.rb +2 -1
- data/lib/domoscio_rails/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 843d2aaa033b798f0fca1763630df19f72952291e71fac2ac4bc5a4bf8f23424
|
4
|
+
data.tar.gz: 1cfe0284cc12660155bedc5aed80d96bbb4a420e0e11d72480de29cb6f068982
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7c5e3c8bbaebb0197aaed4b4f70f3aa56e9e14a047b683b40df7c27b5eb12b8ab46346b7ad14300de747aa6b9d350de574143928db115de5dab74f32ca84c2bb
|
7
|
+
data.tar.gz: 932e4a3432820545c4a4ff966ca168fe1be9e554f655f71b59046d9f0af82231b9009e0dfabcbcb70f161b43114757db58b201cb26f122d97d5bab11a4ee31f5
|
data/lib/domoscio_rails.rb
CHANGED
@@ -13,6 +13,7 @@ require 'domoscio_rails/resource'
|
|
13
13
|
require 'domoscio_rails/data/content.rb'
|
14
14
|
require 'domoscio_rails/data/event.rb'
|
15
15
|
require 'domoscio_rails/data/instance.rb'
|
16
|
+
require 'domoscio_rails/data/recommendation.rb'
|
16
17
|
require 'domoscio_rails/data/learning_session.rb'
|
17
18
|
require 'domoscio_rails/data/student.rb'
|
18
19
|
require 'domoscio_rails/knowledge/knowledge_edge.rb'
|
@@ -38,11 +39,11 @@ module DomoscioRails
|
|
38
39
|
|
39
40
|
# Refers to AdaptiveEngine Version
|
40
41
|
def version
|
41
|
-
@version
|
42
|
+
@version ||= 2
|
42
43
|
end
|
43
44
|
|
44
45
|
def root_url
|
45
|
-
@root_url
|
46
|
+
@root_url ||= ""
|
46
47
|
end
|
47
48
|
end
|
48
49
|
|
@@ -63,42 +64,44 @@ module DomoscioRails
|
|
63
64
|
# - +method+: HTTP method; lowercase symbol, e.g. :get, :post etc.
|
64
65
|
# - +url+: the part after Configuration#root_url
|
65
66
|
# - +params+: hash; entity data for creation, update etc.; will dump it by JSON and assign to Net::HTTPRequest#body
|
66
|
-
# - +filters+: hash; pagination params etc.; will encode it by URI and assign to URI#query
|
67
|
-
# - +headers+: hash; request_headers by default
|
68
|
-
# - +before_request_proc+: optional proc; will call it passing the Net::HTTPRequest instance just before Net::HTTPRequest#request
|
69
67
|
#
|
70
|
-
#
|
68
|
+
# Performs HTTP requests to Adaptive Engine
|
69
|
+
# On token issues, will try once to get a new token then will output a DomoscioRails::ReponseError with details
|
71
70
|
#
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
71
|
+
# Raises DomoscioRails::ResponseError on Adaptive Error Status
|
72
|
+
# Raises DomoscioRails::ProcessingError on Internal Error
|
73
|
+
#
|
74
|
+
def self.request(method, url, params={})
|
75
|
+
|
76
|
+
store_tokens, headers = request_headers
|
77
|
+
params.merge!({'per_page': 2000}) unless params[:per_page]
|
76
78
|
uri = api_uri(url)
|
77
|
-
|
78
|
-
|
79
|
-
return
|
79
|
+
|
80
|
+
response = DomoscioRails.send_request(uri, method, params, headers)
|
81
|
+
return response if response.kind_of? DomoscioRails::ProcessingError
|
82
|
+
|
80
83
|
begin
|
81
|
-
raise_http_failure(uri,
|
82
|
-
data = DomoscioRails::JSON.load(
|
83
|
-
DomoscioRails::AuthorizationToken::Manager.storage.store({access_token:
|
84
|
+
raise_http_failure(uri, response, params)
|
85
|
+
data = DomoscioRails::JSON.load(response.body.nil? ? '' : response.body)
|
86
|
+
DomoscioRails::AuthorizationToken::Manager.storage.store({access_token: response['Accesstoken'], refresh_token: response['Refreshtoken']}) if store_tokens
|
84
87
|
rescue MultiJson::LoadError => exception
|
85
|
-
data = ProcessingError.new(uri, 500, exception,
|
88
|
+
data = ProcessingError.new(uri, 500, exception, response.body, params)
|
86
89
|
rescue ResponseError => exception
|
87
90
|
data = exception
|
88
91
|
end
|
89
92
|
|
90
|
-
if
|
91
|
-
pagetotal = (
|
93
|
+
if response['Total']
|
94
|
+
pagetotal = (response['Total'].to_i / response['Per-Page'].to_f).ceil
|
92
95
|
for j in 2..pagetotal
|
93
|
-
|
94
|
-
return
|
96
|
+
response = DomoscioRails.send_request(uri, method, params.merge({page: j}), headers)
|
97
|
+
return response if response.kind_of? DomoscioRails::ProcessingError
|
95
98
|
begin
|
96
|
-
raise_http_failure(uri,
|
97
|
-
body = DomoscioRails::JSON.load(
|
99
|
+
raise_http_failure(uri, response, params)
|
100
|
+
body = DomoscioRails::JSON.load(response.body.nil? ? '' : response.body)
|
98
101
|
data += body
|
99
102
|
data.flatten!
|
100
103
|
rescue MultiJson::LoadError => exception
|
101
|
-
return ProcessingError.new(uri, 500, exception,
|
104
|
+
return ProcessingError.new(uri, 500, exception, response.body, params)
|
102
105
|
rescue ResponseError => exception
|
103
106
|
return exception
|
104
107
|
end
|
@@ -107,32 +110,52 @@ module DomoscioRails
|
|
107
110
|
data
|
108
111
|
end
|
109
112
|
|
110
|
-
|
113
|
+
private
|
114
|
+
|
115
|
+
# This function catches usual Http errors during calls
|
116
|
+
#
|
117
|
+
def self.send_request(uri, method, params, headers)
|
111
118
|
begin
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
before_request_proc.call(req) if before_request_proc
|
116
|
-
http.request req
|
117
|
-
end
|
119
|
+
response = perform_call(uri, method, params, headers)
|
120
|
+
response = retry_call_and_store_tokens(uri, method, params, headers) if ['401','403'].include? response.code
|
121
|
+
response
|
118
122
|
rescue Timeout::Error, Errno::EINVAL, Errno::ECONNREFUSED, Errno::ECONNRESET, EOFError, Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError => exception
|
119
|
-
ProcessingError.new(uri, 500, exception,
|
123
|
+
ProcessingError.new(uri, 500, exception, response)
|
120
124
|
end
|
121
125
|
end
|
122
126
|
|
123
|
-
|
124
|
-
|
125
|
-
def self.raise_http_failure(uri,
|
126
|
-
unless
|
127
|
-
if
|
127
|
+
# This helper will check the response status and build the correcponding DomoscioRails::ResponseError
|
128
|
+
#
|
129
|
+
def self.raise_http_failure(uri, response, params)
|
130
|
+
unless response.kind_of? Net::HTTPSuccess
|
131
|
+
if response.blank?
|
128
132
|
raise ResponseError.new(uri, 500, {error: {status: 500, message: 'AdaptiveEngine not available'}}, {}, params)
|
129
133
|
else
|
130
|
-
body = DomoscioRails::JSON.load((
|
131
|
-
raise ResponseError.new(uri,
|
134
|
+
body = {error: {status: response.code, message: DomoscioRails::JSON.load((response.body.nil? ? '' : response.body), :symbolize_keys => true)}}
|
135
|
+
raise ResponseError.new(uri, response.code.to_i, body, response.body, params)
|
132
136
|
end
|
133
137
|
end
|
134
138
|
end
|
135
139
|
|
140
|
+
# Actual HTTP call is performed here
|
141
|
+
#
|
142
|
+
def self.perform_call(uri, method, params, headers)
|
143
|
+
Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http|
|
144
|
+
req = Net::HTTP::const_get(method.capitalize).new(uri.request_uri, headers)
|
145
|
+
req.body = DomoscioRails::JSON.dump(params)
|
146
|
+
http.request req
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
# This method is called when AdaptiveEngine returns tokens errors
|
151
|
+
# Action on those errors is to retry and request new tokens, those new token are then stored
|
152
|
+
def self.retry_call_and_store_tokens(uri, method, params, headers)
|
153
|
+
headers = request_new_tokens
|
154
|
+
response = perform_call(uri, method, params, headers)
|
155
|
+
DomoscioRails::AuthorizationToken::Manager.storage.store({access_token: response['Accesstoken'], refresh_token: response['Refreshtoken']})
|
156
|
+
response
|
157
|
+
end
|
158
|
+
|
136
159
|
def self.user_agent
|
137
160
|
@uname ||= get_uname
|
138
161
|
{
|
@@ -150,22 +173,39 @@ module DomoscioRails
|
|
150
173
|
'uname lookup failed'
|
151
174
|
end
|
152
175
|
|
176
|
+
# Process the token loading and analyze
|
177
|
+
# will return the processed headers and a token store flag
|
178
|
+
#
|
153
179
|
def self.request_headers
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
headers = {
|
164
|
-
'user_agent' => "#{DomoscioRails.user_agent}",
|
165
|
-
'Authorization' => "Token token=#{DomoscioRails.configuration.client_passphrase}",
|
166
|
-
'Content-Type' => 'application/json'
|
167
|
-
}
|
180
|
+
begin
|
181
|
+
auth_token = DomoscioRails::AuthorizationToken::Manager.get_token
|
182
|
+
if auth_token && auth_token[:access_token] && auth_token[:refresh_token]
|
183
|
+
[false, send_current_tokens(auth_token)]
|
184
|
+
else
|
185
|
+
[true, request_new_tokens]
|
186
|
+
end
|
187
|
+
rescue SyntaxError, StandardError
|
188
|
+
[true, request_new_tokens]
|
168
189
|
end
|
169
|
-
|
190
|
+
end
|
191
|
+
|
192
|
+
# If stored token successfully loaded we build the header with them
|
193
|
+
#
|
194
|
+
def self.send_current_tokens(auth_token)
|
195
|
+
{
|
196
|
+
'user_agent' => "#{DomoscioRails.user_agent}",
|
197
|
+
'AccessToken' => "#{auth_token[:access_token]}",
|
198
|
+
'RefreshToken' => "#{auth_token[:refresh_token]}",
|
199
|
+
'Content-Type' => 'application/json'
|
200
|
+
}
|
201
|
+
end
|
202
|
+
|
203
|
+
# If we cant find tokens of they are corrupted / expired, then we set headers to request new ones
|
204
|
+
def self.request_new_tokens
|
205
|
+
{
|
206
|
+
'user_agent' => "#{DomoscioRails.user_agent}",
|
207
|
+
'Authorization' => "Token token=#{DomoscioRails.configuration.client_passphrase}",
|
208
|
+
'Content-Type' => 'application/json'
|
209
|
+
}
|
170
210
|
end
|
171
211
|
end
|
@@ -11,9 +11,7 @@ module DomoscioRails
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def get_token
|
14
|
-
|
15
|
-
token = DomoscioRails.configuration.client_passphrase if token.nil?
|
16
|
-
token
|
14
|
+
storage.get
|
17
15
|
end
|
18
16
|
end
|
19
17
|
end
|
@@ -29,13 +27,9 @@ module DomoscioRails
|
|
29
27
|
|
30
28
|
class FileStorage
|
31
29
|
require 'yaml'
|
32
|
-
@temp_dir
|
33
30
|
|
34
|
-
def initialize
|
35
|
-
|
36
|
-
if !@temp_dir
|
37
|
-
raise "Path to temporary folder is not defined"
|
38
|
-
end
|
31
|
+
def initialize
|
32
|
+
raise "Path to temporary folder is not defined" unless DomoscioRails.configuration.temp_dir
|
39
33
|
end
|
40
34
|
|
41
35
|
def get
|
@@ -60,8 +54,7 @@ module DomoscioRails
|
|
60
54
|
end
|
61
55
|
|
62
56
|
def file_path
|
63
|
-
|
64
|
-
File.join(@temp_dir, "DomoscioRails.AuthorizationToken.FileStore.tmp")
|
57
|
+
File.join(DomoscioRails.configuration.temp_dir, "DomoscioRails.AuthorizationToken.FileStore.tmp")
|
65
58
|
end
|
66
59
|
end
|
67
60
|
end
|
@@ -1,10 +1,11 @@
|
|
1
1
|
module DomoscioRails
|
2
|
-
# A Content.
|
3
2
|
class Content < Resource
|
3
|
+
|
4
4
|
include DomoscioRails::HTTPCalls::Create
|
5
5
|
include DomoscioRails::HTTPCalls::Fetch
|
6
6
|
include DomoscioRails::HTTPCalls::Update
|
7
7
|
include DomoscioRails::HTTPCalls::Destroy
|
8
8
|
include DomoscioRails::HTTPCalls::Util
|
9
|
+
|
9
10
|
end
|
10
11
|
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
module DomoscioRails
|
2
|
-
# A LearningSession is basicly a group of events.
|
3
2
|
class LearningSession < Resource
|
4
3
|
|
5
4
|
include DomoscioRails::HTTPCalls::Create
|
6
5
|
include DomoscioRails::HTTPCalls::Fetch
|
7
6
|
include DomoscioRails::HTTPCalls::Destroy
|
7
|
+
include DomoscioRails::HTTPCalls::Util
|
8
8
|
|
9
9
|
end
|
10
10
|
end
|
@@ -10,7 +10,7 @@ module DomoscioRails
|
|
10
10
|
@request_url, @code, @details, @body, @request_params = request_url, code, details, body, request_params
|
11
11
|
super(message) if message
|
12
12
|
end
|
13
|
-
def message; @details.is_a?(Hash) ? @details.dig(:error, :message) : @details; end
|
13
|
+
def message; (@details.is_a?(Hash) && @details[:error].is_a?(Hash)) ? @details.dig(:error, :message) : @details; end
|
14
14
|
end
|
15
15
|
|
16
16
|
# ProcessingError from DomoscioRails
|
@@ -1,9 +1,10 @@
|
|
1
1
|
module DomoscioRails
|
2
|
-
# A KnowledgeNodeContent.
|
3
2
|
class KnowledgeNodeContent < Resource
|
3
|
+
|
4
4
|
include DomoscioRails::HTTPCalls::Create
|
5
5
|
include DomoscioRails::HTTPCalls::Fetch
|
6
6
|
include DomoscioRails::HTTPCalls::Update
|
7
7
|
include DomoscioRails::HTTPCalls::Destroy
|
8
|
+
|
8
9
|
end
|
9
10
|
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
module DomoscioRails
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
2
|
+
class ObjectiveKnowledgeNodeStudent < Resource
|
3
|
+
|
4
|
+
include DomoscioRails::HTTPCalls::Fetch
|
5
|
+
include DomoscioRails::HTTPCalls::Update
|
6
|
+
|
7
|
+
end
|
8
|
+
end
|
@@ -1,10 +1,11 @@
|
|
1
1
|
module DomoscioRails
|
2
|
-
# An objective student.
|
3
2
|
class ObjectiveStudent < Resource
|
3
|
+
|
4
4
|
include DomoscioRails::HTTPCalls::Create
|
5
5
|
include DomoscioRails::HTTPCalls::Fetch
|
6
6
|
include DomoscioRails::HTTPCalls::Update
|
7
7
|
include DomoscioRails::HTTPCalls::Destroy
|
8
8
|
include DomoscioRails::HTTPCalls::Util
|
9
|
+
|
9
10
|
end
|
10
11
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: domoscio_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Benoit Praly
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-04-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -41,6 +41,7 @@ files:
|
|
41
41
|
- lib/domoscio_rails/data/event.rb
|
42
42
|
- lib/domoscio_rails/data/instance.rb
|
43
43
|
- lib/domoscio_rails/data/learning_session.rb
|
44
|
+
- lib/domoscio_rails/data/recommendation.rb
|
44
45
|
- lib/domoscio_rails/data/student.rb
|
45
46
|
- lib/domoscio_rails/errors.rb
|
46
47
|
- lib/domoscio_rails/http_calls.rb
|