virtuaservices 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +7 -0
  2. data/lib/virtuaservices.rb +11 -0
  3. data/lib/virtuaservices/account.rb +72 -0
  4. data/lib/virtuaservices/authentication.rb +7 -0
  5. data/lib/virtuaservices/authentication/session.rb +28 -0
  6. data/lib/virtuaservices/concerns.rb +13 -0
  7. data/lib/virtuaservices/concerns/activable.rb +18 -0
  8. data/lib/virtuaservices/concerns/diagnosticable.rb +22 -0
  9. data/lib/virtuaservices/concerns/enumerable.rb +44 -0
  10. data/lib/virtuaservices/concerns/mime_typable.rb +36 -0
  11. data/lib/virtuaservices/concerns/premiumable.rb +15 -0
  12. data/lib/virtuaservices/concerns/sluggable.rb +27 -0
  13. data/lib/virtuaservices/concerns/typable.rb +17 -0
  14. data/lib/virtuaservices/monitoring.rb +12 -0
  15. data/lib/virtuaservices/monitoring/action.rb +25 -0
  16. data/lib/virtuaservices/monitoring/gateway.rb +37 -0
  17. data/lib/virtuaservices/monitoring/instance.rb +36 -0
  18. data/lib/virtuaservices/monitoring/route.rb +36 -0
  19. data/lib/virtuaservices/monitoring/service.rb +37 -0
  20. data/lib/virtuaservices/monitoring/websocket.rb +25 -0
  21. data/lib/virtuaservices/oauth.rb +7 -0
  22. data/lib/virtuaservices/oauth/application.rb +33 -0
  23. data/lib/virtuaservices/permissions.rb +10 -0
  24. data/lib/virtuaservices/permissions/category.rb +15 -0
  25. data/lib/virtuaservices/permissions/group.rb +30 -0
  26. data/lib/virtuaservices/permissions/right.rb +19 -0
  27. data/lib/virtuaservices/specs.rb +89 -0
  28. data/lib/virtuaservices/utils.rb +10 -0
  29. data/lib/virtuaservices/utils/controllers.rb +8 -0
  30. data/lib/virtuaservices/utils/controllers/base.rb +193 -0
  31. data/lib/virtuaservices/utils/controllers/checked.rb +14 -0
  32. data/lib/virtuaservices/utils/errors.rb +12 -0
  33. data/lib/virtuaservices/utils/errors/bad_request.rb +14 -0
  34. data/lib/virtuaservices/utils/errors/forbidden.rb +14 -0
  35. data/lib/virtuaservices/utils/errors/http_error.rb +30 -0
  36. data/lib/virtuaservices/utils/errors/not_found.rb +14 -0
  37. data/lib/virtuaservices/utils/loaders.rb +7 -0
  38. data/lib/virtuaservices/utils/loaders/heroku.rb +20 -0
  39. data/lib/virtuaservices/utils/micro_service.rb +170 -0
  40. data/lib/virtuaservices/utils/seeder.rb +25 -0
  41. data/lib/virtuaservices/version.rb +3 -0
  42. metadata +321 -0
@@ -0,0 +1,14 @@
1
+ module Arkaan
2
+ module Utils
3
+ module Controllers
4
+ # Base controller to handle the standard error when accessing the API.
5
+ # @author Vincent Courtois <courtois.vincenet@outlook.com>
6
+ class Checked < Arkaan::Utils::Controllers::Base
7
+
8
+ before do
9
+ before_checks
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,12 @@
1
+ module Arkaan
2
+ module Utils
3
+ # Module gathering all the exception classes used throughout the utils module, mainly linked to HTTP errors.
4
+ # @author Vincent Courtois <courtois.vincent@outlook.com>
5
+ module Errors
6
+ autoload :BadRequest, 'arkaan/utils/errors/bad_request'
7
+ autoload :Forbidden , 'arkaan/utils/errors/forbidden'
8
+ autoload :NotFound , 'arkaan/utils/errors/not_found'
9
+ autoload :HTTPError , 'arkaan/utils/errors/http_error'
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,14 @@
1
+ module Arkaan
2
+ module Utils
3
+ module Errors
4
+ # A bad request error is raised when the data given to a model makes this model invalid.
5
+ # @author Vincent Courtois <courtois.vincent@outlook.com>
6
+ class BadRequest < Arkaan::Utils::Errors::HTTPError
7
+
8
+ def initialize(action:, field:, error:)
9
+ super(action, field, error, 400)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module Arkaan
2
+ module Utils
3
+ module Errors
4
+ # A forbidden error occurs when a user tries to perform an action he's not allowed to.
5
+ # @author Vincent Courtois <courtois.vincent@outlook.com>
6
+ class Forbidden < Arkaan::Utils::Errors::HTTPError
7
+
8
+ def initialize (field:, action:, error:)
9
+ super(action, field, error, 403)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,30 @@
1
+ module Arkaan
2
+ module Utils
3
+ module Errors
4
+ # Standard class parent to all specialized http errors.
5
+ # @author Vincent Courtois <courtois.vincent@outlook.com>
6
+ class HTTPError < StandardError
7
+
8
+ # @!attribute [rw] field
9
+ # @return [String, Symbol] the name of the field in error in the model.
10
+ attr_accessor :field
11
+ # @!attribute [rw] action
12
+ # @return [String] the name of the action the user was trying to perform on the model (often crate or update).
13
+ attr_accessor :action
14
+ # @attribute [rw] error
15
+ # @return [String] the label of the error returned by the model.
16
+ attr_accessor :error
17
+ # @attribute [rw] status
18
+ # @return [Integer] the HTTP status code as a number (eg: 400, 422 or 500)
19
+ attr_accessor :status
20
+
21
+ def initialize (action, field, error, status)
22
+ @action = action
23
+ @field = field.to_s
24
+ @error = error
25
+ @status = status
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,14 @@
1
+ module Arkaan
2
+ module Utils
3
+ module Errors
4
+ # A not found error occurs when a user tries to reach a resource that does not exist.
5
+ # @author Vincent Courtois <courtois.vincent@outlook.com>
6
+ class NotFound < Arkaan::Utils::Errors::HTTPError
7
+
8
+ def initialize (field:, action:, error:)
9
+ super(action, field, error, 404)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,7 @@
1
+ module Arkaan
2
+ module Utils
3
+ module Loaders
4
+ autoload :Heroku, 'arkaaan/utils/loaders/heroku'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,20 @@
1
+ module Arkaan
2
+ module Utils
3
+ module Plugins
4
+ class Heroku
5
+ # Loads the heroku informations inside the data of the instance.
6
+ # @param instance [Arkaan::Monitoring::Instance] the instance to put the enrichment inside.
7
+ def self.load!(instance)
8
+ if !ENV['OAUTH_TOKEN'].nil? && instance != false && instance.persisted?
9
+ heroku = PlatformAPI.connect_oauth(ENV['OAUTH_TOKEN'])
10
+ regex = /\Ahttps?:\/\/([a-z\-]+).herokuapp.com\/?\z/
11
+ if instance.url.match(regex)
12
+ app_name = instance.url.scan(regex).first.first
13
+ instance.update_attribute(:data, heroku.app.info(app_name))
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,170 @@
1
+ module Arkaan
2
+ module Utils
3
+ # This class is a singleton to load and save parameters for the whole application.
4
+ # @author Vincent Courtois <courtois.vincent@outlook.com>
5
+ class MicroService
6
+ include Singleton
7
+
8
+ # @!attribute [r] name
9
+ # @return [String] the name of the service you want to load.
10
+ attr_reader :service
11
+ # @!attribute [r] location
12
+ # @return [String] the path to the file loading the whole application, used to deduce the loading paths.
13
+ attr_reader :location
14
+ # @!attribute [r] name
15
+ # @return [String] the name of the service, used later to instantiate it when the mongoid configuration is fully loaded.
16
+ attr_reader :name
17
+ # @!attribute [r] instance
18
+ # @return [Arkaan::Monitoring::Instance] the instance of the service currently deployed.
19
+ attr_reader :instance
20
+ # @!attribute [r] type
21
+ # @return [Symbol] the type of instance the application is declaring
22
+ attr_reader :type
23
+
24
+ def initialize
25
+ @location = false
26
+ @service = false
27
+ @instance = false
28
+ @name = false
29
+ @type = ENV['INSTANCE_TYPE'] || :heroku
30
+ @controller_classes = []
31
+ end
32
+
33
+ def get_controllers
34
+ return [] if defined?(Controllers).nil?
35
+ classes = Controllers.constants.map { |symbol| get_const(symbol) }
36
+ return classes.select { |symbol| symbol.is_a? Class }
37
+ end
38
+
39
+ def get_const(symbol)
40
+ return Object.const_get("Controllers::#{symbol.to_s}")
41
+ end
42
+
43
+ # Determines if the application can be loaded (all the parameters have been correctly set)
44
+ # @return [Boolean] TRUE if the application can be safely loaded, FALSE otherwise.
45
+ def loadable?
46
+ return !!(service && location)
47
+ end
48
+
49
+ # Getter for the path on which the service is mapped.
50
+ # @return [String, Boolean] the absolute path in the URL on which the service is mapped upon, or FALSE if it's not set already.
51
+ def path
52
+ return service ? service.path : false
53
+ end
54
+
55
+ # Look for the service and sets it if it's found in the database, or set it to nil if not found.
56
+ # @param [String] service_name - the name of the service to look for in the database.
57
+ # @return [Arkaan::utils::MicroService] the instance of the micro-service to chain other calls.
58
+ def register_as(service_name)
59
+ @name = service_name
60
+ return self
61
+ end
62
+
63
+ # Sets the location of the file calling the micro service and initializing it so that it's used as root.
64
+ # @param filename [String] the full naame of the file with the extension.
65
+ # @return [Arkaan::utils::MicroService] the instance of the micro-service to chain other calls.
66
+ def from_location(filename)
67
+ @location = File.dirname(filename)
68
+ return self
69
+ end
70
+
71
+ # Loads the application in standard (production/development) mode, without the test files.
72
+ # @return [Arkaan::utils::MicroService] the instance of the micro-service to chain other calls.
73
+ def in_standard_mode
74
+ return load_application(test_mode: false)
75
+ end
76
+
77
+ # Loads the application in test mode, by adding the needed files to run the test suite to the standard loading process.
78
+ # @return [Arkaan::utils::MicroService] the instance of the micro-service to chain other calls.
79
+ def in_test_mode
80
+ @location = File.join(location, '..')
81
+ return load_application(test_mode: true)
82
+ end
83
+
84
+ # Loads the application as a websockets service. Only the websockets application should use that.
85
+ # @return [Arkaan::utils::MicroService] the instance of the micro-service to chain other calls.
86
+ def in_websocket_mode
87
+ load_mongoid_configuration
88
+ load_standard_files
89
+
90
+ Arkaan::Monitoring::Websocket.find_or_create_by(url: ENV['WEBSOCKET_URL']).save
91
+ return self
92
+ end
93
+
94
+ # Deactivates the current instance and the associated service if no more instances are available.
95
+ def deactivate!
96
+ instance.update_attribute(:running, false)
97
+ service.update_attribute(:test_mode, false) if ENV['TEST_MODE']
98
+ end
99
+
100
+ private
101
+
102
+ # Registers the service in the database if it has not been created already.
103
+ def register_service
104
+ @service = Arkaan::Monitoring::Service.create(key: @name, path: "/#{@name}")
105
+ end
106
+
107
+ # Register the instance of the currently deployed service in the database.
108
+ # @return [Arkaan::Monitoring::Instance] the instance of the micro service currently running.
109
+ def register_instance
110
+ @instance = @service.instances.where(url: ENV['SERVICE_URL']).first
111
+ if @instance.nil?
112
+ @instance = Arkaan::Monitoring::Instance.create(service: @service, url: ENV['SERVICE_URL'], type: type)
113
+ end
114
+ @instance.update_attribute(:running, true)
115
+ return @instance
116
+ end
117
+
118
+ # Loads the configuration for Mongoid, the files of the application, and registers the service and the instance in the database.
119
+ # @param test_mode [Boolean] TRUE to run in test mode (from /spec), FALSE otherwise.
120
+ # @return [Arkaan::Utils::MicroService] the current instance of the micro service to chain other calls.
121
+ def load_application(test_mode: false)
122
+ Dotenv.load
123
+ load_mongoid_configuration(test_mode: test_mode)
124
+ if !!(@name && location)
125
+ @service = Arkaan::Monitoring::Service.where(key: @name).first
126
+ register_service if @service.nil?
127
+ if ENV['TEST_MODE']
128
+ @service.update_attribute(:test_mode, true)
129
+ end
130
+ register_instance
131
+ load_plugin!
132
+ if service
133
+ load_standard_files
134
+ load_test_files if test_mode
135
+ end
136
+ end
137
+ return self
138
+ end
139
+
140
+ def load_plugin!
141
+ plugin = ENV['ADDITIONAL_PLUGIN']
142
+ if !plugin.nil? && Arkaan::Utils::Plugins.constants.include?(plugin)
143
+ Arkaan::Utils::Plugins.const_get(plugin).load!(@instance)
144
+ end
145
+ end
146
+
147
+ def load_mongoid_configuration(test_mode: false)
148
+ environment = test_mode ? 'test' : (ENV['RACK_ENV'] || 'development')
149
+ Mongoid.load!('config/mongoid.yml', environment)
150
+ end
151
+
152
+ def load_standard_files
153
+ require_folder('decorators')
154
+ require_folder('services')
155
+ require_folder('controllers')
156
+ end
157
+
158
+ def load_test_files
159
+ require_folder('spec', 'support')
160
+ require_folder('spec', 'shared')
161
+ end
162
+
163
+ def require_folder(*folders)
164
+ Dir[File.join(location, folders, '**', '*.rb')].each do |filename|
165
+ require filename
166
+ end
167
+ end
168
+ end
169
+ end
170
+ end
@@ -0,0 +1,25 @@
1
+ module Arkaan
2
+ module Utils
3
+ # This class loads the necessary data in the database if they don't exist yet.
4
+ # @author Vincent Courtois <courtois.vincent@outlook.com>
5
+ class Seeder
6
+ include Singleton
7
+
8
+ # Creates the service if it does not exist, and the instance if it does not exist.
9
+ # @return [Arkaan::Monitoring::Service] the created, or found, service corresponding to this micro-service.
10
+ def create_service(key)
11
+ service = Arkaan::Monitoring::Service.where(key: key).first
12
+
13
+ if service.nil?
14
+ service = Arkaan::Monitoring::Service.create!(key: key, path: "/#{key}", premium: true, active: true)
15
+ end
16
+
17
+ if service.instances.where(url: ENV['SERVICE_URL']).first.nil?
18
+ Arkaan::Monitoring::Instance.create!(url: ENV['SERVICE_URL'], running: true, service: service, active: true)
19
+ end
20
+
21
+ return service
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,3 @@
1
+ module Virtuaservices
2
+ VERSION = '0.1.0'
3
+ end
metadata ADDED
@@ -0,0 +1,321 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: virtuaservices
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Vincent Courtois
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-07-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 3.6.0
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 3.6.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec-json_expectations
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 2.1.0
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 2.1.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: rack-test
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '='
46
+ - !ruby/object:Gem::Version
47
+ version: 0.7.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '='
53
+ - !ruby/object:Gem::Version
54
+ version: 0.7.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: factory_bot
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 5.0.2
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '='
67
+ - !ruby/object:Gem::Version
68
+ version: 5.0.2
69
+ - !ruby/object:Gem::Dependency
70
+ name: database_cleaner
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '='
74
+ - !ruby/object:Gem::Version
75
+ version: 1.6.1
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '='
81
+ - !ruby/object:Gem::Version
82
+ version: 1.6.1
83
+ - !ruby/object:Gem::Dependency
84
+ name: simplecov
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '='
88
+ - !ruby/object:Gem::Version
89
+ version: 0.15.1
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '='
95
+ - !ruby/object:Gem::Version
96
+ version: 0.15.1
97
+ - !ruby/object:Gem::Dependency
98
+ name: yard
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '='
102
+ - !ruby/object:Gem::Version
103
+ version: 0.9.20
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '='
109
+ - !ruby/object:Gem::Version
110
+ version: 0.9.20
111
+ - !ruby/object:Gem::Dependency
112
+ name: pry
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '='
116
+ - !ruby/object:Gem::Version
117
+ version: 0.11.1
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '='
123
+ - !ruby/object:Gem::Version
124
+ version: 0.11.1
125
+ - !ruby/object:Gem::Dependency
126
+ name: mongoid
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '='
130
+ - !ruby/object:Gem::Version
131
+ version: 7.0.1
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '='
137
+ - !ruby/object:Gem::Version
138
+ version: 7.0.1
139
+ - !ruby/object:Gem::Dependency
140
+ name: activemodel
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '='
144
+ - !ruby/object:Gem::Version
145
+ version: 5.1.4
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '='
151
+ - !ruby/object:Gem::Version
152
+ version: 5.1.4
153
+ - !ruby/object:Gem::Dependency
154
+ name: activesupport
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '='
158
+ - !ruby/object:Gem::Version
159
+ version: 5.1.4
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '='
165
+ - !ruby/object:Gem::Version
166
+ version: 5.1.4
167
+ - !ruby/object:Gem::Dependency
168
+ name: bcrypt
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - '='
172
+ - !ruby/object:Gem::Version
173
+ version: 3.1.11
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - '='
179
+ - !ruby/object:Gem::Version
180
+ version: 3.1.11
181
+ - !ruby/object:Gem::Dependency
182
+ name: sinatra
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - '='
186
+ - !ruby/object:Gem::Version
187
+ version: 2.0.2
188
+ type: :runtime
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - '='
193
+ - !ruby/object:Gem::Version
194
+ version: 2.0.2
195
+ - !ruby/object:Gem::Dependency
196
+ name: sinatra-contrib
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - '='
200
+ - !ruby/object:Gem::Version
201
+ version: 2.0.2
202
+ type: :runtime
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - '='
207
+ - !ruby/object:Gem::Version
208
+ version: 2.0.2
209
+ - !ruby/object:Gem::Dependency
210
+ name: platform-api
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - '='
214
+ - !ruby/object:Gem::Version
215
+ version: 2.1.0
216
+ type: :runtime
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - '='
221
+ - !ruby/object:Gem::Version
222
+ version: 2.1.0
223
+ - !ruby/object:Gem::Dependency
224
+ name: faraday
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - '='
228
+ - !ruby/object:Gem::Version
229
+ version: 0.15.2
230
+ type: :runtime
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - '='
235
+ - !ruby/object:Gem::Version
236
+ version: 0.15.2
237
+ - !ruby/object:Gem::Dependency
238
+ name: dotenv
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - '='
242
+ - !ruby/object:Gem::Version
243
+ version: 2.7.2
244
+ type: :runtime
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - '='
249
+ - !ruby/object:Gem::Version
250
+ version: 2.7.2
251
+ description: This application is the generic base to handle elements like servers,
252
+ users, and sessions.
253
+ email: courtois.vincent@outlook.com
254
+ executables: []
255
+ extensions: []
256
+ extra_rdoc_files: []
257
+ files:
258
+ - lib/virtuaservices.rb
259
+ - lib/virtuaservices/account.rb
260
+ - lib/virtuaservices/authentication.rb
261
+ - lib/virtuaservices/authentication/session.rb
262
+ - lib/virtuaservices/concerns.rb
263
+ - lib/virtuaservices/concerns/activable.rb
264
+ - lib/virtuaservices/concerns/diagnosticable.rb
265
+ - lib/virtuaservices/concerns/enumerable.rb
266
+ - lib/virtuaservices/concerns/mime_typable.rb
267
+ - lib/virtuaservices/concerns/premiumable.rb
268
+ - lib/virtuaservices/concerns/sluggable.rb
269
+ - lib/virtuaservices/concerns/typable.rb
270
+ - lib/virtuaservices/monitoring.rb
271
+ - lib/virtuaservices/monitoring/action.rb
272
+ - lib/virtuaservices/monitoring/gateway.rb
273
+ - lib/virtuaservices/monitoring/instance.rb
274
+ - lib/virtuaservices/monitoring/route.rb
275
+ - lib/virtuaservices/monitoring/service.rb
276
+ - lib/virtuaservices/monitoring/websocket.rb
277
+ - lib/virtuaservices/oauth.rb
278
+ - lib/virtuaservices/oauth/application.rb
279
+ - lib/virtuaservices/permissions.rb
280
+ - lib/virtuaservices/permissions/category.rb
281
+ - lib/virtuaservices/permissions/group.rb
282
+ - lib/virtuaservices/permissions/right.rb
283
+ - lib/virtuaservices/specs.rb
284
+ - lib/virtuaservices/utils.rb
285
+ - lib/virtuaservices/utils/controllers.rb
286
+ - lib/virtuaservices/utils/controllers/base.rb
287
+ - lib/virtuaservices/utils/controllers/checked.rb
288
+ - lib/virtuaservices/utils/errors.rb
289
+ - lib/virtuaservices/utils/errors/bad_request.rb
290
+ - lib/virtuaservices/utils/errors/forbidden.rb
291
+ - lib/virtuaservices/utils/errors/http_error.rb
292
+ - lib/virtuaservices/utils/errors/not_found.rb
293
+ - lib/virtuaservices/utils/loaders.rb
294
+ - lib/virtuaservices/utils/loaders/heroku.rb
295
+ - lib/virtuaservices/utils/micro_service.rb
296
+ - lib/virtuaservices/utils/seeder.rb
297
+ - lib/virtuaservices/version.rb
298
+ homepage: https://rubygems.org/gems/virtuaservices
299
+ licenses:
300
+ - MIT
301
+ metadata: {}
302
+ post_install_message:
303
+ rdoc_options: []
304
+ require_paths:
305
+ - lib
306
+ required_ruby_version: !ruby/object:Gem::Requirement
307
+ requirements:
308
+ - - ">="
309
+ - !ruby/object:Gem::Version
310
+ version: '0'
311
+ required_rubygems_version: !ruby/object:Gem::Requirement
312
+ requirements:
313
+ - - ">="
314
+ - !ruby/object:Gem::Version
315
+ version: '0'
316
+ requirements: []
317
+ rubygems_version: 3.0.3
318
+ signing_key:
319
+ specification_version: 4
320
+ summary: A generic SaaS platform
321
+ test_files: []