virtuaservices 0.1.0
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 +7 -0
- data/lib/virtuaservices.rb +11 -0
- data/lib/virtuaservices/account.rb +72 -0
- data/lib/virtuaservices/authentication.rb +7 -0
- data/lib/virtuaservices/authentication/session.rb +28 -0
- data/lib/virtuaservices/concerns.rb +13 -0
- data/lib/virtuaservices/concerns/activable.rb +18 -0
- data/lib/virtuaservices/concerns/diagnosticable.rb +22 -0
- data/lib/virtuaservices/concerns/enumerable.rb +44 -0
- data/lib/virtuaservices/concerns/mime_typable.rb +36 -0
- data/lib/virtuaservices/concerns/premiumable.rb +15 -0
- data/lib/virtuaservices/concerns/sluggable.rb +27 -0
- data/lib/virtuaservices/concerns/typable.rb +17 -0
- data/lib/virtuaservices/monitoring.rb +12 -0
- data/lib/virtuaservices/monitoring/action.rb +25 -0
- data/lib/virtuaservices/monitoring/gateway.rb +37 -0
- data/lib/virtuaservices/monitoring/instance.rb +36 -0
- data/lib/virtuaservices/monitoring/route.rb +36 -0
- data/lib/virtuaservices/monitoring/service.rb +37 -0
- data/lib/virtuaservices/monitoring/websocket.rb +25 -0
- data/lib/virtuaservices/oauth.rb +7 -0
- data/lib/virtuaservices/oauth/application.rb +33 -0
- data/lib/virtuaservices/permissions.rb +10 -0
- data/lib/virtuaservices/permissions/category.rb +15 -0
- data/lib/virtuaservices/permissions/group.rb +30 -0
- data/lib/virtuaservices/permissions/right.rb +19 -0
- data/lib/virtuaservices/specs.rb +89 -0
- data/lib/virtuaservices/utils.rb +10 -0
- data/lib/virtuaservices/utils/controllers.rb +8 -0
- data/lib/virtuaservices/utils/controllers/base.rb +193 -0
- data/lib/virtuaservices/utils/controllers/checked.rb +14 -0
- data/lib/virtuaservices/utils/errors.rb +12 -0
- data/lib/virtuaservices/utils/errors/bad_request.rb +14 -0
- data/lib/virtuaservices/utils/errors/forbidden.rb +14 -0
- data/lib/virtuaservices/utils/errors/http_error.rb +30 -0
- data/lib/virtuaservices/utils/errors/not_found.rb +14 -0
- data/lib/virtuaservices/utils/loaders.rb +7 -0
- data/lib/virtuaservices/utils/loaders/heroku.rb +20 -0
- data/lib/virtuaservices/utils/micro_service.rb +170 -0
- data/lib/virtuaservices/utils/seeder.rb +25 -0
- data/lib/virtuaservices/version.rb +3 -0
- 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,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
|
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: []
|