virtuatable-core 1.2.0 → 1.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 66ce5b5678adffaaf85ae207353fb60805ebdde74d02c8aa87aedd70109184d6
4
- data.tar.gz: 70b78998d52d0a8e47938b200500f445287d9d3d0f5cf3749fd856f645140275
3
+ metadata.gz: 13712af3f0db1598191b3a51bb599c93f512da5e074ef504288dc498f45602a4
4
+ data.tar.gz: c886c91f0698d97ebcfe6c0538ed35023e2472b03db28d625745794ac4a18c05
5
5
  SHA512:
6
- metadata.gz: 3547e559af72ec612be70b6423c50c8bb0d2a5ad8ea7cec3e64eef1c47940faa2702a1c4a8f010463f4ac5bc696f91811348e31ace459f206dd875c01ef93677
7
- data.tar.gz: cc76eb73b5418e74d9215040d334991365d937675bd8af6015cc15b0a93526be4e0c410f03c358ae0f738675adaaaef226ef9af27abc68eed0348e1e476a3f20
6
+ metadata.gz: eec95c84abcc9093600b0d3d73279924e6d77095e246fad33a513868aaac08798dd2c4dc850406d47a93810deed2bc6750d0fd0f8349cbffaf72815223ab3280
7
+ data.tar.gz: c798211dda3d35be799be2ef21589a67e86dc1d646f6168e6f39d8ed4bc458b1a6418cecf04f15311e681cd41efd48d7fb5497f0e85baf11287196f2ba6a77c1
@@ -55,10 +55,8 @@ module Core
55
55
  api_forbidden exception.message
56
56
  end
57
57
 
58
- if ENV['RACK_ENV'] != 'test'
59
- error StandardError do |error|
60
- api_error 500, "unknown_field.#{error.class.name}"
61
- end
58
+ error StandardError do |error|
59
+ api_error 500, "unknown_field.#{error.class.name}"
62
60
  end
63
61
  end
64
62
  end
@@ -6,20 +6,20 @@ module Core
6
6
  # @author Vincent Courtois <courtois.vincent@outlook.com>
7
7
  module Applications
8
8
  # Looks for the application sending the API's request, and raises error if not found.
9
- # @param [Arkaan::OAuth::Application] the application requesting the service.
9
+ # @param [Core::Models::OAuth::Application] the application requesting the service.
10
10
  def application(premium: false)
11
11
  return @application unless @application.nil?
12
12
 
13
- check_presence 'app_key'
14
- @application = application_model.find_by(key: params['app_key'])
15
- api_not_found 'app_key.unknown' if @application.nil?
16
- api_forbidden 'app_key.forbidden' if premium && !@application.premium
13
+ check_presence 'client_id'
14
+ @application = application_model.find_by(client_id: params['client_id'])
15
+ api_not_found 'client_id.unknown' if @application.nil?
16
+ api_forbidden 'client_id.forbidden' if premium && !@application.premium
17
17
 
18
18
  @application
19
19
  end
20
20
 
21
21
  def application_model
22
- Arkaan::OAuth::Application
22
+ Core::Models::OAuth::Application
23
23
  end
24
24
  end
25
25
  end
@@ -7,7 +7,7 @@ module Core
7
7
  # @author Vincent Courtois <courtois.vincent@outlook.com>
8
8
  module Declarators
9
9
  # @!attribute [r] routes
10
- # @return [Array<Arkaan::Monitoring::Route>] the currently declared routes.
10
+ # @return [Array<Core::Models::Permissions::Route>] the currently declared routes.
11
11
  attr_reader :api_routes
12
12
 
13
13
  # Main method to declare new routes, persisting them in the database and
@@ -33,9 +33,9 @@ module Core
33
33
  # Add a route to the database, then to the routes array.
34
34
  # @param verb [String] the HTTP method used to request this route.
35
35
  # @param path [String] the path used to request this route.
36
- # @return [Arkaan::Monitoring::Route] the created route.
36
+ # @return [Core::Models::Permissions::Route] the created route.
37
37
  def add_route(verb:, path:, options:)
38
- route = Arkaan::Monitoring::Route.find_or_create_by!(
38
+ route = Core::Models::Permissions::Route.find_or_create_by!(
39
39
  path: path,
40
40
  verb: verb.downcase,
41
41
  premium: options[:premium],
@@ -47,7 +47,7 @@ module Core
47
47
  end
48
48
 
49
49
  # Pushes the route in the api routes list, by creating it if needed
50
- # @param route [Arkaan::Monitoring::Route] the route to push in the list of routes.
50
+ # @param route [Core::Models::Permissions::Route] the route to push in the list of routes.
51
51
  def push_route(route)
52
52
  @api_routes << route if api_routes.none? do |tmp_route|
53
53
  route.id == tmp_route.id
@@ -56,9 +56,9 @@ module Core
56
56
 
57
57
  # Add the default access permissions to a route. Any group tagged superuser
58
58
  # can automatically access any newly declared_route.
59
- # params route [Arkaan::Monitoring::Route] the route to add the permissions to.
59
+ # params route [Core::Models::Permissions::Route] the route to add the permissions to.
60
60
  def add_permissions(route)
61
- groups = Arkaan::Permissions::Group.where(is_superuser: true)
61
+ groups = Core::Models::Permissions::Group.where(is_superuser: true)
62
62
  groups.each do |group|
63
63
  unless route.groups.where(id: group.id).exists?
64
64
  route.groups << group
@@ -3,12 +3,12 @@
3
3
  module Core
4
4
  module Helpers
5
5
  # This module provides the #current_route method to get the current
6
- # Arkaan::Monitoring::Route object from whithin sinatra routes.
6
+ # Core::Models::Monitoring::Route object from whithin sinatra routes.
7
7
  # @author Vincent Courtois <courtois.vincent@outlook.com>
8
8
  module Routes
9
9
  # The currently requested API route, used to see inside the block
10
10
  # if the route is premium or not, authenticated or not.
11
- # @return [Arkaan::Monitoring::Route] the currently requested route.
11
+ # @return [Core::Models::Monitoring::Route] the currently requested route.
12
12
  def current_route
13
13
  splitted = request.env['sinatra.route'].split(' ')
14
14
  verb = splitted.first.downcase
@@ -13,7 +13,7 @@ module Core
13
13
  # @raise [Virtuatable::API::Errors::BadRequest] if the session token is
14
14
  # not correctly given in the parameters.
15
15
  #
16
- # @return [Arkaan::Authentication::Session] the current session of the user.
16
+ # @return [Core::Models::Authentication::Session] the current session of the user.
17
17
  def session
18
18
  return @session unless @session.nil?
19
19
 
@@ -23,7 +23,7 @@ module Core
23
23
  end
24
24
 
25
25
  def session_model
26
- Arkaan::Authentication::Session
26
+ Core::Models::Authentication::Session
27
27
  end
28
28
  end
29
29
  end
@@ -16,7 +16,7 @@ module Core
16
16
  field :description, type: String
17
17
  # @!attribute [rw] is_private
18
18
  # @return [Boolean] TRUE if the campaign can be joined only by being invited by the creator, FALSE if it's publicly displayed and accessible.
19
- field :is_private, type: Boolean, default: true
19
+ field :is_private, type: Mongoid::Boolean, default: true
20
20
  # @!attribute [rw] tags
21
21
  # @return [Array<String>] an array of tags describing characteristics of this campaign.
22
22
  field :tags, type: Array, default: []
@@ -21,7 +21,7 @@ module Core
21
21
  field :raw, type: String, default: ''
22
22
  # @!attribute [rw] deleted
23
23
  # @return [Boolean] TRUE if the message has been marked as deleted by its user, FALSE otherwise.
24
- field :deleted, type: Boolean, default: false
24
+ field :deleted, type: Mongoid::Boolean, default: false
25
25
 
26
26
  # @!attribute [rw] campaign
27
27
  # @return [Core::Models::Chatrooms::Campaign] the chatroom in which the message has been emitted.
@@ -9,7 +9,7 @@ module Core
9
9
  included do
10
10
  # @!attribute [rw] active
11
11
  # @return [Boolean] the active status of the instance, indicating if someone has deactivated it or not.
12
- field :active, type: Boolean, default: true
12
+ field :active, type: Mongoid::Boolean, default: true
13
13
 
14
14
  scope :active , ->{ where(active: true) }
15
15
  scope :inactive, ->{ where(active: false) }
@@ -9,7 +9,7 @@ module Core
9
9
  included do
10
10
  # @!attribute [rw] premium
11
11
  # @return [Boolean] TRUE if the entity is made to be accessible only to premiuma pplications, FALSE otherwise.
12
- field :premium, type: Boolean, default: false
12
+ field :premium, type: Mongoid::Boolean, default: false
13
13
  end
14
14
  end
15
15
  end
@@ -6,22 +6,16 @@ module Core
6
6
  module Sluggable
7
7
  extend ActiveSupport::Concern
8
8
 
9
- # Module holding the class methods for the classes including this concern.
10
- # @author Vincent Courtois <courtois.vincent@outlook.com>
11
- module ClassMethods
12
- # Add the field and its validations in the model including it.
13
- # @param entity_type [String,Symbol] the name of the model including it, to be included in the error messages.
14
- def make_sluggable(entity_type)
15
- # @!attribute [rw] slug
16
- # @return [String] the slug of the current entity ; it must be snake-cased, longer than four characters, unique for the entity and given.
17
- field :slug, type: String
9
+ included do
10
+ # @!attribute [rw] slug
11
+ # @return [String] the slug of the current entity ; it must be snake-cased, longer than four characters, unique for the entity and given.
12
+ field :slug, type: String
18
13
 
19
- validates :slug,
20
- length: {minimum: 4, message: 'minlength', if: :slug?},
21
- format: {with: /\A[a-z]+(_[a-z]+)*\z/, message: 'pattern', if: :slug?},
22
- uniqueness: {message: 'uniq', if: :slug?},
23
- presence: {message: 'required'}
24
- end
14
+ validates :slug,
15
+ length: {minimum: 4, message: 'minlength', if: :slug?},
16
+ format: {with: /\A[a-z]+(_[a-z]+)*\z/, message: 'pattern', if: :slug?},
17
+ uniqueness: {message: 'uniq', if: :slug?},
18
+ presence: {message: 'required'}
25
19
  end
26
20
  end
27
21
  end
@@ -11,7 +11,7 @@ module Core
11
11
  field :type, type: String, default: 'NOTIFICATIONS.DEFAULT'
12
12
  # @!attribute [rw] read
13
13
  # @return [Boolean] TRUE if the notification has been read (seen by the user), FALSE otherwise.
14
- field :read, type: Boolean, default: false
14
+ field :read, type: Mongoid::Boolean, default: false
15
15
  # @!attribute [rw] data
16
16
  # @return [Hash] the custom data that can be attached to this notification, for example for an invitation it can be the invited username.
17
17
  field :data, type: Hash, default: {}
@@ -21,6 +21,12 @@ module Core
21
21
  # @return [Core::Models::OAuth::Authorization] the authorization code that issued this token to the application for this user.
22
22
  belongs_to :authorization, class_name: 'Core::Models::OAuth::Authorization', inverse_of: :tokens
23
23
 
24
+
25
+ # A refresh token is attached to each and every refresh token so that it can be used to deliver a new access token.
26
+ # @!attribute [rx] refresh_token
27
+ # @return [Core::Models::OAuth::RefreshToken] the refresh token linked to this token
28
+ has_one :refresh_token, class_name: 'Core::Models::OAuth::RefreshToken', inverse_of: :token
29
+
24
30
  validates :value,
25
31
  presence: {message: 'required'},
26
32
  uniqueness: {message: 'uniq'}
@@ -28,8 +34,25 @@ module Core
28
34
  # Checks if the current date is inferior to the creation date + expiration period
29
35
  # @return [Boolean] TRUE if the token is expired, FALSE otherwise.
30
36
  def expired?
37
+ # Handles the case where the token is given to a premium app (our apps have infinite tokens).
38
+ return false if premium?
39
+ return true if refresh_token.used?
40
+
31
41
  created_at.to_time.to_i + expiration < Time.now.to_i
32
42
  end
43
+
44
+ # Returns the scopes this access token can use to access the application
45
+ # @return [Array<Core::Models::OAuth::Scope>] the array of scopes from the linked authorization
46
+ def scopes
47
+ # Premium applications (our applications) have all the rights on the API.
48
+ return Core::Models::OAuth::Scope.all.to_a if premium?
49
+
50
+ authorization.scopes
51
+ end
52
+
53
+ def premium?
54
+ authorization.application.premium
55
+ end
33
56
  end
34
57
  end
35
58
  end
@@ -12,12 +12,15 @@ module Core
12
12
  # @!attribute [rw] name
13
13
  # @return [String] the unique name of the application, mainly used to identify and display it.
14
14
  field :name, type: String
15
- # @!attribute [rw] key
15
+ # @!attribute [rw] client_id
16
16
  # @return [String] the unique key for the application, identifying it when requesting a token for the API.
17
- field :key, type: String, default: ->{ SecureRandom.hex }
17
+ field :client_id, type: String, default: ->{ SecureRandom.hex }
18
+ # @!attribute [rw] client_secret
19
+ # @return [String] the "password" of the application, used to identify it when requesting tokens.
20
+ field :client_secret, type: String, default: ->{ SecureRandom.hex }
18
21
  # @!attribute [rw] premium
19
22
  # @return [Boolean] a value indicating whether the application should automatically receive a token when an account is created, or not.
20
- field :premium, type: Boolean, default: false
23
+ field :premium, type: Mongoid::Boolean, default: false
21
24
  # @!attirbute [rw] redirect_uris
22
25
  # @return [Array<String>] the redirection URIs used for this application.
23
26
  field :redirect_uris, type: Array, default: []
@@ -28,16 +31,22 @@ module Core
28
31
  # @!attribute [rw] authorizations
29
32
  # @return [Array<Core::Models::OAuth::Authorization>] the authorizations linked to the accounts this application can get the data from.
30
33
  has_many :authorizations, class_name: 'Core::Models::OAuth::Authorization', inverse_of: :application
34
+ # @!attribute [rw]
35
+ # @return [Array<Core::Models::OAuth::Scope>] the scopes this application will transmit to its token
36
+ has_and_belongs_to_many :scopes, class_name: 'Core::Models::OAuth::Scope', inverse_of: :applications
31
37
 
32
38
  validates :name,
33
39
  presence: {message: 'required'},
34
40
  length: {minimum: 6, message: 'minlength'},
35
41
  uniqueness: {message: 'uniq'}
36
42
 
37
- validates :key,
43
+ validates :client_id,
38
44
  presence: {message: 'required'},
39
45
  uniqueness: {message: 'uniq'}
40
46
 
47
+ validates :client_secret,
48
+ presence: {message: 'required'}
49
+
41
50
  validate :redirect_uris_values
42
51
 
43
52
  # Checks the URIs to get sure they are correct, a URI is correct if :
@@ -48,7 +57,7 @@ module Core
48
57
  if !uri.is_a? String
49
58
  errors.add(:redirect_uris, 'type')
50
59
  break
51
- elsif uri.match(/\A(https?:\/\/)((([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*)|(localhost:[0-9]{2,4})\/?)\z/).nil?
60
+ elsif uri.match(/\Ahttps?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&\/\/=]*)\z/).nil?
52
61
  errors.add(:redirect_uris, 'format')
53
62
  break
54
63
  end
@@ -15,6 +15,9 @@ module Core
15
15
  # @!attribute [rw] code
16
16
  # @return [String] the value corresponding to the authentication code in the RFC of OAuth2.0, kep for historic purpose.
17
17
  field :code, type: String, default: ->{ SecureRandom.hex }
18
+ # @!attribute [rw] expiration
19
+ # @return [Integer] the time, in seconds, after which the authorization is declared expired.
20
+ field :expiration, type: Integer, default: 86400
18
21
 
19
22
  # @!attribute [rw] account
20
23
  # @return [Arkaaan::Account] the account granting the authorization to access its data to the application.
@@ -25,10 +28,19 @@ module Core
25
28
  # @!attribute [rw] token
26
29
  # @return [Core::Models::OAuth::AccessToken] the access token used further in the application process to access private data of the account.
27
30
  has_many :tokens, class_name: 'Core::Models::OAuth::AccessToken', inverse_of: :authorization
31
+ # @!attribute [rw]
32
+ # @return [Array<Core::Models::OAuth::Scope>] the scopes this access token has.
33
+ has_and_belongs_to_many :scopes, class_name: 'Core::Models::OAuth::Scope', inverse_of: :authorizations
28
34
 
29
35
  validates :code,
30
36
  presence: {message: 'required'},
31
37
  uniqueness: {message: 'uniq'}
38
+
39
+ # Checks if the current date is inferior to the creation date + expiration period
40
+ # @return [Boolean] TRUE if the authorization is expired, FALSE otherwise.
41
+ def expired?
42
+ created_at.to_time.to_i + expiration < Time.now.to_i
43
+ end
32
44
  end
33
45
  end
34
46
  end
@@ -12,10 +12,17 @@ module Core
12
12
  # @!attribute [rw] value
13
13
  # @return [String] the value of the token, returned to the application when built.
14
14
  field :value, type: String, default: ->{ SecureRandom.hex }
15
+ # @!attribute [rw] used_at
16
+ # @return [DateTime] the date and time at which this refresh token has been useds to create a new access token.
17
+ field :used_at, type: DateTime, default: nil
15
18
 
16
19
  # @!attribute [rw] authorization
17
20
  # @return [Core::Models::OAuth::Authorization] the authorization code that issued this token to the application for this user.
18
- belongs_to :authorization, class_name: 'Core::Models::OAuth::Authorization', inverse_of: :refresh_token
21
+ belongs_to :token, class_name: 'Core::Models::OAuth::AccessToken', inverse_of: :refresh_token
22
+
23
+ def used?
24
+ !used_at.nil? && used_at < DateTime.now
25
+ end
19
26
  end
20
27
  end
21
28
  end
@@ -0,0 +1,32 @@
1
+ module Core
2
+ module Models
3
+ module OAuth
4
+ # A scope gives access to some parts of the API, for example to the management of campaigns,
5
+ # applications or for account profile management.
6
+ # @author Vincent Courtois <courtois.vincent@outlook.com>
7
+ class Scope
8
+ include Mongoid::Document
9
+ include Mongoid::Timestamps
10
+
11
+ store_in collection: 'scopes'
12
+
13
+ # @!attribute [rw] name
14
+ # @return [String] the name of the scope, used to get its translation on the frontend.
15
+ field :name, type: String, default: ''
16
+
17
+ # @!attribute [rw] applications
18
+ # @return [Array<Core::Models::OAuth::Application>] the applications that want to have access to this
19
+ # scope from the users of the platform. These rights will be carried on to the tokens and frozen.
20
+ has_and_belongs_to_many :applications, class_name: 'Core::Models::OAuth::Application', inverse_of: :scopes
21
+ # @!attribute [rw] tokeauthorizationsns
22
+ # @return [Array<Core::Models::OAuth::Authorization] the tokens having these scopes.
23
+ has_and_belongs_to_many :authorizations, class_name: 'Core::Models::OAuth::Authorization', inverse_of: :scopes
24
+
25
+ validates :name,
26
+ presence: {message: 'required'},
27
+ length: {minimum: 6, if: :name?, message: 'minlength'},
28
+ uniqueness: {id: :name?, message: 'uniq'}
29
+ end
30
+ end
31
+ end
32
+ end
@@ -7,6 +7,7 @@ module Core
7
7
  autoload :Authorization, 'core/models/oauth/authorization'
8
8
  autoload :AccessToken , 'core/models/oauth/access_token'
9
9
  autoload :RefreshToken , 'core/models/oauth/refresh_token'
10
+ autoload :Scope , 'core/models/oauth/scope'
10
11
  end
11
12
  end
12
13
  end
@@ -11,8 +11,6 @@ module Core
11
11
  store_in collection: 'categories'
12
12
 
13
13
  has_many :rights, class_name: 'Core::Models::Permissions::Right', inverse_of: :category
14
-
15
- make_sluggable 'category'
16
14
  end
17
15
  end
18
16
  end
@@ -12,10 +12,10 @@ module Core
12
12
 
13
13
  # @!attribute [rw] is_default
14
14
  # @return [Boolean] a boolean indicating whether this group is given when a new user registered or not.
15
- field :is_default, type: Boolean, default: false
15
+ field :is_default, type: Mongoid::Boolean, default: false
16
16
  # @!attribute [rw] is_superuser
17
17
  # @return [Boolean] a boolean indicating whether this group should have access to all groups and rights or not.
18
- field :is_superuser, type: Boolean, default: false
18
+ field :is_superuser, type: Mongoid::Boolean, default: false
19
19
 
20
20
  # @!attribute [rw] accounts
21
21
  # @return [Array<Core::Models::Account>] the accounts having the rights granted by this group.
@@ -26,8 +26,6 @@ module Core
26
26
  # @!attribute [rw] routes
27
27
  # @return [Array<Core::Models::Monitoring::Route>] the routes this group can access in the API.
28
28
  has_and_belongs_to_many :routes, class_name: 'Core::Models::Permissions::Route', inverse_of: :groups
29
-
30
- make_sluggable 'group'
31
29
  end
32
30
  end
33
31
  end
@@ -15,8 +15,6 @@ module Core
15
15
  has_and_belongs_to_many :groups, class_name: 'Core::Models::Permissions::Group', inverse_of: :rights
16
16
 
17
17
  belongs_to :category, class_name: 'Core::Models::Permissions::Category', inverse_of: :rights
18
-
19
- make_sluggable 'right'
20
18
  end
21
19
  end
22
20
  end
@@ -19,7 +19,7 @@ module Core
19
19
  field :verb, type: String, default: 'get'
20
20
  # @!attribute [rw] authenticated
21
21
  # @return [Boolean] if true, the session_id is needed for this route, if false it is not.
22
- field :authenticated, type: Boolean, default: true
22
+ field :authenticated, type: Mongoid::Boolean, default: true
23
23
  # @!attribute [rw] groups
24
24
  # @return [Array<Core::Models::Permissions::Group>] the groups having permission to access this route.
25
25
  has_and_belongs_to_many :groups, class_name: 'Core::Models::Permissions::Group', inverse_of: :groups
data/lib/core/models.rb CHANGED
@@ -1,24 +1,22 @@
1
- require 'mongoid'
2
- require 'active_model'
3
- require 'active_support'
4
- require 'dotenv/load'
1
+ # frozen_string_literal: true
5
2
 
6
- # Main module of the application, holding all the subsequent classes.
7
- # @author Vincent Courtois <courtois.vincent@outlook.com>
8
3
  module Core
4
+ # Module holding the representations of the business objects we're manipulating
5
+ # in the database. Models are declared as Mongoid classes to connect to MongoDB
6
+ # @author Vincent Courtois <courtois.vincent@outlook.com>
9
7
  module Models
10
- autoload :Account , 'core/models/account'
8
+ autoload :Account, 'core/models/account'
11
9
  autoload :Authentication, 'core/models/authentication'
12
- autoload :Campaign , 'core/models/campaign'
13
- autoload :Campaigns , 'core/models/campaigns'
14
- autoload :Chatroom , 'core/models/chatroom'
15
- autoload :Chatrooms , 'core/models/chatrooms'
16
- autoload :Concerns , 'core/models/concerns'
17
- autoload :Event , 'core/models/event'
18
- autoload :Files , 'core/models/files'
19
- autoload :Notification , 'core/models/notification'
20
- autoload :OAuth , 'core/models/oauth'
21
- autoload :Permissions , 'core/models/permissions'
22
- autoload :Ruleset , 'core/models/ruleset'
10
+ autoload :Campaign, 'core/models/campaign'
11
+ autoload :Campaigns, 'core/models/campaigns'
12
+ autoload :Chatroom, 'core/models/chatroom'
13
+ autoload :Chatrooms, 'core/models/chatrooms'
14
+ autoload :Concerns, 'core/models/concerns'
15
+ autoload :Event, 'core/models/event'
16
+ autoload :Files, 'core/models/files'
17
+ autoload :Notification, 'core/models/notification'
18
+ autoload :OAuth, 'core/models/oauth'
19
+ autoload :Permissions, 'core/models/permissions'
20
+ autoload :Ruleset, 'core/models/ruleset'
23
21
  end
24
- end
22
+ end
data/lib/core/services.rb CHANGED
@@ -1,8 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Core
4
+ # Services are orchestrating models to provide more high-level operations.
5
+ # @author Vincent Courtois <courtois.vincent@outlook.com>
2
6
  module Services
3
7
  autoload :Accounts, 'core/services/accounts'
4
8
  autoload :Base, 'core/services/base'
5
9
  autoload :Registry, 'core/services/registry'
6
10
  autoload :Sessions, 'core/services/sessions'
7
11
  end
8
- end
12
+ end
data/lib/core/version.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Core
2
- VERSION = '1.2.0'
3
- end
4
+ VERSION = '1.3.0'
5
+ end
data/lib/core.rb CHANGED
@@ -1,7 +1,6 @@
1
- require 'mongoid'
2
- require 'active_model'
3
- require 'active_support'
4
- require 'dotenv/load'
1
+ # frozen_string_literal: true
2
+
3
+ %w[active_model mongoid active_support].each { |g| require g }
5
4
 
6
5
  # Main module of the application, holding all the subsequent classes.
7
6
  # @author Vincent Courtois <courtois.vincent@outlook.com>
@@ -10,4 +9,4 @@ module Core
10
9
  autoload :Helpers, 'core/helpers'
11
10
  autoload :Models, 'core/models'
12
11
  autoload :Services, 'core/services'
13
- end
12
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: virtuatable-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vincent Courtois
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-10 00:00:00.000000000 Z
11
+ date: 2022-04-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: database_cleaner
@@ -240,14 +240,14 @@ dependencies:
240
240
  requirements:
241
241
  - - '='
242
242
  - !ruby/object:Gem::Version
243
- version: 7.1.0
243
+ version: 7.4.0
244
244
  type: :runtime
245
245
  prerelease: false
246
246
  version_requirements: !ruby/object:Gem::Requirement
247
247
  requirements:
248
248
  - - '='
249
249
  - !ruby/object:Gem::Version
250
- version: 7.1.0
250
+ version: 7.4.0
251
251
  - !ruby/object:Gem::Dependency
252
252
  name: sinatra
253
253
  requirement: !ruby/object:Gem::Requirement
@@ -332,6 +332,7 @@ files:
332
332
  - lib/core/models/oauth/application.rb
333
333
  - lib/core/models/oauth/authorization.rb
334
334
  - lib/core/models/oauth/refresh_token.rb
335
+ - lib/core/models/oauth/scope.rb
335
336
  - lib/core/models/permissions.rb
336
337
  - lib/core/models/permissions/category.rb
337
338
  - lib/core/models/permissions/group.rb