virtuatable-core 1.4.0 → 1.5.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: 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