domoscio_viz 0.2.5 → 0.3.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.
- checksums.yaml +4 -4
- data/Rakefile +0 -4
- data/lib/domoscio_viz/authorization_token.rb +24 -26
- data/lib/domoscio_viz/chart/chart.rb +2 -2
- data/lib/domoscio_viz/errors.rb +24 -9
- data/lib/domoscio_viz/http_calls.rb +3 -2
- data/lib/domoscio_viz/json.rb +1 -1
- data/lib/domoscio_viz/resource.rb +4 -16
- data/lib/domoscio_viz/version.rb +2 -2
- data/lib/domoscio_viz.rb +53 -64
- metadata +23 -11
- data/lib/domoscio_viz/generators/install_generator.rb +0 -10
- data/lib/domoscio_viz/generators/templates/install.rb +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a27998a16cab08757bb639a589e3b6fac992c8edc215ddd1bef66244be05c983
|
4
|
+
data.tar.gz: 5574e4cde4e47c488626f6598fe1b2299221bb753416b8c388f8ff3cf190581d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5f72c732c781f5cc4ab2fd5181547c7e65c07af79b12c98a2554885af42802d08abef81eb86329a4dd374f682d74929c6c6430e56e52515a57cb59931d9c8ce2
|
7
|
+
data.tar.gz: 5b3e486ef10f27616094adf973124afcb86c3b202c742500c73e635ce8040d11430708bdd3aee31e81ad6d182dcc3632019181778b861e75d9a9de3f4be40678
|
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,55 +1,53 @@
|
|
1
1
|
module DomoscioViz
|
2
2
|
module AuthorizationToken
|
3
|
+
# Token Manager
|
3
4
|
class Manager
|
4
|
-
|
5
5
|
class << self
|
6
6
|
def storage
|
7
|
-
|
8
|
-
end
|
9
|
-
|
10
|
-
def storage= (storage)
|
11
|
-
@@storage = storage
|
7
|
+
@storage ||= DomoscioViz.configuration.file_storage ? FileStorage.new : ManualSetting.new
|
12
8
|
end
|
13
9
|
|
14
|
-
def
|
10
|
+
def token
|
15
11
|
storage.get
|
16
12
|
end
|
17
13
|
end
|
18
14
|
end
|
19
15
|
|
20
|
-
|
16
|
+
# Manages tokens with configuration
|
17
|
+
class ManualSetting
|
21
18
|
def get
|
22
|
-
|
19
|
+
{
|
20
|
+
access_token: DomoscioViz.configuration.access_token,
|
21
|
+
refresh_token: DomoscioViz.configuration.refresh_token
|
22
|
+
}
|
23
23
|
end
|
24
24
|
|
25
25
|
def store(token)
|
26
|
-
|
26
|
+
DomoscioViz.configuration.access_token = token[:access_token]
|
27
|
+
DomoscioViz.configuration.refresh_token = token[:refresh_token]
|
27
28
|
end
|
28
29
|
end
|
29
30
|
|
31
|
+
# Manages tokens with local File
|
30
32
|
class FileStorage
|
31
33
|
require 'yaml'
|
32
|
-
@temp_dir
|
33
34
|
|
34
|
-
def initialize
|
35
|
-
|
36
|
-
raise "Path to temporary folder is not defined" unless @temp_dir
|
35
|
+
def initialize
|
36
|
+
raise 'Path to temporary folder is not defined' unless DomoscioViz.configuration.temp_dir
|
37
37
|
end
|
38
38
|
|
39
39
|
def get
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
nil
|
48
|
-
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
|
49
47
|
end
|
50
48
|
|
51
49
|
def store(token)
|
52
|
-
File.open(file_path, File::RDWR|File::CREAT,
|
50
|
+
File.open(file_path, File::RDWR|File::CREAT, 0o644) do |f|
|
53
51
|
f.flock(File::LOCK_EX)
|
54
52
|
f.truncate(0)
|
55
53
|
f.rewind
|
@@ -58,8 +56,8 @@ module DomoscioViz
|
|
58
56
|
end
|
59
57
|
|
60
58
|
def file_path
|
61
|
-
File.join(
|
59
|
+
File.join(DomoscioViz.configuration.temp_dir, 'DomoscioViz.AuthorizationToken.FileStore.tmp')
|
62
60
|
end
|
63
61
|
end
|
64
62
|
end
|
65
|
-
end
|
63
|
+
end
|
data/lib/domoscio_viz/errors.rb
CHANGED
@@ -1,26 +1,41 @@
|
|
1
1
|
module DomoscioViz
|
2
2
|
# Generic error superclass for MangoPay specific errors.
|
3
|
-
# Currently never instantiated directly.
|
4
|
-
# Currently only single subclass used.
|
5
3
|
class Error < StandardError
|
6
4
|
end
|
7
|
-
|
5
|
+
|
6
|
+
# Error Message from VizEngine
|
8
7
|
class ResponseError < Error
|
9
8
|
attr_reader :request_url, :code, :details, :body, :request_params
|
9
|
+
|
10
10
|
def initialize(request_url, code, details = {}, body = nil, request_params = {})
|
11
|
-
@request_url
|
11
|
+
@request_url = request_url
|
12
|
+
@code = code
|
13
|
+
@details = details
|
14
|
+
@body = body
|
15
|
+
@request_params = request_params
|
12
16
|
super(message) if message
|
13
17
|
end
|
14
|
-
|
18
|
+
|
19
|
+
def message
|
20
|
+
@details.is_a?(Hash) && @details[:error].is_a?(Hash) ? @details.dig(:error, :message) : @details
|
21
|
+
end
|
15
22
|
end
|
16
23
|
|
17
|
-
# ProcessingError from
|
24
|
+
# ProcessingError from DomoscioViz
|
18
25
|
class ProcessingError < Error
|
19
26
|
attr_reader :request_url, :code, :details, :body, :request_params
|
27
|
+
|
20
28
|
def initialize(request_url, code, details = {}, body = nil, request_params = {})
|
21
|
-
@request_url
|
29
|
+
@request_url = request_url
|
30
|
+
@code = code
|
31
|
+
@details = details
|
32
|
+
@body = body
|
33
|
+
@request_params = request_params
|
22
34
|
super(message) if message
|
23
35
|
end
|
24
|
-
|
36
|
+
|
37
|
+
def message
|
38
|
+
@details.message
|
39
|
+
end
|
25
40
|
end
|
26
|
-
end
|
41
|
+
end
|
data/lib/domoscio_viz/json.rb
CHANGED
@@ -2,23 +2,11 @@ module DomoscioViz
|
|
2
2
|
# @abstract
|
3
3
|
class Resource
|
4
4
|
class << self
|
5
|
-
def
|
6
|
-
|
7
|
-
end
|
5
|
+
def url(util_name = nil, on_self = nil)
|
6
|
+
raise NotImplementedError, 'Resource is an abstract class. Do not use it directly.' if self == Resource
|
8
7
|
|
9
|
-
|
10
|
-
if self == Resource
|
11
|
-
raise NotImplementedError.new('Resource is an abstract class. Do not use it directly.')
|
12
|
-
end
|
13
|
-
|
14
|
-
build_url = ""
|
15
|
-
if !on_self
|
16
|
-
if util_name
|
17
|
-
build_url << "/#{util_name}"
|
18
|
-
end
|
19
|
-
end
|
20
|
-
return build_url
|
8
|
+
util_name && !on_self ? "/#{util_name}" : ''
|
21
9
|
end
|
22
10
|
end
|
23
11
|
end
|
24
|
-
end
|
12
|
+
end
|
data/lib/domoscio_viz/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
module DomoscioViz
|
2
|
-
VERSION =
|
3
|
-
end
|
2
|
+
VERSION = '0.3.1'.freeze
|
3
|
+
end
|
data/lib/domoscio_viz.rb
CHANGED
@@ -1,26 +1,23 @@
|
|
1
|
-
|
2
1
|
require 'net/https'
|
3
2
|
require 'cgi/util'
|
4
3
|
require 'multi_json'
|
5
|
-
|
4
|
+
|
6
5
|
require 'domoscio_viz/version'
|
7
6
|
require 'domoscio_viz/json'
|
8
7
|
require 'domoscio_viz/errors'
|
9
8
|
require 'domoscio_viz/authorization_token'
|
10
|
-
# generators
|
11
|
-
require 'domoscio_viz/generators/install_generator'
|
12
|
-
# resources
|
13
9
|
require 'domoscio_viz/http_calls'
|
14
10
|
require 'domoscio_viz/resource'
|
15
11
|
require 'domoscio_viz/chart/chart'
|
16
12
|
|
17
13
|
module DomoscioViz
|
18
|
-
|
19
14
|
class Configuration
|
20
|
-
attr_accessor :
|
15
|
+
attr_accessor :client_id, :client_passphrase, :temp_dir,
|
16
|
+
:root_url, :file_storage, :access_token, :refresh_token
|
21
17
|
|
22
|
-
def
|
23
|
-
@root_url
|
18
|
+
def initialize
|
19
|
+
@root_url = ''
|
20
|
+
@file_storage ||= true
|
24
21
|
end
|
25
22
|
end
|
26
23
|
|
@@ -49,52 +46,50 @@ module DomoscioViz
|
|
49
46
|
# Raises DomoscioViz::ProcessingError on Internal Error
|
50
47
|
#
|
51
48
|
def self.request(method, url, params={})
|
52
|
-
|
53
49
|
store_tokens, headers = request_headers
|
54
|
-
params.merge!({'per_page': 2000}) unless params[:per_page]
|
55
50
|
uri = api_uri(url)
|
56
|
-
|
57
51
|
response = DomoscioViz.send_request(uri, method, params, headers)
|
58
|
-
return response if response.
|
52
|
+
return response if response.is_a? DomoscioViz::ProcessingError
|
59
53
|
|
60
54
|
begin
|
61
55
|
raise_http_failure(uri, response, params)
|
62
56
|
data = DomoscioViz::JSON.load(response.body.nil? ? '' : response.body)
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
57
|
+
if store_tokens
|
58
|
+
DomoscioViz::AuthorizationToken::Manager.storage.store({
|
59
|
+
access_token: response['Accesstoken'],
|
60
|
+
refresh_token: response['Refreshtoken']
|
61
|
+
})
|
62
|
+
end
|
63
|
+
rescue MultiJson::LoadError => e
|
64
|
+
data = ProcessingError.new(uri, 500, e, response.body, params)
|
65
|
+
rescue ResponseError => e
|
66
|
+
data = e
|
68
67
|
end
|
69
|
-
|
70
68
|
data
|
71
69
|
end
|
72
70
|
|
73
|
-
private
|
74
|
-
|
75
71
|
# This function catches usual Http errors during calls
|
76
72
|
#
|
77
73
|
def self.send_request(uri, method, params, headers)
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
end
|
74
|
+
response = perform_call(uri, method, params, headers)
|
75
|
+
response = retry_call_and_store_tokens(uri, method, params) if %w[401 403].include? response.code
|
76
|
+
response
|
77
|
+
rescue Timeout::Error, Errno::EINVAL, HTTP::ConnectionError, Errno::ECONNREFUSED,
|
78
|
+
Errno::ECONNRESET, EOFError, Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError => e
|
79
|
+
ProcessingError.new(uri, 500, e, response, params)
|
85
80
|
end
|
86
81
|
|
87
82
|
# This helper will check the response status and build the correcponding DomoscioRails::ResponseError
|
88
83
|
#
|
89
84
|
def self.raise_http_failure(uri, response, params)
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
85
|
+
return if response.is_a? Net::HTTPSuccess
|
86
|
+
|
87
|
+
raise ResponseError.new(
|
88
|
+
uri,
|
89
|
+
response.code.to_i,
|
90
|
+
DomoscioViz::JSON.load((response.body.nil? ? '' : response.body), symbolize_keys: true),
|
91
|
+
response.body, params
|
92
|
+
)
|
98
93
|
end
|
99
94
|
|
100
95
|
# Actual HTTP call is performed here
|
@@ -109,26 +104,29 @@ module DomoscioViz
|
|
109
104
|
|
110
105
|
# This method is called when AdaptiveEngine returns tokens errors
|
111
106
|
# Action on those errors is to retry and request new tokens, those new token are then stored
|
112
|
-
def self.retry_call_and_store_tokens(uri, method, params
|
107
|
+
def self.retry_call_and_store_tokens(uri, method, params)
|
113
108
|
headers = request_new_tokens
|
114
109
|
response = perform_call(uri, method, params, headers)
|
115
|
-
DomoscioViz::AuthorizationToken::Manager.storage.store({
|
110
|
+
DomoscioViz::AuthorizationToken::Manager.storage.store({
|
111
|
+
access_token: response['Accesstoken'],
|
112
|
+
refresh_token: response['Refreshtoken']
|
113
|
+
})
|
116
114
|
response
|
117
115
|
end
|
118
116
|
|
119
117
|
def self.user_agent
|
120
|
-
@uname ||=
|
118
|
+
@uname ||= uname
|
121
119
|
{
|
122
120
|
bindings_version: DomoscioViz::VERSION,
|
123
121
|
lang: 'ruby',
|
124
122
|
lang_version: "#{RUBY_VERSION} p#{RUBY_PATCHLEVEL} (#{RUBY_RELEASE_DATE})",
|
125
123
|
platform: RUBY_PLATFORM,
|
126
124
|
uname: @uname
|
127
|
-
}
|
125
|
+
}.to_s
|
128
126
|
end
|
129
127
|
|
130
|
-
def self.
|
131
|
-
`uname -a 2>/dev/null
|
128
|
+
def self.uname
|
129
|
+
`uname -a 2>/dev/null` if RUBY_PLATFORM =~ /linux|darwin/i
|
132
130
|
rescue Errno::ENOMEM
|
133
131
|
'uname lookup failed'
|
134
132
|
end
|
@@ -137,26 +135,24 @@ module DomoscioViz
|
|
137
135
|
# will return the processed headers and a token store flag
|
138
136
|
#
|
139
137
|
def self.request_headers
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
else
|
145
|
-
[true, request_new_tokens]
|
146
|
-
end
|
147
|
-
rescue SyntaxError, StandardError
|
138
|
+
auth_token = DomoscioViz::AuthorizationToken::Manager.get_token
|
139
|
+
if auth_token && auth_token[:access_token] && auth_token[:refresh_token]
|
140
|
+
[false, send_current_tokens(auth_token)]
|
141
|
+
else
|
148
142
|
[true, request_new_tokens]
|
149
143
|
end
|
144
|
+
rescue SyntaxError, StandardError
|
145
|
+
[true, request_new_tokens]
|
150
146
|
end
|
151
147
|
|
152
148
|
# If stored token successfully loaded we build the header with them
|
153
149
|
#
|
154
150
|
def self.send_current_tokens(auth_token)
|
155
151
|
{
|
156
|
-
'user_agent' =>
|
157
|
-
'ClientId' =>
|
158
|
-
'AccessToken' =>
|
159
|
-
'RefreshToken' =>
|
152
|
+
'user_agent' => DomoscioViz.user_agent,
|
153
|
+
'ClientId' => DomoscioViz.configuration.client_id,
|
154
|
+
'AccessToken' => auth_token[:access_token],
|
155
|
+
'RefreshToken' => auth_token[:refresh_token],
|
160
156
|
'Content-Type' => 'application/json'
|
161
157
|
}
|
162
158
|
end
|
@@ -164,17 +160,10 @@ module DomoscioViz
|
|
164
160
|
# If we cant find tokens of they are corrupted / expired, then we set headers to request new ones
|
165
161
|
def self.request_new_tokens
|
166
162
|
{
|
167
|
-
'user_agent' =>
|
168
|
-
'ClientId' =>
|
163
|
+
'user_agent' => DomoscioViz.user_agent,
|
164
|
+
'ClientId' => DomoscioViz.configuration.client_id,
|
169
165
|
'Authorization' => "Token token=#{DomoscioViz.configuration.client_passphrase}",
|
170
166
|
'Content-Type' => 'application/json'
|
171
167
|
}
|
172
168
|
end
|
173
|
-
|
174
|
-
DomoscioViz.configure do |c|
|
175
|
-
c.client_id = nil
|
176
|
-
c.client_passphrase = nil
|
177
|
-
c.temp_dir = File.expand_path('../tmp', __FILE__)
|
178
|
-
FileUtils.mkdir_p(c.temp_dir) unless File.directory?(c.temp_dir)
|
179
|
-
end
|
180
|
-
end
|
169
|
+
end
|
metadata
CHANGED
@@ -1,29 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: domoscio_viz
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
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:
|
11
|
+
date: 2022-01-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: multi_json
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
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:
|
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 Viz Engine.
|
28
42
|
email:
|
29
43
|
- benoit.praly@domoscio.com
|
@@ -38,8 +52,6 @@ files:
|
|
38
52
|
- lib/domoscio_viz/authorization_token.rb
|
39
53
|
- lib/domoscio_viz/chart/chart.rb
|
40
54
|
- lib/domoscio_viz/errors.rb
|
41
|
-
- lib/domoscio_viz/generators/install_generator.rb
|
42
|
-
- lib/domoscio_viz/generators/templates/install.rb
|
43
55
|
- lib/domoscio_viz/http_calls.rb
|
44
56
|
- lib/domoscio_viz/json.rb
|
45
57
|
- lib/domoscio_viz/resource.rb
|
@@ -56,14 +68,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
56
68
|
requirements:
|
57
69
|
- - ">="
|
58
70
|
- !ruby/object:Gem::Version
|
59
|
-
version:
|
71
|
+
version: 2.5.0
|
60
72
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
61
73
|
requirements:
|
62
74
|
- - ">="
|
63
75
|
- !ruby/object:Gem::Version
|
64
76
|
version: '0'
|
65
77
|
requirements: []
|
66
|
-
rubygems_version: 3.
|
78
|
+
rubygems_version: 3.1.2
|
67
79
|
signing_key:
|
68
80
|
specification_version: 4
|
69
81
|
summary: Summary of DomoscioViz.
|
@@ -1,10 +0,0 @@
|
|
1
|
-
require 'rails/generators'
|
2
|
-
module DomoscioViz
|
3
|
-
class InstallGenerator < ::Rails::Generators::Base
|
4
|
-
source_root File.expand_path('../templates', __FILE__)
|
5
|
-
desc "Generate config file for DomoscioViz configuration"
|
6
|
-
def install
|
7
|
-
copy_file "install.rb", "config/initializers/domoscio_viz.rb"
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|