arkaan 2.3.0 → 2.4.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: b3b465b5fc4b05bb9c7418535aad8e08604e5a31a9ced1f59c35b1b9e034564a
4
- data.tar.gz: f4b606b42e585e3f76fb67822438e45c3db8e992d0e147a6aa862269b2542ba4
3
+ metadata.gz: 88f3666897172e59135de5920b17f9356a7cdcf2877b5f5244eb21b55f95c7c8
4
+ data.tar.gz: 73c232117a9f905d00d1853d03176460b139a8a8b9b59544a5975d6af825d5c1
5
5
  SHA512:
6
- metadata.gz: d10d9f661bd8a6a2355e1e9f5d3d8facda27b109c0573a95a0a36a99298b286b4e5aa232f0d43b5a57fe9428f320abe1fff64a1b29ba1262eb7132102a757d07
7
- data.tar.gz: 01405711bc3616838a2dfa1ba589b19f1ed747c0ad1357f556f350cd5525779fb662231f6dbe2eebc169d6d8f7c93b6c5537e61877d8ed24c8127355715654e9
6
+ metadata.gz: 3035f83abcc6a2970d3fa21b149fe70ab6f9e7908fa124c01917a54c89d087a1239694e82241882df74b672494b3e38d1a9951b83bca512b54ee10134f7e4c6b
7
+ data.tar.gz: c5529c6c1c9ba7686492379bff4e2ab509d0a0f9515d1c77b190a175000af86ba8bedd22b2a919fa7c6a375253d8c9036fa41d5ab33d14c55a4eaec2a29d55e7
@@ -18,6 +18,7 @@ module Arkaan
18
18
  autoload :Campaigns , 'arkaan/campaigns'
19
19
  autoload :Concerns , 'arkaan/concerns'
20
20
  autoload :Factories , 'arkaan/factories'
21
+ autoload :Files , 'arkaan/files'
21
22
  autoload :Monitoring , 'arkaan/monitoring'
22
23
  autoload :Notification , 'arkaan/notification'
23
24
  autoload :OAuth , 'arkaan/oauth'
@@ -60,6 +60,9 @@ module Arkaan
60
60
  # @!attribute [rw] websockets
61
61
  # @return [Array<Arkaan::Monitoring::Websocket>] the websockets created by the owner of this account.
62
62
  has_many :websockets, class_name: 'Arkaan::Monitoring::Websocket', inverse_of: :creator
63
+ # @!attribute [rw] permissions
64
+ # @return [Array<Arkaan::Files::Permission>] the file access permissions granted to this account.
65
+ has_many :permissions, class_name: 'Arkaan::Files::Permission', inverse_of: :account
63
66
 
64
67
  # @!attribute [rw] notifications
65
68
  # @return [Array<Arkaan::Notification>] the notifications linked to this user.
@@ -25,8 +25,8 @@ module Arkaan
25
25
  # @return [Array<Arkaan::Campaigns::Invitation>] the invitations to players that have been made for this campaign.
26
26
  has_many :invitations, class_name: 'Arkaan::Campaigns::Invitation', inverse_of: :campaign
27
27
  # @!attribute [rw] files
28
- # @return [Array<Arkaan::Campaigns::Files::Document>] the list of files that were uploaded in this campaign.
29
- has_many :files, class_name: 'Arkaan::Campaigns::Files::Document', inverse_of: :campaign
28
+ # @return [Array<Arkaan::Files::Document>] the files uploaded in this campaign.
29
+ has_many :files, class_name: 'Arkaan::Files::Document'
30
30
 
31
31
  # @!attribute [rw] messages
32
32
  # @return [Array<Arkaan::Campaigns::Messages::Base>] the messages sent in the chatroom of the campaign.
@@ -90,15 +90,5 @@ module Arkaan
90
90
  def players_count
91
91
  players.count
92
92
  end
93
-
94
- # @return [Array<Arkaan::Campaigns::Character>] a flattened list of characters for this campaign.
95
- def characters
96
- players.map(&:characters).flatten
97
- end
98
-
99
- # @return [Array<Arkaan::Campaigns::Files::Document>] the document of this campaign as a flattened array.
100
- def documents
101
- invitations.map(&:documents).flatten
102
- end
103
93
  end
104
94
  end
@@ -2,8 +2,6 @@ module Arkaan
2
2
  # The campaigns module is holding the logic for some objects related to campaigns.
3
3
  # @author Vincent Courtois <courtois.vincent@outlook.com>
4
4
  module Campaigns
5
- autoload :Character , 'arkaan/campaigns/character'
6
- autoload :Files , 'arkaan/campaigns/files'
7
5
  autoload :Invitation, 'arkaan/campaigns/invitation'
8
6
  autoload :Message , 'arkaan/campaigns/message'
9
7
  autoload :Tag , 'arkaan/campaigns/tag'
@@ -17,29 +17,6 @@ module Arkaan
17
17
  # @!attribute [rw] campaign
18
18
  # @return [Arkaan::Campaign] the campaign the invitation has been made in.
19
19
  belongs_to :campaign, class_name: 'Arkaan::Campaign', inverse_of: :invitations
20
-
21
- # @!attribute [rw] files
22
- # @return [Array<Arkaan::Campaigns::Files::Document>] the files uploaded in this campaign by the user linked to this invitation.
23
- has_many :permissions, class_name: 'Arkaan::Campaigns::Files::Permission', inverse_of: :invitation
24
- # @!attribute [rw] characters
25
- # @return [Array<Arkaan::Campaigns::Character>] the character sheets for this player.
26
- has_many :characters, class_name: 'Arkaan::Campaigns::Character', inverse_of: :invitation
27
-
28
- # Gets the currently selected character in a convenient way.
29
- # @return [Arkaan::Campaigns::Files::Character] the character currently selected by the player.
30
- def character
31
- characters.where(selected: true).first
32
- end
33
-
34
- def documents
35
- permissions.map(&:document)
36
- end
37
-
38
- def has_file?(filename)
39
- return permissions.map(&:document).map(&:name).any? do |name|
40
- name == filename
41
- end
42
- end
43
20
  end
44
21
  end
45
22
  end
@@ -0,0 +1,6 @@
1
+ module Arkaan
2
+ module Files
3
+ autoload :Document , 'arkaan/files/document'
4
+ autoload :Permission, 'arkaan/files/permission'
5
+ end
6
+ end
@@ -0,0 +1,40 @@
1
+ module Arkaan
2
+ module Files
3
+ # a document is an uploaded file in the S3 clone application.
4
+ # @author Vincent Courtois <courtois.vincent@outlook.com>
5
+ class Document
6
+ include Mongoid::Document
7
+ include Mongoid::Timestamps
8
+
9
+ # @!attribute [rw] name
10
+ # @return [String] the filename the user entered when uploading the file.
11
+ field :name, type: String
12
+
13
+ field :extension, type: String
14
+ # @!attribute [rw] size
15
+ # @return [String] the size, in bytes, of the uploaded file.
16
+ field :size, type: Integer, default: 0
17
+ # @!attribute [rw] folder
18
+ # @return [String] the folder in which the file is stored in the S3 clone.
19
+ field :folder, type: String, default: '/'
20
+ # @!attribute [rw] mime_type
21
+ # @return [String] the MIME type of the file. this MAY not correspond to the real
22
+ # MIME type of the uploaded file, this is just an indication.
23
+ field :mime_type, type: String
24
+
25
+ # @!attribute [rw] creator
26
+ # @return [Arkaan::Account] the account of the person that uploaded the file.
27
+ belongs_to :creator, class_name: 'Arkaan::Account', inverse_of: :files
28
+
29
+ # @!attribute [rw] permissions
30
+ # @return [Array<Arkaan::Files::Permission>] the permissions granted to access this file.
31
+ has_many :permissions, class_name: 'Arkaan::Files::Permission', inverse_of: :file
32
+
33
+ validates :name, uniqueness: {message: 'uniq'}
34
+
35
+ validates :name, :extension, :folder, :mime_type, presence: {message: 'required'}
36
+
37
+ validates :folder, format: {without: /\/\//, message: 'format'}
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,22 @@
1
+ module Arkaan
2
+ module Files
3
+ # The permission granted to a user to access and/or delete a file.
4
+ # @author Vincent Courtois <courtois.vincent@outlook.com>
5
+ class Permission
6
+ include Mongoid::Document
7
+ include Mongoid::Timestamps
8
+ include Arkaan::Concerns::Enumerable
9
+
10
+ # @!attribute [rw] type
11
+ # @return [Symbol] the type of permission granted (is the user able to delete the file ?)
12
+ enum_field :type, [:read, :read_write]
13
+
14
+ # @!attribute [rw] file
15
+ # @return [Arkaan::Files::Document] the document the permission is linked to.
16
+ belongs_to :file, class_name: 'Arkaan::Files::Document', inverse_of: :permissions
17
+ # @!attribute [rw] account
18
+ # @return [Arkaan::Account] the user being granted the access to the file.
19
+ belongs_to :account, class_name: 'Arkaan::Account', inverse_of: :permissions
20
+ end
21
+ end
22
+ end
@@ -1,3 +1,3 @@
1
1
  module Arkaan
2
- VERSION = '2.3.0'
2
+ VERSION = '2.4.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arkaan
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.0
4
+ version: 2.4.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: 2019-12-31 00:00:00.000000000 Z
11
+ date: 2020-01-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - '='
67
67
  - !ruby/object:Gem::Version
68
68
  version: 4.8.1
69
+ - !ruby/object:Gem::Dependency
70
+ name: factory_bot
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '='
74
+ - !ruby/object:Gem::Version
75
+ version: 5.1.1
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '='
81
+ - !ruby/object:Gem::Version
82
+ version: 5.1.1
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: database_cleaner
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -128,14 +142,28 @@ dependencies:
128
142
  requirements:
129
143
  - - '='
130
144
  - !ruby/object:Gem::Version
131
- version: 2.0.7
145
+ version: 2.0.8
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '='
151
+ - !ruby/object:Gem::Version
152
+ version: 2.0.8
153
+ - !ruby/object:Gem::Dependency
154
+ name: faker
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '='
158
+ - !ruby/object:Gem::Version
159
+ version: 2.10.0
132
160
  type: :development
133
161
  prerelease: false
134
162
  version_requirements: !ruby/object:Gem::Requirement
135
163
  requirements:
136
164
  - - '='
137
165
  - !ruby/object:Gem::Version
138
- version: 2.0.7
166
+ version: 2.10.0
139
167
  - !ruby/object:Gem::Dependency
140
168
  name: mongoid
141
169
  requirement: !ruby/object:Gem::Requirement
@@ -302,12 +330,6 @@ files:
302
330
  - lib/arkaan/authentication/session.rb
303
331
  - lib/arkaan/campaign.rb
304
332
  - lib/arkaan/campaigns.rb
305
- - lib/arkaan/campaigns/character.rb
306
- - lib/arkaan/campaigns/files.rb
307
- - lib/arkaan/campaigns/files/concerns.rb
308
- - lib/arkaan/campaigns/files/concerns/nameable.rb
309
- - lib/arkaan/campaigns/files/document.rb
310
- - lib/arkaan/campaigns/files/permission.rb
311
333
  - lib/arkaan/campaigns/invitation.rb
312
334
  - lib/arkaan/campaigns/message.rb
313
335
  - lib/arkaan/campaigns/tag.rb
@@ -326,6 +348,9 @@ files:
326
348
  - lib/arkaan/factories/errors.rb
327
349
  - lib/arkaan/factories/errors/gateway_not_found.rb
328
350
  - lib/arkaan/factories/gateways.rb
351
+ - lib/arkaan/files.rb
352
+ - lib/arkaan/files/document.rb
353
+ - lib/arkaan/files/permission.rb
329
354
  - lib/arkaan/monitoring.rb
330
355
  - lib/arkaan/monitoring/action.rb
331
356
  - lib/arkaan/monitoring/gateway.rb
@@ -1,45 +0,0 @@
1
- module Arkaan
2
- module Campaigns
3
- # A character sheet represents a character played by a player in a campaign.
4
- # @author Vincent Courtois <courtois.vincent@outlook.com>
5
- class Character
6
- include Mongoid::Document
7
- include Mongoid::Timestamps
8
-
9
- # @!attribute [rw] selected
10
- # @return [Boolean] TRUE if the sheet is currently selected by the player, FALSE otherwise.
11
- field :selected, type: Boolean, default: false
12
-
13
- # @!attribute [rw] data
14
- # @return [Hash] the heart of the Arkaan::Campaigns::Character class, the polymorphic
15
- # data representing all the fields of a character sheet are validated using the validator
16
- # of the associated plugin, and created/updated with the corresponding form.
17
- field :data, type: Hash, default: {}
18
-
19
- # @!attribute [rw] invitation
20
- # @return [Arkaan::Campaigns::Invitation] the invitation of the player playing this character.
21
- belongs_to :invitation, class_name: 'Arkaan::Campaigns::Invitation', inverse_of: :characters
22
-
23
- # Returns the player linked to this character.
24
- # @return [Arkaan::Account] the account of the player incarnating this character.
25
- def player
26
- invitation.account
27
- end
28
-
29
- def campaign
30
- invitation.campaign
31
- end
32
-
33
- # Puts the selected flag to TRUE for this character and to FALSE for all the
34
- # other characters for the same player in the same campaign.
35
- def select!
36
- invitation.characters.each do |character|
37
- character.update_attribute(:selected, false)
38
- character.save!
39
- end
40
- update_attribute(:selected, true)
41
- save!
42
- end
43
- end
44
- end
45
- end
@@ -1,10 +0,0 @@
1
- module Arkaan
2
- module Campaigns
3
- module Files
4
- autoload :Character , 'arkaan/campaigns/files/character'
5
- autoload :Concerns , 'arkaan/campaigns/files/concerns'
6
- autoload :Document , 'arkaan/campaigns/files/document'
7
- autoload :Permission, 'arkaan/campaigns/files/permission'
8
- end
9
- end
10
- end
@@ -1,9 +0,0 @@
1
- module Arkaan
2
- module Campaigns
3
- module Files
4
- module Concerns
5
- autoload :Nameable, 'arkaan/campaigns/files/concerns/nameable'
6
- end
7
- end
8
- end
9
- end
@@ -1,19 +0,0 @@
1
- module Arkaan
2
- module Campaigns
3
- module Files
4
- module Concerns
5
- module Nameable
6
- extend ActiveSupport::Concern
7
-
8
- included do
9
- # @!attribute [rw] filename
10
- # @return [String] the name of the file, corresponding to the AWS name.
11
- field :name, type: String
12
-
13
- validates :name, presence: {message: 'required'}
14
- end
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,64 +0,0 @@
1
- module Arkaan
2
- module Campaigns
3
- module Files
4
- # A document is any piece of data added by a user to a campaign. It can either be a direct text note, or an uploaded document for example.
5
- # @author Vincent Courtois <courtois.vincent@outlook.com>
6
- class Document
7
- include Mongoid::Document
8
- include Mongoid::Timestamps
9
- include Arkaan::Concerns::MimeTypable
10
- include Arkaan::Campaigns::Files::Concerns::Nameable
11
-
12
- # @!attribute [rw] size
13
- # @return [Integer] the size of the document in bytes.
14
- field :size, type: Integer, default: 0
15
-
16
- mime_type ['image/*', 'text/plain']
17
-
18
- # @!attribute [rw] permission
19
- # @return [Arkaan::Campaigns::Permission] the permissions granted to the different users of the campaign concerning this document.
20
- has_many :permissions, class_name: 'Arkaan::Campaigns::Files::Permission', inverse_of: :document
21
-
22
- # Custom setter for the creator of the document so that it can be used as a normal field.
23
- # @param invitation [Arkaan::Campaigns::Invitation] the invitation of the player creating this document.
24
- def creator=(invitation)
25
- if !permissions.where(invitation: invitation).exists?
26
- Arkaan::Campaigns::Files::Permission.create(enum_level: :creator, document: self, invitation: invitation)
27
- end
28
- end
29
-
30
- # Custom getter for the creator of the campaign.
31
- # @return [Arkaan::Account] the account of the player that created this document.
32
- def creator
33
- return permissions.where(enum_level: :creator).first.invitation.account
34
- end
35
-
36
- # Checks if an account is allowed to access this document, accounts must have one of the following characteristics to read a document :
37
- # - Be the creator of the document
38
- # - Be the game master of the campaign in which the document is declared
39
- # - Have been granted the permission to access the document
40
- #
41
- # @param account [Arkaan::Account] the account trying to access the document.
42
- # @return [Boolean] TRUE if this account has the right to access the document, FALSe otherwise.
43
- def is_allowed?(account)
44
- return true if campaign.creator.id == account.id
45
- return true if creator.id == account.id
46
- return true if has_permission?(account)
47
- return false
48
- end
49
-
50
- # Checks if the account has the permission to access the designated document.
51
- # @param account [Arkaan::Account] the account to check the existence of a permission for.
52
- # @return [Boolean] TRUE if the account has a permission to access this document, FALSE otherwise.
53
- def has_permission?(account)
54
- invitation = campaign.invitations.where(account: account).first
55
- return !invitation.nil? && permissions.where(invitation: invitation).exists?
56
- end
57
-
58
- def campaign
59
- permissions.first.invitation.campaign rescue nil
60
- end
61
- end
62
- end
63
- end
64
- end
@@ -1,26 +0,0 @@
1
- module Arkaan
2
- module Campaigns
3
- module Files
4
- # A file permission is the permission given by the creator of the file to another player to access it.
5
- # @author Vincent Courtois <courtois.vincent@outlook.com>
6
- class Permission
7
- include Mongoid::Document
8
- include Mongoid::Timestamps
9
- include Arkaan::Concerns::Enumerable
10
-
11
- # The status of a permission just differenciates the creator and the other players for the moment
12
- # But it will later be used to give different access rights like read/write
13
- # @!attribute [rw] status
14
- # @return [Symbol] the current level of permission for the linked user on the linked file.
15
- enum_field :level, [:creator, :read], default: :read
16
-
17
- # @!attribute [rw] invitation
18
- # @return [Arkaan::Campaigns::Invitation] the invitation of the player in the campaign where this file was uploaded.
19
- belongs_to :invitation, class_name: 'Arkaan::Campaigns::Invitation', inverse_of: :permissions
20
- # @!attribute [rw] file
21
- # @return [Arkaan::Campaigns::Files::Document] the file on which the permissions are granted.
22
- belongs_to :document, class_name: 'Arkaan::Campaigns::Files::Document', inverse_of: :permissions
23
- end
24
- end
25
- end
26
- end