domoscio_rails 0.3.8 → 0.4.2

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.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +0 -4
  3. data/lib/domoscio_rails/authorization_token.rb +24 -22
  4. data/lib/domoscio_rails/data/content.rb +1 -3
  5. data/lib/domoscio_rails/data/event.rb +1 -3
  6. data/lib/domoscio_rails/data/instance.rb +0 -2
  7. data/lib/domoscio_rails/data/learning_session.rb +2 -3
  8. data/lib/domoscio_rails/data/recommendation.rb +1 -3
  9. data/lib/domoscio_rails/data/student.rb +2 -4
  10. data/lib/domoscio_rails/data/student_group.rb +8 -0
  11. data/lib/domoscio_rails/errors.rb +21 -5
  12. data/lib/domoscio_rails/http_calls.rb +3 -0
  13. data/lib/domoscio_rails/json.rb +1 -1
  14. data/lib/domoscio_rails/knowledge/knowledge_edge.rb +2 -4
  15. data/lib/domoscio_rails/knowledge/knowledge_graph.rb +2 -4
  16. data/lib/domoscio_rails/knowledge/knowledge_node.rb +2 -4
  17. data/lib/domoscio_rails/knowledge/knowledge_node_content.rb +2 -4
  18. data/lib/domoscio_rails/knowledge/knowledge_node_student.rb +1 -3
  19. data/lib/domoscio_rails/objective/objective.rb +2 -4
  20. data/lib/domoscio_rails/objective/objective_knowledge_node.rb +4 -3
  21. data/lib/domoscio_rails/objective/objective_knowledge_node_student.rb +3 -3
  22. data/lib/domoscio_rails/objective/objective_student.rb +1 -3
  23. data/lib/domoscio_rails/resource.rb +18 -14
  24. data/lib/domoscio_rails/tag/tag.rb +2 -4
  25. data/lib/domoscio_rails/tag/tag_edge.rb +2 -4
  26. data/lib/domoscio_rails/tag/tag_set.rb +2 -4
  27. data/lib/domoscio_rails/tag/tagging.rb +2 -4
  28. data/lib/domoscio_rails/utils/gameplay_util.rb +1 -3
  29. data/lib/domoscio_rails/utils/recommendation_util.rb +1 -3
  30. data/lib/domoscio_rails/utils/review_util.rb +1 -3
  31. data/lib/domoscio_rails/utils/stats_util.rb +5 -0
  32. data/lib/domoscio_rails/version.rb +2 -2
  33. data/lib/domoscio_rails.rb +88 -86
  34. metadata +29 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 843d2aaa033b798f0fca1763630df19f72952291e71fac2ac4bc5a4bf8f23424
4
- data.tar.gz: 1cfe0284cc12660155bedc5aed80d96bbb4a420e0e11d72480de29cb6f068982
3
+ metadata.gz: d84d18d926ff49fafe9bf5e48907f7e5ad5379660d1846f695e73b2f3b958029
4
+ data.tar.gz: 1fbc96e7c54dba8c7676a1933d35638f9767dcf9cb38f5df3b61fd5350f6b489
5
5
  SHA512:
6
- metadata.gz: 7c5e3c8bbaebb0197aaed4b4f70f3aa56e9e14a047b683b40df7c27b5eb12b8ab46346b7ad14300de747aa6b9d350de574143928db115de5dab74f32ca84c2bb
7
- data.tar.gz: 932e4a3432820545c4a4ff966ca168fe1be9e554f655f71b59046d9f0af82231b9009e0dfabcbcb70f161b43114757db58b201cb26f122d97d5bab11a4ee31f5
6
+ metadata.gz: a69b023608cf340083931858b547b74ee9c3da3f481a28d27f8dac638834b32372fb2856d57d1df0f002f255379649f985fcee907152084f044388ff09323b0d
7
+ data.tar.gz: f48ca74ee109d995e27f9c26d0567a3d4e1c92858fd65e62bd448a6c5ffef09903c5ad2bbcd05f79cfa2bf5b2e4e87e6313b4148ab36494e03d59453d5102bb8
data/Rakefile CHANGED
@@ -14,9 +14,6 @@ RDoc::Task.new(:rdoc) do |rdoc|
14
14
  rdoc.rdoc_files.include('lib/**/*.rb')
15
15
  end
16
16
 
17
-
18
-
19
-
20
17
  Bundler::GemHelper.install_tasks
21
18
 
22
19
  require 'rake/testtask'
@@ -28,5 +25,4 @@ Rake::TestTask.new(:test) do |t|
28
25
  t.verbose = false
29
26
  end
30
27
 
31
-
32
28
  task default: :test
@@ -1,51 +1,53 @@
1
1
  module DomoscioRails
2
2
  module AuthorizationToken
3
+ # Token Manager
3
4
  class Manager
4
5
  class << self
5
6
  def storage
6
- @@storage ||= FileStorage.new
7
+ @storage ||= DomoscioRails.configuration.file_storage ? FileStorage.new : ManualSetting.new
7
8
  end
8
9
 
9
- def storage= (storage)
10
- @@storage = storage
11
- end
12
-
13
- def get_token
10
+ def token
14
11
  storage.get
15
12
  end
16
13
  end
17
14
  end
18
- class StaticStorage
15
+
16
+ # Manages tokens with configuration
17
+ class ManualSetting
19
18
  def get
20
- @@token ||= nil
19
+ {
20
+ access_token: DomoscioRails.configuration.access_token,
21
+ refresh_token: DomoscioRails.configuration.refresh_token
22
+ }
21
23
  end
22
24
 
23
25
  def store(token)
24
- @@token = token
26
+ DomoscioRails.configuration.access_token = token[:access_token]
27
+ DomoscioRails.configuration.refresh_token = token[:refresh_token]
25
28
  end
26
29
  end
27
30
 
31
+ # Manages tokens with local File
28
32
  class FileStorage
29
33
  require 'yaml'
30
34
 
31
35
  def initialize
32
- raise "Path to temporary folder is not defined" unless DomoscioRails.configuration.temp_dir
36
+ raise 'Path to temporary folder is not defined' unless DomoscioRails.configuration.temp_dir
33
37
  end
34
38
 
35
39
  def get
36
- begin
37
- f = File.open(file_path, File::RDONLY)
38
- f.flock(File::LOCK_SH)
39
- txt = f.read
40
- f.close
41
- YAML.load(txt) || nil
42
- rescue Errno::ENOENT
43
- nil
44
- end
40
+ f = File.open(file_path, File::RDONLY)
41
+ f.flock(File::LOCK_SH)
42
+ txt = f.read
43
+ f.close
44
+ YAML.safe_load(txt) || nil
45
+ rescue Errno::ENOENT
46
+ nil
45
47
  end
46
48
 
47
49
  def store(token)
48
- File.open(file_path, File::RDWR|File::CREAT, 0644) do |f|
50
+ File.open(file_path, File::RDWR|File::CREAT, 0o644) do |f|
49
51
  f.flock(File::LOCK_EX)
50
52
  f.truncate(0)
51
53
  f.rewind
@@ -54,8 +56,8 @@ module DomoscioRails
54
56
  end
55
57
 
56
58
  def file_path
57
- File.join(DomoscioRails.configuration.temp_dir, "DomoscioRails.AuthorizationToken.FileStore.tmp")
59
+ File.join(DomoscioRails.configuration.temp_dir, 'DomoscioRails.AuthorizationToken.FileStore.tmp')
58
60
  end
59
61
  end
60
62
  end
61
- end
63
+ end
@@ -1,11 +1,9 @@
1
1
  module DomoscioRails
2
2
  class Content < Resource
3
-
4
3
  include DomoscioRails::HTTPCalls::Create
5
4
  include DomoscioRails::HTTPCalls::Fetch
6
5
  include DomoscioRails::HTTPCalls::Update
7
6
  include DomoscioRails::HTTPCalls::Destroy
8
7
  include DomoscioRails::HTTPCalls::Util
9
-
10
8
  end
11
- end
9
+ end
@@ -1,9 +1,7 @@
1
1
  module DomoscioRails
2
2
  class Event < Resource
3
-
4
3
  include DomoscioRails::HTTPCalls::Create
5
4
  include DomoscioRails::HTTPCalls::Fetch
6
5
  include DomoscioRails::HTTPCalls::Destroy
7
-
8
6
  end
9
- end
7
+ end
@@ -1,10 +1,8 @@
1
1
  module DomoscioRails
2
2
  class Instance < Resource
3
-
4
3
  include DomoscioRails::HTTPCalls::Create
5
4
  include DomoscioRails::HTTPCalls::Fetch
6
5
  include DomoscioRails::HTTPCalls::UpdateSelf
7
6
  include DomoscioRails::HTTPCalls::Destroy
8
-
9
7
  end
10
8
  end
@@ -1,10 +1,9 @@
1
1
  module DomoscioRails
2
2
  class LearningSession < Resource
3
-
4
3
  include DomoscioRails::HTTPCalls::Create
5
4
  include DomoscioRails::HTTPCalls::Fetch
6
5
  include DomoscioRails::HTTPCalls::Destroy
6
+ include DomoscioRails::HTTPCalls::Update
7
7
  include DomoscioRails::HTTPCalls::Util
8
-
9
8
  end
10
- end
9
+ end
@@ -1,7 +1,5 @@
1
1
  module DomoscioRails
2
2
  class Recommendation < Resource
3
-
4
3
  include DomoscioRails::HTTPCalls::Fetch
5
-
6
4
  end
7
- end
5
+ end
@@ -1,10 +1,8 @@
1
1
  module DomoscioRails
2
2
  class Student < Resource
3
-
4
3
  include DomoscioRails::HTTPCalls::Create
5
4
  include DomoscioRails::HTTPCalls::Fetch
6
- include DomoscioRails::HTTPCalls::Update
7
5
  include DomoscioRails::HTTPCalls::Destroy
8
-
6
+ include DomoscioRails::HTTPCalls::Update
9
7
  end
10
- end
8
+ end
@@ -0,0 +1,8 @@
1
+ module DomoscioRails
2
+ class StudentGroup < Resource
3
+ include DomoscioRails::HTTPCalls::Create
4
+ include DomoscioRails::HTTPCalls::Fetch
5
+ include DomoscioRails::HTTPCalls::Destroy
6
+ include DomoscioRails::HTTPCalls::Update
7
+ end
8
+ end
@@ -6,20 +6,36 @@ module DomoscioRails
6
6
  # Error Message from AdaptiveEngine
7
7
  class ResponseError < Error
8
8
  attr_reader :request_url, :code, :details, :body, :request_params
9
+
9
10
  def initialize(request_url, code, details = {}, body = nil, request_params = {})
10
- @request_url, @code, @details, @body, @request_params = request_url, code, details, body, request_params
11
+ @request_url = request_url
12
+ @code = code
13
+ @details = details
14
+ @body = body
15
+ @request_params = request_params
11
16
  super(message) if message
12
17
  end
13
- def message; (@details.is_a?(Hash) && @details[:error].is_a?(Hash)) ? @details.dig(:error, :message) : @details; end
18
+
19
+ def message
20
+ @details.is_a?(Hash) && @details[:error].is_a?(Hash) ? @details.dig(:error, :message) : @details
21
+ end
14
22
  end
15
23
 
16
24
  # ProcessingError from DomoscioRails
17
25
  class ProcessingError < Error
18
26
  attr_reader :request_url, :code, :details, :body, :request_params
27
+
19
28
  def initialize(request_url, code, details = {}, body = nil, request_params = {})
20
- @request_url, @code, @details, @body, @request_params = request_url, code, details, body, request_params
29
+ @request_url = request_url
30
+ @code = code
31
+ @details = details
32
+ @body = body
33
+ @request_params = request_params
21
34
  super(message) if message
22
35
  end
23
- def message; @details.message; end
36
+
37
+ def message
38
+ @details.message
39
+ end
24
40
  end
25
- end
41
+ end
@@ -8,6 +8,7 @@ module DomoscioRails
8
8
  DomoscioRails.request(:post, url(id), params)
9
9
  end
10
10
  end
11
+
11
12
  def self.included(base)
12
13
  base.extend(ClassMethods)
13
14
  end
@@ -19,6 +20,7 @@ module DomoscioRails
19
20
  DomoscioRails.request(:put, url(id), params)
20
21
  end
21
22
  end
23
+
22
24
  def self.included(base)
23
25
  base.extend(ClassMethods)
24
26
  end
@@ -64,6 +66,7 @@ module DomoscioRails
64
66
  def util(id = nil, util_name = nil, params = {})
65
67
  DomoscioRails.request(:get, url(id, util_name), params)
66
68
  end
69
+
67
70
  def util_post(id = nil, util_name = nil, params = {})
68
71
  DomoscioRails.request(:post, url(id, util_name), params)
69
72
  end
@@ -20,4 +20,4 @@ module DomoscioRails
20
20
  end
21
21
  end
22
22
  end
23
- end
23
+ end
@@ -1,10 +1,8 @@
1
1
  module DomoscioRails
2
2
  class KnowledgeEdge < Resource
3
-
4
3
  include DomoscioRails::HTTPCalls::Create
5
4
  include DomoscioRails::HTTPCalls::Fetch
6
- include DomoscioRails::HTTPCalls::Update
7
5
  include DomoscioRails::HTTPCalls::Destroy
8
-
6
+ include DomoscioRails::HTTPCalls::Update
9
7
  end
10
- end
8
+ end
@@ -1,10 +1,8 @@
1
1
  module DomoscioRails
2
2
  class KnowledgeGraph < Resource
3
-
4
3
  include DomoscioRails::HTTPCalls::Create
5
4
  include DomoscioRails::HTTPCalls::Fetch
6
- include DomoscioRails::HTTPCalls::Update
7
5
  include DomoscioRails::HTTPCalls::Destroy
8
-
6
+ include DomoscioRails::HTTPCalls::Update
9
7
  end
10
- end
8
+ end
@@ -1,10 +1,8 @@
1
1
  module DomoscioRails
2
2
  class KnowledgeNode < Resource
3
-
4
3
  include DomoscioRails::HTTPCalls::Create
5
4
  include DomoscioRails::HTTPCalls::Fetch
6
- include DomoscioRails::HTTPCalls::Update
7
5
  include DomoscioRails::HTTPCalls::Destroy
8
-
6
+ include DomoscioRails::HTTPCalls::Update
9
7
  end
10
- end
8
+ end
@@ -1,10 +1,8 @@
1
1
  module DomoscioRails
2
2
  class KnowledgeNodeContent < Resource
3
-
4
3
  include DomoscioRails::HTTPCalls::Create
5
4
  include DomoscioRails::HTTPCalls::Fetch
6
- include DomoscioRails::HTTPCalls::Update
7
5
  include DomoscioRails::HTTPCalls::Destroy
8
-
6
+ include DomoscioRails::HTTPCalls::Update
9
7
  end
10
- end
8
+ end
@@ -1,10 +1,8 @@
1
1
  module DomoscioRails
2
2
  class KnowledgeNodeStudent < Resource
3
-
4
3
  include DomoscioRails::HTTPCalls::Create
5
4
  include DomoscioRails::HTTPCalls::Fetch
6
5
  include DomoscioRails::HTTPCalls::Destroy
7
6
  include DomoscioRails::HTTPCalls::Update
8
-
9
7
  end
10
- end
8
+ end
@@ -1,10 +1,8 @@
1
1
  module DomoscioRails
2
2
  class Objective < Resource
3
-
4
3
  include DomoscioRails::HTTPCalls::Create
5
4
  include DomoscioRails::HTTPCalls::Fetch
6
- include DomoscioRails::HTTPCalls::Update
7
5
  include DomoscioRails::HTTPCalls::Destroy
8
-
6
+ include DomoscioRails::HTTPCalls::Update
9
7
  end
10
- end
8
+ end
@@ -1,7 +1,8 @@
1
1
  module DomoscioRails
2
2
  class ObjectiveKnowledgeNode < Resource
3
-
3
+ include DomoscioRails::HTTPCalls::Create
4
4
  include DomoscioRails::HTTPCalls::Fetch
5
-
5
+ include DomoscioRails::HTTPCalls::Destroy
6
+ include DomoscioRails::HTTPCalls::Update
6
7
  end
7
- end
8
+ end
@@ -1,8 +1,8 @@
1
1
  module DomoscioRails
2
2
  class ObjectiveKnowledgeNodeStudent < Resource
3
-
3
+ include DomoscioRails::HTTPCalls::Create
4
4
  include DomoscioRails::HTTPCalls::Fetch
5
+ include DomoscioRails::HTTPCalls::Destroy
5
6
  include DomoscioRails::HTTPCalls::Update
6
-
7
7
  end
8
- end
8
+ end
@@ -1,11 +1,9 @@
1
1
  module DomoscioRails
2
2
  class ObjectiveStudent < Resource
3
-
4
3
  include DomoscioRails::HTTPCalls::Create
5
4
  include DomoscioRails::HTTPCalls::Fetch
6
- include DomoscioRails::HTTPCalls::Update
7
5
  include DomoscioRails::HTTPCalls::Destroy
6
+ include DomoscioRails::HTTPCalls::Update
8
7
  include DomoscioRails::HTTPCalls::Util
9
-
10
8
  end
11
9
  end
@@ -4,22 +4,26 @@ module DomoscioRails
4
4
  def class_name
5
5
  name.split('::')[-1]
6
6
  end
7
- def url(id = nil, util_name = nil, on_self = nil )
8
- if self == Resource
9
- raise NotImplementedError.new('Resource is an abstract class. Do not use it directly.')
10
- end
7
+
8
+ def url(id = nil, util_name = nil, on_self = nil)
9
+ raise NotImplementedError, 'Resource is an abstract class. Do not use it directly.' if self == Resource
10
+
11
11
  build_url = "/v#{DomoscioRails.configuration.version}/instances/#{DomoscioRails.configuration.client_id}"
12
- if !on_self
13
- build_url << "/#{class_name.underscore}s"
14
- if util_name
15
- build_url << "/#{util_name}"
16
- end
17
- if id
18
- build_url << "/#{CGI.escape(id.to_s)}"
19
- end
12
+ unless on_self
13
+ build_url << "/#{underscore(class_name)}s"
14
+ build_url << "/#{util_name}" if util_name
15
+ build_url << "/#{CGI.escape(id.to_s)}" if id
20
16
  end
21
- return build_url
17
+ build_url
18
+ end
19
+
20
+ def underscore(string)
21
+ string.gsub(/::/, '/')
22
+ .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
23
+ .gsub(/([a-z\d])([A-Z])/, '\1_\2')
24
+ .tr('-', '_')
25
+ .downcase
22
26
  end
23
27
  end
24
28
  end
25
- end
29
+ end
@@ -1,10 +1,8 @@
1
1
  module DomoscioRails
2
2
  class Tag < Resource
3
-
4
3
  include DomoscioRails::HTTPCalls::Create
5
4
  include DomoscioRails::HTTPCalls::Fetch
6
- include DomoscioRails::HTTPCalls::Update
7
5
  include DomoscioRails::HTTPCalls::Destroy
8
-
6
+ include DomoscioRails::HTTPCalls::Update
9
7
  end
10
- end
8
+ end
@@ -1,10 +1,8 @@
1
1
  module DomoscioRails
2
2
  class TagEdge < Resource
3
-
4
3
  include DomoscioRails::HTTPCalls::Create
5
4
  include DomoscioRails::HTTPCalls::Fetch
6
- include DomoscioRails::HTTPCalls::Update
7
5
  include DomoscioRails::HTTPCalls::Destroy
8
-
6
+ include DomoscioRails::HTTPCalls::Update
9
7
  end
10
- end
8
+ end
@@ -1,10 +1,8 @@
1
1
  module DomoscioRails
2
2
  class TagSet < Resource
3
-
4
3
  include DomoscioRails::HTTPCalls::Create
5
4
  include DomoscioRails::HTTPCalls::Fetch
6
- include DomoscioRails::HTTPCalls::Update
7
5
  include DomoscioRails::HTTPCalls::Destroy
8
-
6
+ include DomoscioRails::HTTPCalls::Update
9
7
  end
10
- end
8
+ end
@@ -1,10 +1,8 @@
1
1
  module DomoscioRails
2
2
  class Tagging < Resource
3
-
4
3
  include DomoscioRails::HTTPCalls::Create
5
4
  include DomoscioRails::HTTPCalls::Fetch
6
- include DomoscioRails::HTTPCalls::Update
7
5
  include DomoscioRails::HTTPCalls::Destroy
8
-
6
+ include DomoscioRails::HTTPCalls::Update
9
7
  end
10
- end
8
+ end
@@ -1,7 +1,5 @@
1
1
  module DomoscioRails
2
2
  class GameplayUtil < Resource
3
-
4
3
  include DomoscioRails::HTTPCalls::Util
5
-
6
4
  end
7
- end
5
+ end
@@ -1,7 +1,5 @@
1
1
  module DomoscioRails
2
2
  class RecommendationUtil < Resource
3
-
4
3
  include DomoscioRails::HTTPCalls::Util
5
-
6
4
  end
7
- end
5
+ end
@@ -1,7 +1,5 @@
1
1
  module DomoscioRails
2
2
  class ReviewUtil < Resource
3
-
4
3
  include DomoscioRails::HTTPCalls::Util
5
-
6
4
  end
7
- end
5
+ end
@@ -0,0 +1,5 @@
1
+ module DomoscioRails
2
+ class StatsUtil < Resource
3
+ include DomoscioRails::HTTPCalls::Util
4
+ end
5
+ end
@@ -1,3 +1,3 @@
1
1
  module DomoscioRails
2
- VERSION = "0.3.8"
3
- end
2
+ VERSION = '0.4.2'.freeze
3
+ end
@@ -1,4 +1,3 @@
1
-
2
1
  require 'net/https'
3
2
  require 'cgi/util'
4
3
  require 'multi_json'
@@ -10,40 +9,41 @@ require 'domoscio_rails/authorization_token'
10
9
  # resources
11
10
  require 'domoscio_rails/http_calls'
12
11
  require 'domoscio_rails/resource'
13
- require 'domoscio_rails/data/content.rb'
14
- require 'domoscio_rails/data/event.rb'
15
- require 'domoscio_rails/data/instance.rb'
16
- require 'domoscio_rails/data/recommendation.rb'
17
- require 'domoscio_rails/data/learning_session.rb'
18
- require 'domoscio_rails/data/student.rb'
19
- require 'domoscio_rails/knowledge/knowledge_edge.rb'
20
- require 'domoscio_rails/knowledge/knowledge_graph.rb'
21
- require 'domoscio_rails/knowledge/knowledge_node_content.rb'
22
- require 'domoscio_rails/knowledge/knowledge_node_student.rb'
23
- require 'domoscio_rails/knowledge/knowledge_node.rb'
24
- require 'domoscio_rails/objective/objective_knowledge_node_student.rb'
25
- require 'domoscio_rails/objective/objective_knowledge_node.rb'
26
- require 'domoscio_rails/objective/objective_student.rb'
27
- require 'domoscio_rails/objective/objective.rb'
28
- require 'domoscio_rails/tag/tag_edge.rb'
29
- require 'domoscio_rails/tag/tag_set.rb'
30
- require 'domoscio_rails/tag/tag.rb'
31
- require 'domoscio_rails/tag/tagging.rb'
32
- require 'domoscio_rails/utils/gameplay_util.rb'
33
- require 'domoscio_rails/utils/recommendation_util.rb'
34
- require 'domoscio_rails/utils/review_util.rb'
12
+ require 'domoscio_rails/data/content'
13
+ require 'domoscio_rails/data/event'
14
+ require 'domoscio_rails/data/instance'
15
+ require 'domoscio_rails/data/recommendation'
16
+ require 'domoscio_rails/data/learning_session'
17
+ require 'domoscio_rails/data/student'
18
+ require 'domoscio_rails/data/student_group'
19
+ require 'domoscio_rails/knowledge/knowledge_edge'
20
+ require 'domoscio_rails/knowledge/knowledge_graph'
21
+ require 'domoscio_rails/knowledge/knowledge_node_content'
22
+ require 'domoscio_rails/knowledge/knowledge_node_student'
23
+ require 'domoscio_rails/knowledge/knowledge_node'
24
+ require 'domoscio_rails/objective/objective_knowledge_node_student'
25
+ require 'domoscio_rails/objective/objective_knowledge_node'
26
+ require 'domoscio_rails/objective/objective_student'
27
+ require 'domoscio_rails/objective/objective'
28
+ require 'domoscio_rails/tag/tag_edge'
29
+ require 'domoscio_rails/tag/tag_set'
30
+ require 'domoscio_rails/tag/tag'
31
+ require 'domoscio_rails/tag/tagging'
32
+ require 'domoscio_rails/utils/gameplay_util'
33
+ require 'domoscio_rails/utils/recommendation_util'
34
+ require 'domoscio_rails/utils/review_util'
35
+ require 'domoscio_rails/utils/stats_util'
35
36
 
36
37
  module DomoscioRails
38
+ # Configurable attributes and default values
37
39
  class Configuration
38
- attr_accessor :root_url, :client_id, :client_passphrase, :temp_dir, :version
39
-
40
- # Refers to AdaptiveEngine Version
41
- def version
42
- @version ||= 2
43
- end
40
+ attr_accessor :client_id, :client_passphrase, :temp_dir, :version,
41
+ :root_url, :file_storage, :access_token, :refresh_token
44
42
 
45
- def root_url
46
- @root_url ||= ""
43
+ def initialize
44
+ @version = 2
45
+ @root_url = ''
46
+ @file_storage ||= true
47
47
  end
48
48
  end
49
49
 
@@ -56,7 +56,7 @@ module DomoscioRails
56
56
  yield configuration
57
57
  end
58
58
 
59
- def self.api_uri(url='')
59
+ def self.api_uri(url = '')
60
60
  URI(configuration.root_url + url)
61
61
  end
62
62
 
@@ -72,76 +72,77 @@ module DomoscioRails
72
72
  # Raises DomoscioRails::ProcessingError on Internal Error
73
73
  #
74
74
  def self.request(method, url, params={})
75
-
76
75
  store_tokens, headers = request_headers
77
- params.merge!({'per_page': 2000}) unless params[:per_page]
76
+ params.merge!({ 'per_page': 1000 }) unless params[:per_page]
78
77
  uri = api_uri(url)
79
-
80
78
  response = DomoscioRails.send_request(uri, method, params, headers)
81
- return response if response.kind_of? DomoscioRails::ProcessingError
79
+ return response if response.is_a? DomoscioRails::ProcessingError
82
80
 
83
81
  begin
84
82
  raise_http_failure(uri, response, params)
85
83
  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
87
- rescue MultiJson::LoadError => exception
88
- data = ProcessingError.new(uri, 500, exception, response.body, params)
89
- rescue ResponseError => exception
90
- data = exception
84
+ if store_tokens
85
+ DomoscioRails::AuthorizationToken::Manager.storage.store({
86
+ access_token: response['Accesstoken'],
87
+ refresh_token: response['Refreshtoken']
88
+ })
89
+ end
90
+ rescue MultiJson::LoadError => e
91
+ data = ProcessingError.new(uri, 500, e, response.body, params)
92
+ rescue ResponseError => e
93
+ data = e
91
94
  end
92
95
 
93
96
  if response['Total']
94
97
  pagetotal = (response['Total'].to_i / response['Per-Page'].to_f).ceil
95
- for j in 2..pagetotal
96
- response = DomoscioRails.send_request(uri, method, params.merge({page: j}), headers)
97
- return response if response.kind_of? DomoscioRails::ProcessingError
98
+ (2..pagetotal).each do |j|
99
+ response = DomoscioRails.send_request(uri, method, params.merge({ page: j }), headers)
100
+ return response if response.is_a? DomoscioRails::ProcessingError
101
+
98
102
  begin
99
103
  raise_http_failure(uri, response, params)
100
104
  body = DomoscioRails::JSON.load(response.body.nil? ? '' : response.body)
101
105
  data += body
102
106
  data.flatten!
103
- rescue MultiJson::LoadError => exception
104
- return ProcessingError.new(uri, 500, exception, response.body, params)
105
- rescue ResponseError => exception
106
- return exception
107
+ rescue MultiJson::LoadError => e
108
+ return ProcessingError.new(uri, 500, e, response.body, params)
109
+ rescue ResponseError => e
110
+ return e
107
111
  end
108
112
  end
109
113
  end
110
114
  data
111
115
  end
112
116
 
113
- private
114
-
115
- # This function catches usual Http errors during calls
117
+ # This function catches usual Http errors during callsheaders
116
118
  #
117
119
  def self.send_request(uri, method, params, headers)
118
- begin
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
122
- rescue Timeout::Error, Errno::EINVAL, Errno::ECONNREFUSED, Errno::ECONNRESET, EOFError, Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError => exception
123
- ProcessingError.new(uri, 500, exception, response)
124
- end
120
+ response = perform_call(uri, method, params, headers)
121
+ response = retry_call_and_store_tokens(uri, method, params) if %w[401 403].include? response.code
122
+ response
123
+ rescue Timeout::Error, Errno::EINVAL, Errno::ECONNREFUSED, Errno::ECONNRESET,
124
+ EOFError, Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError => e
125
+ ProcessingError.new(uri, 500, e, response)
125
126
  end
126
127
 
127
128
  # This helper will check the response status and build the correcponding DomoscioRails::ResponseError
128
129
  #
129
130
  def self.raise_http_failure(uri, response, params)
130
- unless response.kind_of? Net::HTTPSuccess
131
- if response.blank?
132
- raise ResponseError.new(uri, 500, {error: {status: 500, message: 'AdaptiveEngine not available'}}, {}, params)
133
- else
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)
136
- end
137
- end
131
+ return if response.is_a? Net::HTTPSuccess
132
+
133
+ raise ResponseError.new(
134
+ uri,
135
+ response.code.to_i,
136
+ DomoscioRails::JSON.load((response.body.nil? ? '' : response.body), symbolize_keys: true),
137
+ response.body, params
138
+ )
138
139
  end
139
140
 
140
141
  # Actual HTTP call is performed here
141
142
  #
142
143
  def self.perform_call(uri, method, params, headers)
143
144
  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 = Net::HTTP.const_get(method.capitalize).new(uri.request_uri, headers)
145
146
  req.body = DomoscioRails::JSON.dump(params)
146
147
  http.request req
147
148
  end
@@ -149,26 +150,29 @@ module DomoscioRails
149
150
 
150
151
  # This method is called when AdaptiveEngine returns tokens errors
151
152
  # 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
+ def self.retry_call_and_store_tokens(uri, method, params)
153
154
  headers = request_new_tokens
154
155
  response = perform_call(uri, method, params, headers)
155
- DomoscioRails::AuthorizationToken::Manager.storage.store({access_token: response['Accesstoken'], refresh_token: response['Refreshtoken']})
156
+ DomoscioRails::AuthorizationToken::Manager.storage.store({
157
+ access_token: response['Accesstoken'],
158
+ refresh_token: response['Refreshtoken']
159
+ })
156
160
  response
157
161
  end
158
162
 
159
163
  def self.user_agent
160
- @uname ||= get_uname
164
+ @uname ||= uname
161
165
  {
162
166
  bindings_version: DomoscioRails::VERSION,
163
167
  lang: 'ruby',
164
168
  lang_version: "#{RUBY_VERSION} p#{RUBY_PATCHLEVEL} (#{RUBY_RELEASE_DATE})",
165
169
  platform: RUBY_PLATFORM,
166
170
  uname: @uname
167
- }
171
+ }.to_s
168
172
  end
169
173
 
170
- def self.get_uname
171
- `uname -a 2>/dev/null`.strip if RUBY_PLATFORM =~ /linux|darwin/i
174
+ def self.uname
175
+ `uname -a 2>/dev/null` if RUBY_PLATFORM =~ /linux|darwin/i
172
176
  rescue Errno::ENOMEM
173
177
  'uname lookup failed'
174
178
  end
@@ -177,25 +181,23 @@ module DomoscioRails
177
181
  # will return the processed headers and a token store flag
178
182
  #
179
183
  def self.request_headers
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
184
+ auth_token = DomoscioRails::AuthorizationToken::Manager.token
185
+ if auth_token && auth_token[:access_token] && auth_token[:refresh_token]
186
+ [false, send_current_tokens(auth_token)]
187
+ else
188
188
  [true, request_new_tokens]
189
189
  end
190
+ rescue SyntaxError, StandardError
191
+ [true, request_new_tokens]
190
192
  end
191
193
 
192
194
  # If stored token successfully loaded we build the header with them
193
195
  #
194
196
  def self.send_current_tokens(auth_token)
195
197
  {
196
- 'user_agent' => "#{DomoscioRails.user_agent}",
197
- 'AccessToken' => "#{auth_token[:access_token]}",
198
- 'RefreshToken' => "#{auth_token[:refresh_token]}",
198
+ 'user_agent' => DomoscioRails.user_agent.to_s,
199
+ 'AccessToken' => auth_token[:access_token].to_s,
200
+ 'RefreshToken' => auth_token[:refresh_token].to_s,
199
201
  'Content-Type' => 'application/json'
200
202
  }
201
203
  end
@@ -203,9 +205,9 @@ module DomoscioRails
203
205
  # If we cant find tokens of they are corrupted / expired, then we set headers to request new ones
204
206
  def self.request_new_tokens
205
207
  {
206
- 'user_agent' => "#{DomoscioRails.user_agent}",
208
+ 'user_agent' => DomoscioRails.user_agent.to_s,
207
209
  'Authorization' => "Token token=#{DomoscioRails.configuration.client_passphrase}",
208
210
  'Content-Type' => 'application/json'
209
211
  }
210
212
  end
211
- end
213
+ end
metadata CHANGED
@@ -1,29 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: domoscio_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.8
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benoit Praly
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-27 00:00:00.000000000 Z
11
+ date: 2022-02-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rails
14
+ name: multi_json
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '3.2'
19
+ version: 1.15.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '3.2'
26
+ version: 1.15.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: yaml
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.2.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.2.0
27
41
  description: Ruby client to interact with Domoscio API.
28
42
  email:
29
43
  - benoit.praly@domoscio.com
@@ -43,6 +57,7 @@ files:
43
57
  - lib/domoscio_rails/data/learning_session.rb
44
58
  - lib/domoscio_rails/data/recommendation.rb
45
59
  - lib/domoscio_rails/data/student.rb
60
+ - lib/domoscio_rails/data/student_group.rb
46
61
  - lib/domoscio_rails/errors.rb
47
62
  - lib/domoscio_rails/http_calls.rb
48
63
  - lib/domoscio_rails/json.rb
@@ -63,12 +78,13 @@ files:
63
78
  - lib/domoscio_rails/utils/gameplay_util.rb
64
79
  - lib/domoscio_rails/utils/recommendation_util.rb
65
80
  - lib/domoscio_rails/utils/review_util.rb
81
+ - lib/domoscio_rails/utils/stats_util.rb
66
82
  - lib/domoscio_rails/version.rb
67
83
  homepage: http://www.domoscio.com
68
84
  licenses:
69
85
  - MIT
70
86
  metadata: {}
71
- post_install_message:
87
+ post_install_message:
72
88
  rdoc_options: []
73
89
  require_paths:
74
90
  - lib
@@ -76,15 +92,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
76
92
  requirements:
77
93
  - - ">="
78
94
  - !ruby/object:Gem::Version
79
- version: '0'
95
+ version: 2.5.0
80
96
  required_rubygems_version: !ruby/object:Gem::Requirement
81
97
  requirements:
82
98
  - - ">="
83
99
  - !ruby/object:Gem::Version
84
100
  version: '0'
85
101
  requirements: []
86
- rubygems_version: 3.1.2
87
- signing_key:
102
+ rubygems_version: 3.2.22
103
+ signing_key:
88
104
  specification_version: 4
89
- summary: Summary of DomoscioRails.
105
+ summary: Summary of DomoscioRailspec.
90
106
  test_files: []