virtuatable-core 1.4.0 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bb7485c8bb6e781dcf4b6d3299d3065769a4556e01421fba08eb2404a3d982a5
4
- data.tar.gz: 281cce31ddad58a7ffb44e8fd78de1bdefdc5d5f1f2f6b53f8a89e9125e8792e
3
+ metadata.gz: d95c03cd13525c1a5326004d88c62a806c0e991ef8dd0766f0f2465078f2b23e
4
+ data.tar.gz: d217b7fd979676aa8b61cd58fb8ad54a3abd352fe105713700c12edc39abfdd6
5
5
  SHA512:
6
- metadata.gz: 2df4695bf1450c3c99cc3d86e5cee1cc91050275b6f54e40c587553376e93bd9752aac1683692a556c3265c16bab9fb06daa530b30645b3b4fdb6748a5e741ec
7
- data.tar.gz: eee4af9a5591e1ef3fa5a7a5a1071791680a02af442df91bcfb03d5f4f63cc334ea6fe78edfbfb848a358af3d0df9327fb13429b0d104637e9622ae71c568d64
6
+ metadata.gz: 4c180ac1d407073cc75d81a8d08f9394ef6d025cb899c4971a94ee6daa213ca5bcf4d240bd491b2374c60c7e2abfab80729226af37b0b7bdc60c0d7c3b2af326
7
+ data.tar.gz: d2c695ecb5ad843dc18789f84e6028bde42fb74949351f9f3308018d2c57cd29ef87a9ecc1d2cc8b4cf29a87c6ac73eab12b29177c32c6f0ba915798bc24bbd3
@@ -0,0 +1,20 @@
1
+ module Core
2
+ module Decorators
3
+ class Campaign < Draper::Decorator
4
+ delegate_all
5
+
6
+ def to_simple_h
7
+ {
8
+ id: id.to_s,
9
+ title: title,
10
+ description: description,
11
+ tags: tags,
12
+ players: {
13
+ current: invitations.where(status: :accepted).count,
14
+ max: max_players
15
+ }
16
+ }
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,5 @@
1
+ module Core
2
+ module Decorators
3
+ autoload :Campaign, 'core/decorators/campaign'
4
+ end
5
+ end
@@ -13,9 +13,9 @@ module Core
13
13
  # @param verb [String] the HTTP method for the route.
14
14
  # @param path [String] the whole URI with parameters for the route.
15
15
  # @param options [Hash] the additional options for the route.
16
- def api_route(verb, path, premium: false, scopes: ['data::usage'], &block)
16
+ def api_route(verb, path, premium: false, scopes: [], &block)
17
17
  send(verb, path) do
18
- scope_objects = fetch_scopes(scopes)
18
+ scope_objects = fetch_scopes(scopes + ['data::usage'])
19
19
  appli = application(premium: premium)
20
20
  check_app_scopes(appli, scope_objects)
21
21
  check_token_scopes(token, scope_objects)
@@ -1,6 +1,8 @@
1
1
  module Core
2
2
  module Services
3
- class Accounts < Core::Services::Base
3
+ class Accounts
4
+ include Singleton
5
+
4
6
  def get_by_username(username)
5
7
  account = Core::Models::Account.find_by(username: username)
6
8
  if account.nil?
@@ -0,0 +1,26 @@
1
+ module Core
2
+ module Services
3
+ class Campaigns
4
+ include Singleton
5
+
6
+ # Lists all the campaigns of a user identified by its account.
7
+ #
8
+ # @param account [Core::Models::Account] the user requesting its campaigns.
9
+ # @param page [Integer] the page in the list of campaigns to return to the users.
10
+ # @param per_page [Integer] the number of campaigns per page.
11
+ #
12
+ # @return [Array<Hash>] an array of hash representing campaigns.
13
+ def list(account, page: 0, per_page: 20, **ignored)
14
+ campaigns = campaigns(account).skip(page * per_page).limit(per_page)
15
+ campaigns.map do |campaign|
16
+ Core::Decorators::Campaign.new(campaign).to_simple_h
17
+ end
18
+ end
19
+
20
+ def campaigns(account)
21
+ invitations = account.invitations.where(enum_status: 'creator')
22
+ Core::Models::Campaign.where(:id.in => invitations.map(&:campaign_id))
23
+ end
24
+ end
25
+ end
26
+ end
@@ -3,12 +3,14 @@ module Core
3
3
  # The registry holds references to all the services accessible in the library. To access
4
4
  # all services and be able to manage resources easily, just instanciate the
5
5
  class Registry
6
+ include Singleton
6
7
 
7
- attr_reader :accounts, :sessions
8
+ attr_reader :accounts, :sessions, :campaigns
8
9
 
9
10
  def initialize
10
- @accounts = Core::Services::Accounts.new(self)
11
- @sessions = Core::Services::Sessions.new(self)
11
+ @accounts = Core::Services::Accounts.instance
12
+ @sessions = Core::Services::Sessions.instance
13
+ @campaigns = Core::Services::Campaigns.instance
12
14
  end
13
15
  end
14
16
  end
@@ -5,7 +5,8 @@ module Core
5
5
  module Services
6
6
  # Service concerning sessions (log in and log out)
7
7
  # @author Vincent Courtois <courtois.vincent@outlook.com>
8
- class Sessions < Core::Services::Base
8
+ class Sessions
9
+ include Singleton
9
10
  # Creates a new session from the given user credentials. IT will
10
11
  # * check that the user exists in the database
11
12
  # * check that the password matches the user encrypted password
@@ -16,7 +17,7 @@ module Core
16
17
  # @param password [string] the password the user has provided
17
18
  # @return [Core::Models::Authentication::Session] the login session
18
19
  def create(username, password)
19
- account = services.accounts.get_by_username(username)
20
+ account = Core.svc.accounts.get_by_username(username)
20
21
  if BCrypt::Password.new(account.password_digest) != password
21
22
  raise Core::Helpers::Errors::Forbidden.new(
22
23
  field: 'password',
data/lib/core/services.rb CHANGED
@@ -5,8 +5,8 @@ module Core
5
5
  # @author Vincent Courtois <courtois.vincent@outlook.com>
6
6
  module Services
7
7
  autoload :Accounts, 'core/services/accounts'
8
- autoload :Base, 'core/services/base'
9
8
  autoload :Registry, 'core/services/registry'
10
9
  autoload :Sessions, 'core/services/sessions'
10
+ autoload :Campaigns, 'core/services/campaigns'
11
11
  end
12
12
  end
data/lib/core/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Core
4
- VERSION = '1.4.0'
4
+ VERSION = '1.5.0'
5
5
  end
data/lib/core.rb CHANGED
@@ -1,12 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- %w[active_model mongoid active_support].each { |g| require g }
3
+ %w[active_model mongoid active_support draper].each { |g| require g }
4
4
 
5
5
  # Main module of the application, holding all the subsequent classes.
6
6
  # @author Vincent Courtois <courtois.vincent@outlook.com>
7
7
  module Core
8
8
  autoload :Controllers, 'core/controllers'
9
+ autoload :Decorators, 'core/decorators'
9
10
  autoload :Helpers, 'core/helpers'
10
11
  autoload :Models, 'core/models'
11
12
  autoload :Services, 'core/services'
13
+
14
+ # Returns the registry of services for easier access to each of them.
15
+ def self.svc
16
+ Core::Services::Registry.instance
17
+ end
12
18
  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.4.0
4
+ version: 1.5.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-05-08 00:00:00.000000000 Z
11
+ date: 2022-05-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: database_cleaner
@@ -276,6 +276,20 @@ dependencies:
276
276
  - - '='
277
277
  - !ruby/object:Gem::Version
278
278
  version: 2.1.0
279
+ - !ruby/object:Gem::Dependency
280
+ name: draper
281
+ requirement: !ruby/object:Gem::Requirement
282
+ requirements:
283
+ - - ">="
284
+ - !ruby/object:Gem::Version
285
+ version: '0'
286
+ type: :runtime
287
+ prerelease: false
288
+ version_requirements: !ruby/object:Gem::Requirement
289
+ requirements:
290
+ - - ">="
291
+ - !ruby/object:Gem::Version
292
+ version: '0'
279
293
  description: This gem holds the model layer for my table-top RPG games application.
280
294
  email: courtois.vincent@outlook.com
281
295
  executables: []
@@ -285,6 +299,8 @@ files:
285
299
  - lib/core.rb
286
300
  - lib/core/controllers.rb
287
301
  - lib/core/controllers/base.rb
302
+ - lib/core/decorators.rb
303
+ - lib/core/decorators/campaign.rb
288
304
  - lib/core/helpers.rb
289
305
  - lib/core/helpers/accounts.rb
290
306
  - lib/core/helpers/applications.rb
@@ -337,7 +353,7 @@ files:
337
353
  - lib/core/models/ruleset.rb
338
354
  - lib/core/services.rb
339
355
  - lib/core/services/accounts.rb
340
- - lib/core/services/base.rb
356
+ - lib/core/services/campaigns.rb
341
357
  - lib/core/services/registry.rb
342
358
  - lib/core/services/sessions.rb
343
359
  - lib/core/version.rb
@@ -1,11 +0,0 @@
1
- module Core
2
- module Services
3
- class Base
4
- attr_reader :services
5
-
6
- def initialize(registry)
7
- @services = registry
8
- end
9
- end
10
- end
11
- end