domoscio_rails 0.3.8a → 0.4.1

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 (33) 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 +1 -3
  8. data/lib/domoscio_rails/data/recommendation.rb +1 -3
  9. data/lib/domoscio_rails/data/student.rb +1 -3
  10. data/lib/domoscio_rails/errors.rb +21 -5
  11. data/lib/domoscio_rails/http_calls.rb +3 -0
  12. data/lib/domoscio_rails/json.rb +1 -1
  13. data/lib/domoscio_rails/knowledge/knowledge_edge.rb +1 -3
  14. data/lib/domoscio_rails/knowledge/knowledge_graph.rb +1 -3
  15. data/lib/domoscio_rails/knowledge/knowledge_node.rb +1 -3
  16. data/lib/domoscio_rails/knowledge/knowledge_node_content.rb +1 -3
  17. data/lib/domoscio_rails/knowledge/knowledge_node_student.rb +1 -3
  18. data/lib/domoscio_rails/objective/objective.rb +1 -3
  19. data/lib/domoscio_rails/objective/objective_knowledge_node.rb +1 -3
  20. data/lib/domoscio_rails/objective/objective_knowledge_node_student.rb +1 -3
  21. data/lib/domoscio_rails/objective/objective_student.rb +0 -2
  22. data/lib/domoscio_rails/resource.rb +18 -14
  23. data/lib/domoscio_rails/tag/tag.rb +1 -3
  24. data/lib/domoscio_rails/tag/tag_edge.rb +1 -3
  25. data/lib/domoscio_rails/tag/tag_set.rb +1 -3
  26. data/lib/domoscio_rails/tag/tagging.rb +1 -3
  27. data/lib/domoscio_rails/utils/gameplay_util.rb +1 -3
  28. data/lib/domoscio_rails/utils/recommendation_util.rb +1 -3
  29. data/lib/domoscio_rails/utils/review_util.rb +1 -3
  30. data/lib/domoscio_rails/utils/stats_util.rb +5 -0
  31. data/lib/domoscio_rails/version.rb +2 -2
  32. data/lib/domoscio_rails.rb +87 -85
  33. metadata +26 -11
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e594a08ade8e083ea0ab3e612e7134b857a9cc946a05ca3389ee5cc0a5d74b7d
4
- data.tar.gz: 9ca19fbfbf9156600306929503d423e768b597c6101b683350978d1e8213f23f
3
+ metadata.gz: '08866a1127ae568832a117fb457edb8e4226e7bb44a43ac44c6ea1fce170b93e'
4
+ data.tar.gz: c14755b4ae0c66e4689c92782c516350fed8f7c09531a1d96e760d1dad01f04d
5
5
  SHA512:
6
- metadata.gz: 8fc507af97c64fb9451cacd1e79f7a0a19f02f02af6093a2ca61546144ac8055aaa69e2b54832f1aa8fca609db095bf67d615cedd0b05fca50e9bc01d4f11a25
7
- data.tar.gz: cab7cb431f5776565767b22380755426a31d953f612bd8017f8676698924c682a1550b3fd166c258bcaa71bb26a32f38630bd4cd5c565d3f490b99f2ae72a478
6
+ metadata.gz: 7acb60e8e5b7a9e028e996ced65d694f32d72cebac1706d22a264a8b75e83afabb1992605f191f0d0ef167d6a95a24ec7e6d18e78705cd7386202d96a1aa7cb2
7
+ data.tar.gz: 3b19813c8511d09ee6e52ed3946580ba2975ecb32d7b94318319e4c4b434195883e2b6ca7de549b0a45164e723d8254993a357b7f718bb30e439aac24dc288e7
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,11 +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
7
6
  include DomoscioRails::HTTPCalls::Update
8
7
  include DomoscioRails::HTTPCalls::Util
9
-
10
8
  end
11
- 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
5
  include DomoscioRails::HTTPCalls::Destroy
7
6
  include DomoscioRails::HTTPCalls::Update
8
-
9
7
  end
10
- 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
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 KnowledgeGraph < 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 KnowledgeNode < 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 KnowledgeNodeContent < 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 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
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 ObjectiveKnowledgeNode < 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 ObjectiveKnowledgeNodeStudent < 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,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
5
  include DomoscioRails::HTTPCalls::Destroy
7
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
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 TagEdge < 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 TagSet < 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 Tagging < 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,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.8a"
3
- end
2
+ VERSION = '0.4.1'.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,40 @@ 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/knowledge/knowledge_edge'
19
+ require 'domoscio_rails/knowledge/knowledge_graph'
20
+ require 'domoscio_rails/knowledge/knowledge_node_content'
21
+ require 'domoscio_rails/knowledge/knowledge_node_student'
22
+ require 'domoscio_rails/knowledge/knowledge_node'
23
+ require 'domoscio_rails/objective/objective_knowledge_node_student'
24
+ require 'domoscio_rails/objective/objective_knowledge_node'
25
+ require 'domoscio_rails/objective/objective_student'
26
+ require 'domoscio_rails/objective/objective'
27
+ require 'domoscio_rails/tag/tag_edge'
28
+ require 'domoscio_rails/tag/tag_set'
29
+ require 'domoscio_rails/tag/tag'
30
+ require 'domoscio_rails/tag/tagging'
31
+ require 'domoscio_rails/utils/gameplay_util'
32
+ require 'domoscio_rails/utils/recommendation_util'
33
+ require 'domoscio_rails/utils/review_util'
34
+ require 'domoscio_rails/utils/stats_util'
35
35
 
36
36
  module DomoscioRails
37
+ # Configurable attributes and default values
37
38
  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
39
+ attr_accessor :client_id, :client_passphrase, :temp_dir, :version,
40
+ :root_url, :file_storage, :access_token, :refresh_token
44
41
 
45
- def root_url
46
- @root_url ||= ""
42
+ def initialize
43
+ @version = 2
44
+ @root_url = ''
45
+ @file_storage ||= true
47
46
  end
48
47
  end
49
48
 
@@ -56,7 +55,7 @@ module DomoscioRails
56
55
  yield configuration
57
56
  end
58
57
 
59
- def self.api_uri(url='')
58
+ def self.api_uri(url = '')
60
59
  URI(configuration.root_url + url)
61
60
  end
62
61
 
@@ -72,75 +71,77 @@ module DomoscioRails
72
71
  # Raises DomoscioRails::ProcessingError on Internal Error
73
72
  #
74
73
  def self.request(method, url, params={})
75
-
76
74
  store_tokens, headers = request_headers
77
- params.merge!({'per_page': 2000}) unless params[:per_page]
75
+ params.merge!({ 'per_page': 1000 }) unless params[:per_page]
78
76
  uri = api_uri(url)
79
-
80
77
  response = DomoscioRails.send_request(uri, method, params, headers)
81
- return response if response.kind_of? DomoscioRails::ProcessingError
78
+ return response if response.is_a? DomoscioRails::ProcessingError
82
79
 
83
80
  begin
84
81
  raise_http_failure(uri, response, params)
85
82
  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
83
+ if store_tokens
84
+ DomoscioRails::AuthorizationToken::Manager.storage.store({
85
+ access_token: response['Accesstoken'],
86
+ refresh_token: response['Refreshtoken']
87
+ })
88
+ end
89
+ rescue MultiJson::LoadError => e
90
+ data = ProcessingError.new(uri, 500, e, response.body, params)
91
+ rescue ResponseError => e
92
+ data = e
91
93
  end
92
94
 
93
95
  if response['Total']
94
96
  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
97
+ (2..pagetotal).each do |j|
98
+ response = DomoscioRails.send_request(uri, method, params.merge({ page: j }), headers)
99
+ return response if response.is_a? DomoscioRails::ProcessingError
100
+
98
101
  begin
99
102
  raise_http_failure(uri, response, params)
100
103
  body = DomoscioRails::JSON.load(response.body.nil? ? '' : response.body)
101
104
  data += body
102
105
  data.flatten!
103
- rescue MultiJson::LoadError => exception
104
- return ProcessingError.new(uri, 500, exception, response.body, params)
105
- rescue ResponseError => exception
106
- return exception
106
+ rescue MultiJson::LoadError => e
107
+ return ProcessingError.new(uri, 500, e, response.body, params)
108
+ rescue ResponseError => e
109
+ return e
107
110
  end
108
111
  end
109
112
  end
110
113
  data
111
114
  end
112
115
 
113
- private
114
-
115
- # This function catches usual Http errors during calls
116
+ # This function catches usual Http errors during callsheaders
116
117
  #
117
118
  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
119
+ response = perform_call(uri, method, params, headers)
120
+ response = retry_call_and_store_tokens(uri, method, params) if %w[401 403].include? response.code
121
+ response
122
+ rescue Timeout::Error, Errno::EINVAL, Errno::ECONNREFUSED, Errno::ECONNRESET,
123
+ EOFError, Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError => e
124
+ ProcessingError.new(uri, 500, e, response)
125
125
  end
126
126
 
127
127
  # This helper will check the response status and build the correcponding DomoscioRails::ResponseError
128
128
  #
129
129
  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
- raise ResponseError.new(uri, response.code.to_i, DomoscioRails::JSON.load((response.body.nil? ? '' : response.body), :symbolize_keys => true), response.body, params)
135
- end
136
- end
130
+ return if response.is_a? Net::HTTPSuccess
131
+
132
+ raise ResponseError.new(
133
+ uri,
134
+ response.code.to_i,
135
+ DomoscioRails::JSON.load((response.body.nil? ? '' : response.body), symbolize_keys: true),
136
+ response.body, params
137
+ )
137
138
  end
138
139
 
139
140
  # Actual HTTP call is performed here
140
141
  #
141
142
  def self.perform_call(uri, method, params, headers)
142
143
  Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http|
143
- req = Net::HTTP::const_get(method.capitalize).new(uri.request_uri, headers)
144
+ req = Net::HTTP.const_get(method.capitalize).new(uri.request_uri, headers)
144
145
  req.body = DomoscioRails::JSON.dump(params)
145
146
  http.request req
146
147
  end
@@ -148,26 +149,29 @@ module DomoscioRails
148
149
 
149
150
  # This method is called when AdaptiveEngine returns tokens errors
150
151
  # Action on those errors is to retry and request new tokens, those new token are then stored
151
- def self.retry_call_and_store_tokens(uri, method, params, headers)
152
+ def self.retry_call_and_store_tokens(uri, method, params)
152
153
  headers = request_new_tokens
153
154
  response = perform_call(uri, method, params, headers)
154
- DomoscioRails::AuthorizationToken::Manager.storage.store({access_token: response['Accesstoken'], refresh_token: response['Refreshtoken']})
155
+ DomoscioRails::AuthorizationToken::Manager.storage.store({
156
+ access_token: response['Accesstoken'],
157
+ refresh_token: response['Refreshtoken']
158
+ })
155
159
  response
156
160
  end
157
161
 
158
162
  def self.user_agent
159
- @uname ||= get_uname
163
+ @uname ||= uname
160
164
  {
161
165
  bindings_version: DomoscioRails::VERSION,
162
166
  lang: 'ruby',
163
167
  lang_version: "#{RUBY_VERSION} p#{RUBY_PATCHLEVEL} (#{RUBY_RELEASE_DATE})",
164
168
  platform: RUBY_PLATFORM,
165
169
  uname: @uname
166
- }
170
+ }.to_s
167
171
  end
168
172
 
169
- def self.get_uname
170
- `uname -a 2>/dev/null`.strip if RUBY_PLATFORM =~ /linux|darwin/i
173
+ def self.uname
174
+ `uname -a 2>/dev/null` if RUBY_PLATFORM =~ /linux|darwin/i
171
175
  rescue Errno::ENOMEM
172
176
  'uname lookup failed'
173
177
  end
@@ -176,25 +180,23 @@ module DomoscioRails
176
180
  # will return the processed headers and a token store flag
177
181
  #
178
182
  def self.request_headers
179
- begin
180
- auth_token = DomoscioRails::AuthorizationToken::Manager.get_token
181
- if auth_token && auth_token[:access_token] && auth_token[:refresh_token]
182
- [false, send_current_tokens(auth_token)]
183
- else
184
- [true, request_new_tokens]
185
- end
186
- rescue SyntaxError, StandardError
183
+ auth_token = DomoscioRails::AuthorizationToken::Manager.token
184
+ if auth_token && auth_token[:access_token] && auth_token[:refresh_token]
185
+ [false, send_current_tokens(auth_token)]
186
+ else
187
187
  [true, request_new_tokens]
188
188
  end
189
+ rescue SyntaxError, StandardError
190
+ [true, request_new_tokens]
189
191
  end
190
192
 
191
193
  # If stored token successfully loaded we build the header with them
192
194
  #
193
195
  def self.send_current_tokens(auth_token)
194
196
  {
195
- 'user_agent' => "#{DomoscioRails.user_agent}",
196
- 'AccessToken' => "#{auth_token[:access_token]}",
197
- 'RefreshToken' => "#{auth_token[:refresh_token]}",
197
+ 'user_agent' => DomoscioRails.user_agent.to_s,
198
+ 'AccessToken' => auth_token[:access_token].to_s,
199
+ 'RefreshToken' => auth_token[:refresh_token].to_s,
198
200
  'Content-Type' => 'application/json'
199
201
  }
200
202
  end
@@ -202,9 +204,9 @@ module DomoscioRails
202
204
  # If we cant find tokens of they are corrupted / expired, then we set headers to request new ones
203
205
  def self.request_new_tokens
204
206
  {
205
- 'user_agent' => "#{DomoscioRails.user_agent}",
207
+ 'user_agent' => DomoscioRails.user_agent.to_s,
206
208
  'Authorization' => "Token token=#{DomoscioRails.configuration.client_passphrase}",
207
209
  'Content-Type' => 'application/json'
208
210
  }
209
211
  end
210
- end
212
+ 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.8a
4
+ version: 0.4.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: 2021-05-01 00:00:00.000000000 Z
11
+ date: 2022-01-26 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
@@ -63,6 +77,7 @@ files:
63
77
  - lib/domoscio_rails/utils/gameplay_util.rb
64
78
  - lib/domoscio_rails/utils/recommendation_util.rb
65
79
  - lib/domoscio_rails/utils/review_util.rb
80
+ - lib/domoscio_rails/utils/stats_util.rb
66
81
  - lib/domoscio_rails/version.rb
67
82
  homepage: http://www.domoscio.com
68
83
  licenses:
@@ -76,15 +91,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
76
91
  requirements:
77
92
  - - ">="
78
93
  - !ruby/object:Gem::Version
79
- version: '0'
94
+ version: 2.5.0
80
95
  required_rubygems_version: !ruby/object:Gem::Requirement
81
96
  requirements:
82
- - - ">"
97
+ - - ">="
83
98
  - !ruby/object:Gem::Version
84
- version: 1.3.1
99
+ version: '0'
85
100
  requirements: []
86
101
  rubygems_version: 3.1.2
87
102
  signing_key:
88
103
  specification_version: 4
89
- summary: Summary of DomoscioRails.
104
+ summary: Summary of DomoscioRailspec.
90
105
  test_files: []