domoscio_viz 0.2.5a → 0.3.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.
- 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 -62
- metadata +25 -13
- 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: 1e8a8a848fe4002d6eeac3f2580a37be7be066696a70c241e5e1ad0f57bd2d3d
|
|
4
|
+
data.tar.gz: 35dcfbf99c45d85371a4c3a5902f04806faed87727cc7c3a60319dfc43f82d6e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6f1fe6e67f545784ccf5802c4d86e4952cc7f7e8d9a5094058ab2cfecd05f68bc5c67a08cdab6fb68e2353beec975405b04ba3ae20a782127a308e7b98aa5131
|
|
7
|
+
data.tar.gz: 7abba7516235a69835f540e970beec180216aad1bde9e71380c54f69cf3f190e60104147f06c570e7e87287c637376e5501358eb3c3d74d4ed11b8149cee6491
|
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.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.2'.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,50 +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
50
|
uri = api_uri(url)
|
|
55
|
-
|
|
56
51
|
response = DomoscioViz.send_request(uri, method, params, headers)
|
|
57
|
-
return response if response.
|
|
52
|
+
return response if response.is_a? DomoscioViz::ProcessingError
|
|
58
53
|
|
|
59
54
|
begin
|
|
60
55
|
raise_http_failure(uri, response, params)
|
|
61
56
|
data = DomoscioViz::JSON.load(response.body.nil? ? '' : response.body)
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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
|
|
67
67
|
end
|
|
68
|
-
|
|
69
68
|
data
|
|
70
69
|
end
|
|
71
70
|
|
|
72
|
-
private
|
|
73
|
-
|
|
74
71
|
# This function catches usual Http errors during calls
|
|
75
72
|
#
|
|
76
73
|
def self.send_request(uri, method, params, headers)
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
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)
|
|
84
80
|
end
|
|
85
81
|
|
|
86
82
|
# This helper will check the response status and build the correcponding DomoscioRails::ResponseError
|
|
87
83
|
#
|
|
88
84
|
def self.raise_http_failure(uri, response, params)
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
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
|
+
)
|
|
96
93
|
end
|
|
97
94
|
|
|
98
95
|
# Actual HTTP call is performed here
|
|
@@ -107,26 +104,29 @@ module DomoscioViz
|
|
|
107
104
|
|
|
108
105
|
# This method is called when AdaptiveEngine returns tokens errors
|
|
109
106
|
# Action on those errors is to retry and request new tokens, those new token are then stored
|
|
110
|
-
def self.retry_call_and_store_tokens(uri, method, params
|
|
107
|
+
def self.retry_call_and_store_tokens(uri, method, params)
|
|
111
108
|
headers = request_new_tokens
|
|
112
109
|
response = perform_call(uri, method, params, headers)
|
|
113
|
-
DomoscioViz::AuthorizationToken::Manager.storage.store({
|
|
110
|
+
DomoscioViz::AuthorizationToken::Manager.storage.store({
|
|
111
|
+
access_token: response['Accesstoken'],
|
|
112
|
+
refresh_token: response['Refreshtoken']
|
|
113
|
+
})
|
|
114
114
|
response
|
|
115
115
|
end
|
|
116
116
|
|
|
117
117
|
def self.user_agent
|
|
118
|
-
@uname ||=
|
|
118
|
+
@uname ||= uname
|
|
119
119
|
{
|
|
120
120
|
bindings_version: DomoscioViz::VERSION,
|
|
121
121
|
lang: 'ruby',
|
|
122
122
|
lang_version: "#{RUBY_VERSION} p#{RUBY_PATCHLEVEL} (#{RUBY_RELEASE_DATE})",
|
|
123
123
|
platform: RUBY_PLATFORM,
|
|
124
124
|
uname: @uname
|
|
125
|
-
}
|
|
125
|
+
}.to_s
|
|
126
126
|
end
|
|
127
127
|
|
|
128
|
-
def self.
|
|
129
|
-
`uname -a 2>/dev/null
|
|
128
|
+
def self.uname
|
|
129
|
+
`uname -a 2>/dev/null` if RUBY_PLATFORM =~ /linux|darwin/i
|
|
130
130
|
rescue Errno::ENOMEM
|
|
131
131
|
'uname lookup failed'
|
|
132
132
|
end
|
|
@@ -135,26 +135,24 @@ module DomoscioViz
|
|
|
135
135
|
# will return the processed headers and a token store flag
|
|
136
136
|
#
|
|
137
137
|
def self.request_headers
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
else
|
|
143
|
-
[true, request_new_tokens]
|
|
144
|
-
end
|
|
145
|
-
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
|
|
146
142
|
[true, request_new_tokens]
|
|
147
143
|
end
|
|
144
|
+
rescue SyntaxError, StandardError
|
|
145
|
+
[true, request_new_tokens]
|
|
148
146
|
end
|
|
149
147
|
|
|
150
148
|
# If stored token successfully loaded we build the header with them
|
|
151
149
|
#
|
|
152
150
|
def self.send_current_tokens(auth_token)
|
|
153
151
|
{
|
|
154
|
-
'user_agent' =>
|
|
155
|
-
'ClientId' =>
|
|
156
|
-
'AccessToken' =>
|
|
157
|
-
'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],
|
|
158
156
|
'Content-Type' => 'application/json'
|
|
159
157
|
}
|
|
160
158
|
end
|
|
@@ -162,17 +160,10 @@ module DomoscioViz
|
|
|
162
160
|
# If we cant find tokens of they are corrupted / expired, then we set headers to request new ones
|
|
163
161
|
def self.request_new_tokens
|
|
164
162
|
{
|
|
165
|
-
'user_agent' =>
|
|
166
|
-
'ClientId' =>
|
|
163
|
+
'user_agent' => DomoscioViz.user_agent,
|
|
164
|
+
'ClientId' => DomoscioViz.configuration.client_id,
|
|
167
165
|
'Authorization' => "Token token=#{DomoscioViz.configuration.client_passphrase}",
|
|
168
166
|
'Content-Type' => 'application/json'
|
|
169
167
|
}
|
|
170
168
|
end
|
|
171
|
-
|
|
172
|
-
DomoscioViz.configure do |c|
|
|
173
|
-
c.client_id = nil
|
|
174
|
-
c.client_passphrase = nil
|
|
175
|
-
c.temp_dir = File.expand_path('../tmp', __FILE__)
|
|
176
|
-
FileUtils.mkdir_p(c.temp_dir) unless File.directory?(c.temp_dir)
|
|
177
|
-
end
|
|
178
|
-
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.2
|
|
4
|
+
version: 0.3.2
|
|
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-08-22 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
|
-
version:
|
|
76
|
+
version: '0'
|
|
65
77
|
requirements: []
|
|
66
|
-
rubygems_version: 3.
|
|
78
|
+
rubygems_version: 3.2.22
|
|
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
|