domoscio_rails 0.2.14 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: f3eace41e37214c6a5a2649420cb57edd98ec923
4
- data.tar.gz: c87f19311410ae698ff78abb40a607a1f12d0103
2
+ SHA256:
3
+ metadata.gz: 4b1afdf503120aeb74bb9d38237a533f7becd888b329098199446db697b9fe26
4
+ data.tar.gz: bda6a20da9b44d4ef8a32910688ec633606168f012b7d6af4047854d7e443a0e
5
5
  SHA512:
6
- metadata.gz: 79285394f183ebd822d66d1cab36a6185d7a6561d5a7cbf6ec01096a85c583c964b4aebaf1fab3fe07fc2fcf1ad3263f48edb3b2e256e09b3aa9361c8239a8cc
7
- data.tar.gz: d0f7faa57bd977033263b18fbcfab376027ad946105be2a25525cf9797744f8aede2b6309e204464366d7bb9f428897984c294d0dbe3a2f2a59e36af6c50d316
6
+ metadata.gz: d350f60cbbb55a8e5a8222edac01778216c3e3db07c645b3212c849ab41dc670eb1d79f9d31ff8256a0f5d702934af3043cf368fb9635bc206d44e2023ba50bb
7
+ data.tar.gz: 388c1db2de8db63dfccea4335a0c8542615725408501283293aa537282a8d5ed4e285231f4d3ed45dae603cde678ebef80fb6ad356cc4bf1857dff1c3a4e67a8
@@ -1,14 +1,12 @@
1
-
2
- require 'net/http'
1
+
2
+ require 'net/https'
3
3
  require 'cgi/util'
4
4
  require 'multi_json'
5
-
6
5
  # helpers
7
6
  require 'domoscio_rails/version'
8
7
  require 'domoscio_rails/json'
9
8
  require 'domoscio_rails/errors'
10
9
  require 'domoscio_rails/authorization_token'
11
-
12
10
  # resources
13
11
  require 'domoscio_rails/http_calls'
14
12
  require 'domoscio_rails/resource'
@@ -18,13 +16,12 @@ require 'domoscio_rails/adaptative/deterministic/rule_output'
18
16
  require 'domoscio_rails/adaptative/deterministic/rule_condition'
19
17
  require 'domoscio_rails/adaptative/predictive/objective'
20
18
  require 'domoscio_rails/adaptative/predictive/objective_student'
21
- require 'domoscio_rails/adaptative/predictive/objective_knowledge_node_student'
22
19
  require 'domoscio_rails/adaptative/predictive/objective_knowledge_node'
20
+ require 'domoscio_rails/adaptative/predictive/objective_knowledge_node_student'
23
21
  require 'domoscio_rails/adaptative/recommendation'
24
22
  require 'domoscio_rails/path/learning_path'
25
23
  require 'domoscio_rails/content/content'
26
24
  require 'domoscio_rails/content/knowledge_node_content'
27
- require 'domoscio_rails/admin/user'
28
25
  require 'domoscio_rails/student/student'
29
26
  require 'domoscio_rails/student/student_cluster'
30
27
  require 'domoscio_rails/knowledge/knowledge_graph'
@@ -36,17 +33,16 @@ require 'domoscio_rails/metadata/tag_set'
36
33
  require 'domoscio_rails/metadata/tag_edge'
37
34
  require 'domoscio_rails/data/knowledge_node_student'
38
35
  require 'domoscio_rails/data/event'
36
+ require 'domoscio_rails/data/learning_session'
39
37
  require 'domoscio_rails/utils/review_util'
40
38
  require 'domoscio_rails/utils/gameplay_util'
41
-
42
-
39
+ require 'domoscio_rails/utils/alerts_util'
40
+ require 'domoscio_rails/utils/recommendation_util'
41
+ require 'domoscio_rails/metadata/delta_object'
43
42
  module DomoscioRails
44
-
45
43
  class Configuration
46
- attr_accessor :preproduction, :root_url,
47
- :client_id, :client_passphrase,
48
- :temp_dir, :disabled, :version
49
-
44
+ attr_accessor :preproduction, :test, :dev, :root_url, :client_id, :client_passphrase, :temp_dir, :disabled, :version
45
+
50
46
  def disabled
51
47
  @disabled || false
52
48
  end
@@ -54,13 +50,31 @@ module DomoscioRails
54
50
  def preproduction
55
51
  @preproduction || false
56
52
  end
57
-
53
+
54
+ def test
55
+ @test || false
56
+ end
57
+
58
+ def dev
59
+ @dev || false
60
+ end
61
+
58
62
  def version
59
63
  @version || 1
60
64
  end
61
65
 
62
66
  def root_url
63
- @root_url || (@preproduction == true ? ( @version > 1 ? "http://api.domoscio.com" : "http://stats-engine-api.domoscio.com" ) : "http://localhost:3001/")
67
+ if @preproduction == true
68
+ if @test == true
69
+ @root_url || "https://staging.adaptive-engine.domoscio.com"
70
+ elsif @dev == true
71
+ @root_url || "https://preprod.adaptive-engine.domoscio.com"
72
+ else
73
+ @root_url || "https://adaptive-engine.domoscio.com"
74
+ end
75
+ else
76
+ @root_url || "http://localhost:3001"
77
+ end
64
78
  end
65
79
  end
66
80
 
@@ -90,47 +104,62 @@ module DomoscioRails
90
104
  def self.request(method, url, params={}, filters={}, headers = request_headers, before_request_proc = nil)
91
105
  return false if @disabled
92
106
  uri = api_uri(url)
93
- uri.query = URI.encode_www_form(filters) unless filters.empty?
94
-
95
- res = Net::HTTP.start(uri.host, uri.port) do |http| # , use_ssl: uri.scheme == 'https') do |http|
96
- req = Net::HTTP::const_get(method.capitalize).new(uri.request_uri, headers)
97
- req.body = DomoscioRails::JSON.dump(params)
98
- before_request_proc.call(req) if before_request_proc
99
- http.request req
100
- end
101
-
102
- # decode json data
107
+ uri.query = URI.encode_www_form(filters) unless filters.empty?
108
+ res = DomoscioRails.send_request(uri, method, params, headers, before_request_proc)
109
+ return res if res.kind_of? DomoscioRails::ProcessingError
103
110
  begin
111
+ unless res.kind_of? Net::HTTPSuccess
112
+ data = DomoscioRails::JSON.load((res.body.nil? ? '' : res.body), :symbolize_keys => true)
113
+ raise ResponseError.new(uri, res.code.to_i, data, res.body)
114
+ end
104
115
  data = DomoscioRails::JSON.load(res.body.nil? ? '' : res.body)
105
- rescue MultiJson::LoadError
106
- data = {}
116
+ DomoscioRails::AuthorizationToken::Manager.storage.store({access_token: res['Accesstoken'], refresh_token: res['Refreshtoken']})
117
+ rescue MultiJson::LoadError => exception
118
+ data = ProcessingError.new(uri, 500, exception, res.body)
119
+ rescue ResponseError => exception
120
+ data = exception
107
121
  end
108
122
 
109
- ############### TEMP!!!! #######################################################
110
- #pp method, uri.request_uri, params #, filters, headers
111
- #pp res, data
112
- #puts
113
-
114
- # if (!(res.is_a? Net::HTTPOK))
115
- # ex = DomoscioRails::ResponseError.new(uri, res.code, data)
116
- # ############## TEMP!!!! ########################################################
117
- # #pp ex, data
118
- # raise ex
119
- # end
120
-
121
- # copy pagination info if any
122
- # ['x-number-of-pages', 'x-number-of-items'].each { |k|
123
- # filters[k.gsub('x-number-of-', 'total_')] = res[k].to_i if res[k]
124
- # }
125
-
123
+ if res['Total'] && !filters[:page]
124
+ pagetotal = (res['Total'].to_i / res['Per-Page'].to_f).ceil
125
+ for j in 2..pagetotal
126
+ res = DomoscioRails.send_request(uri, method, params.merge({page: j}), headers, before_request_proc)
127
+ return res if res.kind_of? DomoscioRails::ProcessingError
128
+ begin
129
+ unless res.kind_of? Net::HTTPSuccess
130
+ body = DomoscioRails::JSON.load((res.body.nil? ? '' : res.body), :symbolize_keys => true)
131
+ raise ResponseError.new(uri, res.code.to_i, body, res.body)
132
+ end
133
+ body = DomoscioRails::JSON.load(res.body.nil? ? '' : res.body)
134
+ data += body
135
+ data.flatten!
136
+ rescue MultiJson::LoadError => exception
137
+ return ProcessingError.new(uri, 500, exception, res.body)
138
+ rescue ResponseError => exception
139
+ return exception
140
+ end
141
+ end
142
+ end
126
143
  data
127
144
  end
128
145
 
146
+ def self.send_request(uri, method, params, headers, before_request_proc)
147
+ begin
148
+ res = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http|
149
+ req = Net::HTTP::const_get(method.capitalize).new(uri.request_uri, headers)
150
+ req.body = DomoscioRails::JSON.dump(params)
151
+ before_request_proc.call(req) if before_request_proc
152
+ http.request req
153
+ end
154
+ rescue Timeout::Error, Errno::EINVAL, Errno::ECONNREFUSED, Errno::ECONNRESET, EOFError, Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError => exception
155
+ ProcessingError.new(uri, 500, exception, res.body)
156
+ end
157
+ end
158
+
129
159
  private
130
160
 
131
161
  def self.user_agent
132
162
  @uname ||= get_uname
133
-
134
163
  {
135
164
  bindings_version: DomoscioRails::VERSION,
136
165
  lang: 'ruby',
@@ -148,17 +177,21 @@ module DomoscioRails
148
177
 
149
178
  def self.request_headers
150
179
  auth_token = DomoscioRails::AuthorizationToken::Manager.get_token
151
- headers = {
152
- 'user_agent' => "DomoscioRails V2 RubyBindings/#{DomoscioRails::VERSION}",
153
- 'Authorization' => "Token token=#{DomoscioRails.configuration.client_passphrase}",#"#{auth_token['token_type']} #{auth_token['access_token']}",
154
- 'Content-Type' => 'application/json'
155
- }
156
- # begin
157
- # headers.update('x_mangopay_client_user_agent' => DomoscioRails::JSON.dump(user_agent))
158
- # rescue => e
159
- # headers.update('x_mangopay_client_raw_user_agent' => user_agent.inspect, error: "#{e} (#{e.class})")
160
- # end
180
+
181
+ if !auth_token.is_a? String
182
+ headers = {
183
+ 'user_agent' => "#{DomoscioRails.user_agent}",
184
+ 'AccessToken' => "#{auth_token[:access_token]}",
185
+ 'RefreshToken' => "#{auth_token[:refresh_token]}",
186
+ 'Content-Type' => 'application/json'
187
+ }
188
+ else
189
+ headers = {
190
+ 'user_agent' => "#{DomoscioRails.user_agent}",
191
+ 'Authorization' => "Token token=#{DomoscioRails.configuration.client_passphrase}",
192
+ 'Content-Type' => 'application/json'
193
+ }
194
+ end
195
+ headers
161
196
  end
162
-
163
-
164
- end
197
+ end
@@ -1,6 +1,6 @@
1
1
  module DomoscioRails
2
- # An objective knowledge node.
3
- class ObjectiveKnowledgeNode < Resource
4
- include DomoscioRails::HTTPCalls::Fetch
2
+ # An objective knowledge node.
3
+ class ObjectiveKnowledgeNode < Resource
4
+ include DomoscioRails::HTTPCalls::Fetch
5
+ end
5
6
  end
6
- end
@@ -1,6 +1,6 @@
1
1
  module DomoscioRails
2
- # An objective knowledge node student.
3
- class ObjectiveKnowledgeNodeStudent < Resource
4
- include DomoscioRails::HTTPCalls::Fetch
5
- end
6
- end
2
+ class ObjectiveKnowledgeNodeStudent < Resource
3
+ include DomoscioRails::HTTPCalls::Fetch
4
+ include DomoscioRails::HTTPCalls::Update
5
+ end
6
+ end
@@ -5,5 +5,6 @@ module DomoscioRails
5
5
  include DomoscioRails::HTTPCalls::Fetch
6
6
  include DomoscioRails::HTTPCalls::Update
7
7
  include DomoscioRails::HTTPCalls::Destroy
8
+ include DomoscioRails::HTTPCalls::Util
8
9
  end
9
- end
10
+ end
@@ -1,11 +1,9 @@
1
1
  module DomoscioRails
2
2
  module AuthorizationToken
3
-
4
3
  class Manager
5
-
6
4
  class << self
7
5
  def storage
8
- @@storage ||= StaticStorage.new
6
+ @@storage ||= FileStorage.new
9
7
  end
10
8
 
11
9
  def storage= (storage)
@@ -13,22 +11,12 @@ module DomoscioRails
13
11
  end
14
12
 
15
13
  def get_token
16
- # token = storage.get
17
- # if token.nil? || token['timestamp'].nil? || token['timestamp'] <= Time.now
18
- # token = DomoscioRails.request(:post, '/api/oauth/token', {}, {}, {}, Proc.new do |req|
19
- # cfg = DomoscioRails.configuration
20
- # req.basic_auth cfg.client_id, cfg.client_passphrase
21
- # req.body = 'grant_type=client_credentials'
22
- # end)
23
- # token['timestamp'] = Time.now + token['expires_in'].to_i
24
- # storage.store token
25
- # end
26
- token = DomoscioRails.configuration.client_passphrase
14
+ token = storage.get
15
+ token = DomoscioRails.configuration.client_passphrase if token.nil?
27
16
  token
28
17
  end
29
18
  end
30
19
  end
31
-
32
20
  class StaticStorage
33
21
  def get
34
22
  @@token ||= nil
@@ -72,6 +60,7 @@ module DomoscioRails
72
60
  end
73
61
 
74
62
  def file_path
63
+ @temp_dir = DomoscioRails.configuration.temp_dir
75
64
  File.join(@temp_dir, "DomoscioRails.AuthorizationToken.FileStore.tmp")
76
65
  end
77
66
  end
@@ -0,0 +1,10 @@
1
+ module DomoscioRails
2
+ # A LearningSession is basicly a group of events.
3
+ class LearningSession < Resource
4
+
5
+ include DomoscioRails::HTTPCalls::Create
6
+ include DomoscioRails::HTTPCalls::Fetch
7
+ include DomoscioRails::HTTPCalls::Destroy
8
+
9
+ end
10
+ end
@@ -1,24 +1,25 @@
1
1
  module DomoscioRails
2
-
3
2
  # Generic error superclass for MangoPay specific errors.
4
- # Currently never instantiated directly.
5
- # Currently only single subclass used.
6
3
  class Error < StandardError
7
4
  end
8
5
 
9
- # Thrown from any MangoPay API call whenever
10
- # it returns response with HTTP code != 200.
6
+ # Error Message from AdaptiveEngine
11
7
  class ResponseError < Error
12
-
13
- attr_reader :request_url, :code, :details
14
-
15
- def initialize(request_url, code, details)
16
- @request_url, @code, @details = request_url, code, details
8
+ attr_reader :request_url, :code, :details, :body
9
+ def initialize(request_url, code, details, body)
10
+ @request_url, @code, @details, @body = request_url, code, details, body
17
11
  super(message) if message
18
12
  end
13
+ def message; @details.dig(:error, :message) || @details; end
14
+ end
19
15
 
20
- def message; @details['Message']; end
21
- def type; @details['Type']; end
22
- def errors; @details['errors']; end
16
+ # Error Message from DomoscioRails
17
+ class ProcessingError < Error
18
+ attr_reader :request_url, :code, :details, :body
19
+ def initialize(request_url, code, details, body)
20
+ @request_url, @code, @details, @body = request_url, code, details, body
21
+ super(message) if message
22
+ end
23
+ def message; @details.message; end
23
24
  end
24
25
  end
@@ -1,6 +1,6 @@
1
1
  module DomoscioRails
2
2
  module HTTPCalls
3
-
3
+
4
4
  module Create
5
5
  module ClassMethods
6
6
  def create(*id, params)
@@ -25,7 +25,7 @@ module DomoscioRails
25
25
  base.extend(ClassMethods)
26
26
  end
27
27
  end
28
-
28
+
29
29
  module UpdateSelf
30
30
  module ClassMethods
31
31
  def update_self(params = {})
@@ -54,7 +54,7 @@ module DomoscioRails
54
54
  id_or_filters.is_a?(Hash) ? [nil, id_or_filters] : [id_or_filters, {}]
55
55
  end
56
56
  end
57
-
57
+
58
58
  module Destroy
59
59
  module ClassMethods
60
60
  def destroy(id = nil, params = {})
@@ -64,21 +64,24 @@ module DomoscioRails
64
64
 
65
65
  def self.included(base)
66
66
  base.extend(ClassMethods)
67
- end
67
+ end
68
68
  end
69
-
69
+
70
70
  module Util
71
71
  module ClassMethods
72
72
  def util(id = nil, util_name = nil, params = {})
73
73
  DomoscioRails.request(:get, url(id, util_name), params)
74
74
  end
75
+ def util_post(id = nil, util_name = nil, params = {})
76
+ DomoscioRails.request(:post, url(id, util_name), params)
77
+ end
75
78
  end
76
79
 
77
80
  def self.included(base)
78
81
  base.extend(ClassMethods)
79
- end
82
+ end
80
83
  end
81
-
82
-
84
+
85
+
83
86
  end
84
- end
87
+ end
@@ -0,0 +1,6 @@
1
+ module DomoscioRails
2
+ # A delta object.
3
+ class DeltaObject < Resource
4
+ include DomoscioRails::HTTPCalls::Fetch
5
+ end
6
+ end
@@ -1,16 +1,13 @@
1
1
  module DomoscioRails
2
- # @abstract
3
2
  class Resource
4
3
  class << self
5
4
  def class_name
6
5
  name.split('::')[-1]
7
6
  end
8
-
9
7
  def url(id = nil, util_name = nil, on_self = nil )
10
8
  if self == Resource
11
9
  raise NotImplementedError.new('Resource is an abstract class. Do not use it directly.')
12
10
  end
13
-
14
11
  build_url = "/v#{DomoscioRails.configuration.version}/instances/#{DomoscioRails.configuration.client_id}"
15
12
  if !on_self
16
13
  build_url << "/#{class_name.underscore}s"
@@ -25,4 +22,4 @@ module DomoscioRails
25
22
  end
26
23
  end
27
24
  end
28
- end
25
+ end
@@ -0,0 +1,6 @@
1
+ module DomoscioRails
2
+ # A company.
3
+ class AlertsUtil < Resource
4
+ include DomoscioRails::HTTPCalls::Util
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ module DomoscioRails
2
+ # A company.
3
+ class RecommendationUtil < Resource
4
+ include DomoscioRails::HTTPCalls::Util
5
+ end
6
+ end
@@ -1,3 +1,3 @@
1
1
  module DomoscioRails
2
- VERSION = "0.2.14"
3
- end
2
+ VERSION = "0.3.1"
3
+ 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.2.14
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benoit Praly
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-30 00:00:00.000000000 Z
11
+ date: 2020-12-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -24,7 +24,7 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '3.2'
27
- description: Description of DomoscioRails.
27
+ description: Ruby client to interact with Domoscio API.
28
28
  email:
29
29
  - benoit.praly@domoscio.com
30
30
  executables: []
@@ -46,12 +46,12 @@ files:
46
46
  - lib/domoscio_rails/adaptative/predictive/objective_student.rb
47
47
  - lib/domoscio_rails/adaptative/recommendation.rb
48
48
  - lib/domoscio_rails/admin/instance.rb
49
- - lib/domoscio_rails/admin/user.rb
50
49
  - lib/domoscio_rails/authorization_token.rb
51
50
  - lib/domoscio_rails/content/content.rb
52
51
  - lib/domoscio_rails/content/knowledge_node_content.rb
53
52
  - lib/domoscio_rails/data/event.rb
54
53
  - lib/domoscio_rails/data/knowledge_node_student.rb
54
+ - lib/domoscio_rails/data/learning_session.rb
55
55
  - lib/domoscio_rails/data/result.rb
56
56
  - lib/domoscio_rails/errors.rb
57
57
  - lib/domoscio_rails/http_calls.rb
@@ -59,6 +59,7 @@ files:
59
59
  - lib/domoscio_rails/knowledge/knowledge_edge.rb
60
60
  - lib/domoscio_rails/knowledge/knowledge_graph.rb
61
61
  - lib/domoscio_rails/knowledge/knowledge_node.rb
62
+ - lib/domoscio_rails/metadata/delta_object.rb
62
63
  - lib/domoscio_rails/metadata/tag.rb
63
64
  - lib/domoscio_rails/metadata/tag_edge.rb
64
65
  - lib/domoscio_rails/metadata/tag_set.rb
@@ -67,10 +68,11 @@ files:
67
68
  - lib/domoscio_rails/resource.rb
68
69
  - lib/domoscio_rails/student/student.rb
69
70
  - lib/domoscio_rails/student/student_cluster.rb
71
+ - lib/domoscio_rails/utils/alerts_util.rb
70
72
  - lib/domoscio_rails/utils/gameplay_util.rb
73
+ - lib/domoscio_rails/utils/recommendation_util.rb
71
74
  - lib/domoscio_rails/utils/review_util.rb
72
75
  - lib/domoscio_rails/version.rb
73
- - lib/tasks/domoscio_rails_tasks.rake
74
76
  homepage: http://www.domoscio.com
75
77
  licenses:
76
78
  - MIT
@@ -90,8 +92,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
90
92
  - !ruby/object:Gem::Version
91
93
  version: '0'
92
94
  requirements: []
93
- rubyforge_project:
94
- rubygems_version: 2.6.8
95
+ rubygems_version: 3.0.3
95
96
  signing_key:
96
97
  specification_version: 4
97
98
  summary: Summary of DomoscioRails.
@@ -1,10 +0,0 @@
1
- module DomoscioRails
2
- # A user of the API.
3
- class User < Resource
4
-
5
- include DomoscioRails::HTTPCalls::Create
6
- include DomoscioRails::HTTPCalls::Fetch
7
- include DomoscioRails::HTTPCalls::Update
8
-
9
- end
10
- end
@@ -1,4 +0,0 @@
1
- # desc "Explaining what the task does"
2
- # task :domoscio_rails do
3
- # # Task goes here
4
- # end