web47core 3.2.4 → 3.2.6

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: 4073ad36d057fd13cef3e6a94201443fb307967f48cbb29d5b137e52cc4b2915
4
- data.tar.gz: af4cd7b6a16251b32bf9052f18f24aacd1d80f923e7856820c6b15cb233726e6
3
+ metadata.gz: '09bd1177ff541dc974ea27c1208e06c43be1056962384b6250e52bfc2938fd6b'
4
+ data.tar.gz: 119fcf27352d87d96ef84328e24cc7adbf6cbe1e18363a2535826e5bb5c3a90d
5
5
  SHA512:
6
- metadata.gz: 5136d0590694d806b17b4ca884d83f73b8bc11ca2abdab30007f03f302f18ef3139d5789678b1af4f57dfd251de103416e96dc76c474ac657449f88810904437
7
- data.tar.gz: '059a6cf4fd063dc75b9cae27d535c6e133b966c3a96d16225fac083fb3c6d6503e5601d6e833d3728367cb2c38c2700842617a6c7dbc246f9eca358fe79054ae'
6
+ metadata.gz: 38926fb70d61e60d8633fcd89e58d2a5e66dca47ac9245eeb31c3de8264917e547d13740819df61850805a06631b69b22929643310feb0a9458fbd893881d9cf
7
+ data.tar.gz: 061e7c166c012d860b4c66521c2d178943197a1384c0f195ea331d13087b0a0801def262f28b85083c149388368d273cf04adf303632dcc8913b98c798ff036c
@@ -37,16 +37,22 @@ class CommandJob
37
37
  #
38
38
  validates :state, inclusion: { in: ALL_STATES }
39
39
 
40
- #
41
- # Who started this job
42
- #
40
+ # @abstract duration for the job
41
+ # @return Integer - How long this job took in milliseconds
42
+ def duration
43
+ finished_at - started_at
44
+ rescue StandardError
45
+ 0
46
+ end
47
+
48
+ # @abstract Who started this job
49
+ # @return String - Who started this job if present, otherwise `System`
43
50
  def display_started_by
44
51
  started_by.present? ? started_by.name : 'System'
45
52
  end
46
53
 
47
- #
48
- # Default time to keep a job before auto archiving it
49
- #
54
+ # @abstract Default time to keep a job before auto archiving it
55
+ # @return Integer - TTL for this job
50
56
  def ttl
51
57
  30
52
58
  end
@@ -0,0 +1,93 @@
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # A module that allows for trash/recycling of an object
5
+ # it will be deleted in the app, but remain in the database until permanently deleted
6
+ #
7
+ module ArchiveAble
8
+ extend ActiveSupport::Concern
9
+
10
+ def self.included(base)
11
+ base.class_eval do
12
+ # Fields
13
+ field :archived, type: Mongoid::Boolean, default: false
14
+ field :archived_at, type: Time
15
+ field :archived_by_name, type: String
16
+ field :archived_by_email, type: String
17
+ field :restored_at, type: Time
18
+ field :restored_by_name, type: String
19
+ field :restored_by_email, type: String
20
+ # Relationships
21
+ belongs_to :archived_by, polymorphic: true, optional: true, inverse_of: nil
22
+ belongs_to :restored_by, polymorphic: true, optional: true, inverse_of: nil
23
+ end
24
+ end
25
+
26
+ # @abstract Display who archived this object
27
+ # @return String
28
+ def display_archived_by
29
+ if archived_by.present?
30
+ archived_by.display_name
31
+ elsif archived_by_email.present?
32
+ "#{archived_by_name} (#{archived_by_email})"
33
+ else
34
+ archived_by_name
35
+ end
36
+ end
37
+
38
+ # @abstract Display who restored this object
39
+ # @return String
40
+ def display_restored_by
41
+ if restored_by.present?
42
+ restored_by.display_name
43
+ elsif restored_by_email.present?
44
+ "#{restored_by_name} (#{restored_by_email})"
45
+ else
46
+ restored_by_name
47
+ end
48
+ end
49
+
50
+ def unarchived?
51
+ !archived?
52
+ end
53
+
54
+ # @abstract Archive the object
55
+ # @param [Member|User] actor - the thing performing the action
56
+ def archive(actor)
57
+ params = if actor.is_a? Cron::Job
58
+ { archived: true,
59
+ archived_at: Time.now.utc,
60
+ archived_by_name: "System - #{actor.class.name}" }
61
+ else
62
+ { archived: true,
63
+ archived_by: actor,
64
+ archived_at: Time.now.utc,
65
+ archived_by_name: actor.name,
66
+ archived_by_email: actor.email }
67
+ end
68
+ params[:name] = "#{name}-(archived at #{Time.now.utc})" if respond_to?(:name=)
69
+ update params
70
+ end
71
+
72
+ # @abstract recycle the object
73
+ # @param [Member|User] actor - the actor performing the action
74
+ def restore(actor)
75
+ params = { archived: false,
76
+ restored_by: actor,
77
+ restored_at: Time.now.utc,
78
+ restored_by_name: actor.name,
79
+ restored_by_email: actor.email }
80
+ params[:name] = name.split('-(archived at').first if respond_to?(:name=)
81
+ update params
82
+ end
83
+
84
+ def days_to_deletion
85
+ archived? ? ((archived_at + retention_days.days - Time.now.utc) / 86_400).to_i : 0
86
+ rescue StandardError
87
+ archived? ? retention_days : 0
88
+ end
89
+
90
+ def retention_days
91
+ 30
92
+ end
93
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Web47core
4
- VERSION = '3.2.4'
4
+ VERSION = '3.2.6'
5
5
  end
data/lib/web47core.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'web47core/config'
2
2
  require 'app/models/concerns/app47_logger'
3
3
  require 'app/models/concerns/api_tokenable'
4
+ require 'app/models/concerns/archive_able'
4
5
  require 'app/models/concerns/aws_configuration'
5
6
  require 'app/models/concerns/core_system_configuration'
6
7
  require 'app/models/concerns/core_account'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: web47core
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.4
4
+ version: 3.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Schroeder
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-11-20 00:00:00.000000000 Z
11
+ date: 2024-12-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -164,20 +164,6 @@ dependencies:
164
164
  - - "~>"
165
165
  - !ruby/object:Gem::Version
166
166
  version: '9.0'
167
- - !ruby/object:Gem::Dependency
168
- name: rails
169
- requirement: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - "~>"
172
- - !ruby/object:Gem::Version
173
- version: 7.2.2
174
- type: :runtime
175
- prerelease: false
176
- version_requirements: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - "~>"
179
- - !ruby/object:Gem::Version
180
- version: 7.2.2
181
167
  - !ruby/object:Gem::Dependency
182
168
  name: railties
183
169
  requirement: !ruby/object:Gem::Requirement
@@ -234,20 +220,6 @@ dependencies:
234
220
  - - ">="
235
221
  - !ruby/object:Gem::Version
236
222
  version: '0'
237
- - !ruby/object:Gem::Dependency
238
- name: sass-rails
239
- requirement: !ruby/object:Gem::Requirement
240
- requirements:
241
- - - ">="
242
- - !ruby/object:Gem::Version
243
- version: '0'
244
- type: :runtime
245
- prerelease: false
246
- version_requirements: !ruby/object:Gem::Requirement
247
- requirements:
248
- - - ">="
249
- - !ruby/object:Gem::Version
250
- version: '0'
251
223
  - !ruby/object:Gem::Dependency
252
224
  name: twilio-ruby
253
225
  requirement: !ruby/object:Gem::Requirement
@@ -444,6 +416,34 @@ dependencies:
444
416
  - - ">="
445
417
  - !ruby/object:Gem::Version
446
418
  version: '0'
419
+ - !ruby/object:Gem::Dependency
420
+ name: rails
421
+ requirement: !ruby/object:Gem::Requirement
422
+ requirements:
423
+ - - "~>"
424
+ - !ruby/object:Gem::Version
425
+ version: 7.2.2
426
+ type: :development
427
+ prerelease: false
428
+ version_requirements: !ruby/object:Gem::Requirement
429
+ requirements:
430
+ - - "~>"
431
+ - !ruby/object:Gem::Version
432
+ version: 7.2.2
433
+ - !ruby/object:Gem::Dependency
434
+ name: sass-rails
435
+ requirement: !ruby/object:Gem::Requirement
436
+ requirements:
437
+ - - ">="
438
+ - !ruby/object:Gem::Version
439
+ version: '0'
440
+ type: :development
441
+ prerelease: false
442
+ version_requirements: !ruby/object:Gem::Requirement
443
+ requirements:
444
+ - - ">="
445
+ - !ruby/object:Gem::Version
446
+ version: '0'
447
447
  - !ruby/object:Gem::Dependency
448
448
  name: shoulda
449
449
  requirement: !ruby/object:Gem::Requirement
@@ -645,6 +645,7 @@ files:
645
645
  - lib/app/models/command_job_log.rb
646
646
  - lib/app/models/concerns/api_tokenable.rb
647
647
  - lib/app/models/concerns/app47_logger.rb
648
+ - lib/app/models/concerns/archive_able.rb
648
649
  - lib/app/models/concerns/aws_configuration.rb
649
650
  - lib/app/models/concerns/cdn_url.rb
650
651
  - lib/app/models/concerns/cipher_able.rb