arkaan 2.6.0 → 2.7.4

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: a4990a4abb8ed39b023c47fed7560e0cad8aea739b74ed3a849ede6cf903f655
4
- data.tar.gz: c83e4c79e96321d68b2a95774d7203a649850c27883b4bd0aa2f758c9d7bc9ea
3
+ metadata.gz: e8f25bc056ed41bf018b590375a9feb4dbd06a8847acb85a186cfd5f8a2e3efc
4
+ data.tar.gz: '068890dbe12597fdd1cd7fae6be931492481ef3c851ade44c6f4f019691a1f61'
5
5
  SHA512:
6
- metadata.gz: 511fac191930fd795fc4f3961a249ef44159b0f21680f3a009efdd64b3e80c60a2de1046e938b73ae2eb6889a61e8355889367b6cb868ca2eb4f97eedd730c17
7
- data.tar.gz: 72b3aa7b65f4f2bc142c5cab8c4859ca569e57f978d261c50c20c7495724dadbb33f554a9eaf911c12b7774f9f7690bef956891d10250965383d901c748c1b35
6
+ metadata.gz: 291e88989f2e0fb4a07a1a6d9236038806af36d43c54deed06c1564a6d24636d66781fd06e3a94c2366a990d78aa80d56ab4d89ad20dc4579265f1d17ae05a7d
7
+ data.tar.gz: d584b02cfbdfab1f188a5c74d88da5d053a830218a9fa7dbc941c0610ccacef0a16081d99ebadcbbe48a0442030414226bd0e30de8e6de39a507a4d8567ec145
@@ -13,6 +13,7 @@ module Arkaan
13
13
  autoload :Chatroom , 'arkaan/chatroom'
14
14
  autoload :Chatrooms , 'arkaan/chatrooms'
15
15
  autoload :Concerns , 'arkaan/concerns'
16
+ autoload :Event , 'arkaan/event'
16
17
  autoload :Factories , 'arkaan/factories'
17
18
  autoload :Files , 'arkaan/files'
18
19
  autoload :Monitoring , 'arkaan/monitoring'
@@ -51,14 +51,18 @@ module Arkaan
51
51
  # @param account [Arkaan::Account] the account of the creator for this campaign.
52
52
  def creator=(account)
53
53
  if !invitations.where(account: account).exists?
54
- Arkaan::Campaigns::Invitation.create(campaign: self, account: account, enum_status: :creator)
54
+ invitation = Arkaan::Campaigns::Invitation.create(
55
+ campaign: self,
56
+ account: account,
57
+ status: :creator
58
+ )
55
59
  end
56
60
  end
57
61
 
58
62
  # Getter for the creator account of this campaign.
59
63
  # @return [Arkaan::Account] the account of the player creating this campaign.
60
64
  def creator
61
- return invitations.where(enum_status: :creator).first.account
65
+ invitations.to_a.find(&:status_creator?).account
62
66
  end
63
67
 
64
68
  # Adds an error message if the account creating this campaign already has a campaign with the very same name.
@@ -83,7 +87,9 @@ module Arkaan
83
87
 
84
88
  # @return [Array<Arkaan::Campaigns::Invitation>] the players in this campaign.
85
89
  def players
86
- invitations.where(enum_status: :accepted)
90
+ invitations.to_a.select do |invitation|
91
+ [:creator, :accepted].include? invitation.enum_status
92
+ end
87
93
  end
88
94
 
89
95
  # @return [Integer] the number of players in this campaign.
@@ -1,15 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Arkaan
2
4
  module Campaigns
3
- # An invitation is the linked between a player and a campaign, accepted or not.
5
+ # An invitation is the linked between a player and a campaign.
6
+ # It keeps the history of the interaction between the player and the campaign.
7
+ #
4
8
  # @author Vincent Courtois <courtois.vincent@outlook.com>
5
9
  class Invitation
6
10
  include Mongoid::Document
7
11
  include Mongoid::Timestamps
8
12
  include Arkaan::Concerns::Enumerable
9
-
10
- # @!attribute [rw] status
11
- # @return [Symbol] the current status of the invitation.
12
- enum_field :status, [:accepted, :blocked, :expelled, :ignored, :left, :pending, :refused, :request, :creator], default: :pending
13
+ include Arkaan::Concerns::Historizable
13
14
 
14
15
  # @!attribute [rw] account
15
16
  # @return [Arkaan::Account] the account the invitation has been issued to.
@@ -17,6 +18,12 @@ module Arkaan
17
18
  # @!attribute [rw] campaign
18
19
  # @return [Arkaan::Campaign] the campaign the invitation has been made in.
19
20
  belongs_to :campaign, class_name: 'Arkaan::Campaign', inverse_of: :invitations
21
+
22
+ # @!attribute [rw] status
23
+ # @return [Symbol] the current status of the invitation.
24
+ historize enum_field :status,
25
+ [:pending, :request, :accepted, :refused, :expelled, :left, :master, :creator],
26
+ default: :pending
20
27
  end
21
28
  end
22
- end
29
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Arkaan
2
4
  module Campaigns
3
5
  # A campaign tag is a string describing a characteristic of the campaign it's in.
@@ -13,9 +15,7 @@ module Arkaan
13
15
  # @return [Integer] the number of campaigns this tag is in, avoiding a join.
14
16
  field :count, type: Integer, default: 1
15
17
 
16
- validates :content,
17
- presence: {message: 'required'},
18
- uniqueness: {message: 'uniq'}
18
+ validates :content, presence: { message: 'required' }, uniqueness: { message: 'uniq' }
19
19
  end
20
20
  end
21
- end
21
+ end
@@ -5,6 +5,7 @@ module Arkaan
5
5
  autoload :Activable , 'arkaan/concerns/activable'
6
6
  autoload :Diagnosticable, 'arkaan/concerns/diagnosticable'
7
7
  autoload :Enumerable , 'arkaan/concerns/enumerable'
8
+ autoload :Historizable , 'arkaan/concerns/historizable'
8
9
  autoload :MimeTypable , 'arkaan/concerns/mime_typable'
9
10
  autoload :Premiumable , 'arkaan/concerns/premiumable'
10
11
  autoload :Sluggable , 'arkaan/concerns/sluggable'
@@ -14,7 +14,7 @@ module Arkaan
14
14
  # @param values [Array<Symbol>] the possible values of the enumerated field.
15
15
  # @param options [Hash<Symbol, Any>] the possible options for the field.
16
16
  def enum_field(field_name, values, options = {})
17
- field :"enum_#{field_name}", type: Symbol, default: options[:default]
17
+ returned = field :"enum_#{field_name}", type: Symbol, default: options[:default]
18
18
 
19
19
  validates :"enum_#{field_name}", inclusion: {in: values.map(&:to_sym), message: 'inclusion'}
20
20
 
@@ -37,6 +37,10 @@ module Arkaan
37
37
  self["enum_#{field_name}"] == value
38
38
  end
39
39
  end
40
+
41
+ # This is to make enumerations historizable by
42
+ # returning the field object created by Mongoid.
43
+ returned
40
44
  end
41
45
  end
42
46
  end
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Arkaan
4
+ module Concerns
5
+ # This module is what I call "a beautiful piece of Ruby engineering"
6
+ # It takes any mongoid field that you may have declared, and historizes
7
+ # it in a dedicated relation if this relation does not already exists.
8
+ #
9
+ # What it does exactly :
10
+ # - Creates the :history relation if it does not already exists.
11
+ # - Creates a method to check for changes of a specific attribute.
12
+ # - Check for changes at initialization to insert the first value.
13
+ # - Check for changes at update/save to store the history.
14
+ #
15
+ # @author Vincent Courtois <courtois.vincent@outlook.com>
16
+ module Historizable
17
+ extend ActiveSupport::Concern
18
+
19
+ # Adds an entry in the history table for the given field.
20
+ # It checks several things to make the history entry valid :
21
+ # - the new value is different from the old value
22
+ # - the old value is identical to the last recorded new value.
23
+ #
24
+ # @param field [String] the name of the field to historize
25
+ # @param from [Any] the old value before update
26
+ # @param to [Any] the new value after update.
27
+ def add_history(field:, from:, to:)
28
+ return if from == to
29
+ return if !history.empty? && history.order_by(:created_at.desc).first.to != from
30
+
31
+ event = Arkaan::Event.create(field: field, from: from, to: to, document: self)
32
+ event.save
33
+ end
34
+
35
+ # Submodule holding all the static methods add to the current subclass.
36
+ # @author Vincent Courtois <courtois.vincent@outlook.com>
37
+ module ClassMethods
38
+
39
+ # Takes the Mongoid declared field and creates the callbacks
40
+ # to intercept any value change and add it to the history.
41
+ # @field field [Mongoid::Fields::Standard] the Mongoid field to historize.
42
+ def historize(field)
43
+
44
+ unless relations.key?('history')
45
+ embeds_many :history, class_name: 'Arkaan::Event'
46
+ end
47
+
48
+ after_initialize do |doc|
49
+ add_history(field: field.name, from: nil, to: doc[field.name])
50
+ end
51
+
52
+ after_save do |doc|
53
+ if doc.changed_attributes.key?(field.name)
54
+ from = doc.changed_attributes[field.name]
55
+ add_history(field: field.name, from: from, to: doc[field.name])
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Arkaan
4
+ # An event is symbolizing a timestamped change in a model.
5
+ # It is recommended NOT to use this class directly but to use
6
+ # the Arkaan::Concerns::Historizable concern in a model.
7
+ #
8
+ # @author Vincent Courtois <courtois.vincent@outlook.com>
9
+ class Event
10
+ include Mongoid::Document
11
+ include Mongoid::Timestamps
12
+
13
+ # @!attribute [rw] field
14
+ # @return [String] the name of the field being historized
15
+ field :field, type: String
16
+ # @!attribute [rw] from
17
+ # @return [Any] the value of the field before update
18
+ field :from
19
+ # @!attribute [rw] to
20
+ # @return [Any] the value of the field after update
21
+ field :to
22
+
23
+ # @!attribute [rw] document
24
+ # @return [Any] the model in which the history is embedded
25
+ embedded_in :document, polymorphic: true, inverse_of: :history
26
+
27
+ validates :field, presence: { message: 'required' }
28
+ end
29
+ end
@@ -1,6 +1,7 @@
1
1
  module Arkaan
2
2
  module OAuth
3
- # An access token is the value assigned to the application to access the private data of an account.
3
+ # An access token is the value assigned to the application
4
+ # to access the data the user is allowed to access.
4
5
  # @author Vincent Courtois <courtois.vincent@outlook.com>
5
6
  class AccessToken
6
7
  include Mongoid::Document
@@ -15,11 +16,17 @@ module Arkaan
15
16
 
16
17
  # @!attribute [rw] authorization
17
18
  # @return [Arkaan::OAuth::Authorization] the authorization code that issued this token to the application for this user.
18
- belongs_to :authorization, class_name: 'Arkaan::OAuth::Authorization', inverse_of: :access_token
19
+ belongs_to :authorization, class_name: 'Arkaan::OAuth::Authorization', inverse_of: :tokens
19
20
 
20
21
  validates :value,
21
22
  presence: {message: 'required'},
22
23
  uniqueness: {message: 'uniq'}
24
+
25
+ # Checks if the current date is inferior to the creation date + expiration period
26
+ # @return [Boolean] TRUE if the token is expired, FALSE otherwise.
27
+ def expired?
28
+ created_at.to_time.to_i + expiration < Time.now.to_i
29
+ end
23
30
  end
24
31
  end
25
32
  end
@@ -11,7 +11,7 @@ module Arkaan
11
11
  field :name, type: String
12
12
  # @!attribute [rw] key
13
13
  # @return [String] the unique key for the application, identifying it when requesting a token for the API.
14
- field :key, type: String, default: ->{ SecureRandom.hex }
14
+ field :application_key, type: String, default: ->{ SecureRandom.hex }
15
15
  # @!attribute [rw] premium
16
16
  # @return [Boolean] a value indicating whether the application should automatically receive a token when an account is created, or not.
17
17
  field :premium, type: Boolean, default: false
@@ -31,7 +31,7 @@ module Arkaan
31
31
  length: {minimum: 6, message: 'minlength'},
32
32
  uniqueness: {message: 'uniq'}
33
33
 
34
- validates :key,
34
+ validates :application_key,
35
35
  presence: {message: 'required'},
36
36
  uniqueness: {message: 'uniq'}
37
37
 
@@ -1,6 +1,9 @@
1
1
  module Arkaan
2
2
  module OAuth
3
3
  # An OAuth authorization is granted by a user to an application to access its personal data.
4
+ # The application then transforms it into an access token to be able to send it with
5
+ # further requests, so that we know the user has authorized the application to access its data.
6
+ #
4
7
  # @author Vincent Courtois <courtois.vincent@outlook.com>
5
8
  class Authorization
6
9
  include Mongoid::Document
@@ -18,7 +21,7 @@ module Arkaan
18
21
  belongs_to :application, class_name: 'Arkaan::OAuth::Application', inverse_of: :authorizations
19
22
  # @!attribute [rw] token
20
23
  # @return [Arkaan::OAuth::AccessToken] the access token used further in the application process to access private data of the account.
21
- has_one :token, class_name: 'Arkaan::OAuth::AccessToken', inverse_of: :authorization
24
+ has_many :tokens, class_name: 'Arkaan::OAuth::AccessToken', inverse_of: :authorization
22
25
 
23
26
  validates :code,
24
27
  presence: {message: 'required'},
@@ -1,3 +1,3 @@
1
1
  module Arkaan
2
- VERSION = '2.6.0'
2
+ VERSION = '2.7.2'
3
3
  end
metadata CHANGED
@@ -1,239 +1,309 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arkaan
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.0
4
+ version: 2.7.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vincent Courtois
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-24 00:00:00.000000000 Z
11
+ date: 2020-10-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rspec
14
+ name: database_cleaner
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 3.6.0
19
+ version: 1.6.1
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 3.6.0
26
+ version: 1.6.1
27
27
  - !ruby/object:Gem::Dependency
28
- name: rspec-json_expectations
28
+ name: factory_bot
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 2.1.0
33
+ version: 6.1.0
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 2.1.0
40
+ version: 6.1.0
41
41
  - !ruby/object:Gem::Dependency
42
- name: rack-test
42
+ name: factory_girl
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - '='
46
46
  - !ruby/object:Gem::Version
47
- version: 0.7.0
47
+ version: 4.8.1
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - '='
53
53
  - !ruby/object:Gem::Version
54
- version: 0.7.0
54
+ version: 4.8.1
55
55
  - !ruby/object:Gem::Dependency
56
- name: factory_girl
56
+ name: faker
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - '='
60
60
  - !ruby/object:Gem::Version
61
- version: 4.8.1
61
+ version: 2.13.0
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - '='
67
67
  - !ruby/object:Gem::Version
68
- version: 4.8.1
68
+ version: 2.13.0
69
69
  - !ruby/object:Gem::Dependency
70
- name: factory_bot
70
+ name: gems
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - '='
74
74
  - !ruby/object:Gem::Version
75
- version: 5.1.1
75
+ version: 1.2.0
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - '='
81
81
  - !ruby/object:Gem::Version
82
- version: 5.1.1
82
+ version: 1.2.0
83
83
  - !ruby/object:Gem::Dependency
84
- name: database_cleaner
84
+ name: gitlab
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - '='
88
88
  - !ruby/object:Gem::Version
89
- version: 1.6.1
89
+ version: 4.16.1
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - '='
95
95
  - !ruby/object:Gem::Version
96
- version: 1.6.1
96
+ version: 4.16.1
97
97
  - !ruby/object:Gem::Dependency
98
- name: simplecov
98
+ name: pry
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - '='
102
102
  - !ruby/object:Gem::Version
103
- version: 0.15.1
103
+ version: 0.13.1
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - '='
109
109
  - !ruby/object:Gem::Version
110
- version: 0.15.1
110
+ version: 0.13.1
111
111
  - !ruby/object:Gem::Dependency
112
- name: yard
112
+ name: rack
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - '='
116
116
  - !ruby/object:Gem::Version
117
- version: 0.9.20
117
+ version: 2.2.3
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - '='
123
123
  - !ruby/object:Gem::Version
124
- version: 0.9.20
124
+ version: 2.2.3
125
125
  - !ruby/object:Gem::Dependency
126
- name: pry
126
+ name: rack-test
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - '='
130
130
  - !ruby/object:Gem::Version
131
- version: 0.11.1
131
+ version: 1.1.0
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - '='
137
137
  - !ruby/object:Gem::Version
138
- version: 0.11.1
138
+ version: 1.1.0
139
139
  - !ruby/object:Gem::Dependency
140
- name: rack
140
+ name: rspec
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
143
  - - '='
144
144
  - !ruby/object:Gem::Version
145
- version: 2.0.8
145
+ version: 3.9.0
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - '='
151
151
  - !ruby/object:Gem::Version
152
- version: 2.0.8
152
+ version: 3.9.0
153
153
  - !ruby/object:Gem::Dependency
154
- name: faker
154
+ name: rspec-json_expectations
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '='
158
+ - !ruby/object:Gem::Version
159
+ version: 2.1.0
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '='
165
+ - !ruby/object:Gem::Version
166
+ version: 2.1.0
167
+ - !ruby/object:Gem::Dependency
168
+ name: rspec_junit_formatter
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - '='
172
+ - !ruby/object:Gem::Version
173
+ version: 0.4.1
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - '='
179
+ - !ruby/object:Gem::Version
180
+ version: 0.4.1
181
+ - !ruby/object:Gem::Dependency
182
+ name: rubocop
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - '='
186
+ - !ruby/object:Gem::Version
187
+ version: 0.90.0
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - '='
193
+ - !ruby/object:Gem::Version
194
+ version: 0.90.0
195
+ - !ruby/object:Gem::Dependency
196
+ name: semantic
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - '='
200
+ - !ruby/object:Gem::Version
201
+ version: 1.6.1
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - '='
207
+ - !ruby/object:Gem::Version
208
+ version: 1.6.1
209
+ - !ruby/object:Gem::Dependency
210
+ name: simplecov
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - '='
214
+ - !ruby/object:Gem::Version
215
+ version: 0.19.0
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - '='
221
+ - !ruby/object:Gem::Version
222
+ version: 0.19.0
223
+ - !ruby/object:Gem::Dependency
224
+ name: yard
155
225
  requirement: !ruby/object:Gem::Requirement
156
226
  requirements:
157
227
  - - '='
158
228
  - !ruby/object:Gem::Version
159
- version: 2.10.0
229
+ version: 0.9.25
160
230
  type: :development
161
231
  prerelease: false
162
232
  version_requirements: !ruby/object:Gem::Requirement
163
233
  requirements:
164
234
  - - '='
165
235
  - !ruby/object:Gem::Version
166
- version: 2.10.0
236
+ version: 0.9.25
167
237
  - !ruby/object:Gem::Dependency
168
238
  name: mongoid
169
239
  requirement: !ruby/object:Gem::Requirement
170
240
  requirements:
171
241
  - - '='
172
242
  - !ruby/object:Gem::Version
173
- version: 7.0.1
243
+ version: 7.1.0
174
244
  type: :runtime
175
245
  prerelease: false
176
246
  version_requirements: !ruby/object:Gem::Requirement
177
247
  requirements:
178
248
  - - '='
179
249
  - !ruby/object:Gem::Version
180
- version: 7.0.1
250
+ version: 7.1.0
181
251
  - !ruby/object:Gem::Dependency
182
252
  name: activemodel
183
253
  requirement: !ruby/object:Gem::Requirement
184
254
  requirements:
185
255
  - - '='
186
256
  - !ruby/object:Gem::Version
187
- version: 5.2.3
257
+ version: 6.0.3.2
188
258
  type: :runtime
189
259
  prerelease: false
190
260
  version_requirements: !ruby/object:Gem::Requirement
191
261
  requirements:
192
262
  - - '='
193
263
  - !ruby/object:Gem::Version
194
- version: 5.2.3
264
+ version: 6.0.3.2
195
265
  - !ruby/object:Gem::Dependency
196
266
  name: activesupport
197
267
  requirement: !ruby/object:Gem::Requirement
198
268
  requirements:
199
269
  - - '='
200
270
  - !ruby/object:Gem::Version
201
- version: 5.2.3
271
+ version: 6.0.3.2
202
272
  type: :runtime
203
273
  prerelease: false
204
274
  version_requirements: !ruby/object:Gem::Requirement
205
275
  requirements:
206
276
  - - '='
207
277
  - !ruby/object:Gem::Version
208
- version: 5.2.3
278
+ version: 6.0.3.2
209
279
  - !ruby/object:Gem::Dependency
210
280
  name: bcrypt
211
281
  requirement: !ruby/object:Gem::Requirement
212
282
  requirements:
213
283
  - - '='
214
284
  - !ruby/object:Gem::Version
215
- version: 3.1.11
285
+ version: 3.1.13
216
286
  type: :runtime
217
287
  prerelease: false
218
288
  version_requirements: !ruby/object:Gem::Requirement
219
289
  requirements:
220
290
  - - '='
221
291
  - !ruby/object:Gem::Version
222
- version: 3.1.11
292
+ version: 3.1.13
223
293
  - !ruby/object:Gem::Dependency
224
294
  name: dotenv
225
295
  requirement: !ruby/object:Gem::Requirement
226
296
  requirements:
227
297
  - - '='
228
298
  - !ruby/object:Gem::Version
229
- version: 2.7.2
299
+ version: 2.7.6
230
300
  type: :runtime
231
301
  prerelease: false
232
302
  version_requirements: !ruby/object:Gem::Requirement
233
303
  requirements:
234
304
  - - '='
235
305
  - !ruby/object:Gem::Version
236
- version: 2.7.2
306
+ version: 2.7.6
237
307
  description: This gem holds the model layer for my table-top RPG games application.
238
308
  email: courtois.vincent@outlook.com
239
309
  executables: []
@@ -258,6 +328,7 @@ files:
258
328
  - lib/arkaan/concerns/activable.rb
259
329
  - lib/arkaan/concerns/diagnosticable.rb
260
330
  - lib/arkaan/concerns/enumerable.rb
331
+ - lib/arkaan/concerns/historizable.rb
261
332
  - lib/arkaan/concerns/mime_typable.rb
262
333
  - lib/arkaan/concerns/premiumable.rb
263
334
  - lib/arkaan/concerns/sluggable.rb
@@ -265,6 +336,7 @@ files:
265
336
  - lib/arkaan/decorators/errors.rb
266
337
  - lib/arkaan/decorators/errors/env_variable_missing.rb
267
338
  - lib/arkaan/decorators/gateway.rb
339
+ - lib/arkaan/event.rb
268
340
  - lib/arkaan/factories.rb
269
341
  - lib/arkaan/factories/errors.rb
270
342
  - lib/arkaan/factories/errors/gateway_not_found.rb
@@ -305,7 +377,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
305
377
  - !ruby/object:Gem::Version
306
378
  version: '0'
307
379
  requirements: []
308
- rubygems_version: 3.1.2
380
+ rubygems_version: 3.1.4
309
381
  signing_key:
310
382
  specification_version: 4
311
383
  summary: The model layer for my table-RPG application