loggable_activity 0.1.58 → 0.2.1

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: 3443b88743e80e04335aeb6b192af90e69d6e79c22906784d8fde0efc303371e
4
- data.tar.gz: 010db4535422917b8c7595e60d61e15a309c70456a95dfc4809bc6bcd382119e
3
+ metadata.gz: c639f2566d6a3dd820a7657b9b8bb398e5a861347ae1bc7d7474724c6c344b4c
4
+ data.tar.gz: 8551b4aab8f630be997b6af7b8372d7efd84221824bbacb25bb6c444f6c83978
5
5
  SHA512:
6
- metadata.gz: 503bc1adc73fb22312c8ae21b2a68dfd12e4f452687bd0b3be947a73a2a5aa06e4c643461b5c6f768915cd09c00117ec5020028bb91c30bcc9e618226d8efeda
7
- data.tar.gz: b6f50f7877b2164f8b58267c87a1a2b0ede19f85d9c05a9cd32cb7b1188405f738704fd0e17907ed521f51db0893a40a4102e48e6b8b998ecd422143cf1f546c
6
+ metadata.gz: 03422fe2e2d154f894da7a0eab5fac78f1048b6e6d3d4addbf1fa0bd66d9a674913ca666a4a4e743cbaf95ff5edbfb8711641596330b370d5d29d3e0922f4af6
7
+ data.tar.gz: '08de4b66e4aba0d210be64f83eb78b51fcb6c351d3340e9f1dfba334194d5c6a705daeefe6f66aae8a7cc8409a94b1ba4ec33d222a957e549b0811629f6ebfcb'
@@ -0,0 +1,26 @@
1
+ {
2
+ "commands": [
3
+ {
4
+ "command": "terminals.runTerminalByName",
5
+ "arguments": [
6
+ "Test"
7
+ ],
8
+ "text": "$(run)",
9
+ "alignment": "right",
10
+ "priority": 300,
11
+ "tooltip": "Run test for current line",
12
+ "filterFileRegex": ".*_spec\\.rb"
13
+ },
14
+ {
15
+ "command": "terminals.runTerminalByName",
16
+ "arguments": [
17
+ "Test file"
18
+ ],
19
+ "text": "$(run-all)",
20
+ "alignment": "right",
21
+ "priority": 290,
22
+ "tooltip": "Run test for current file",
23
+ "filterFileRegex": ".*_spec\\.rb"
24
+ }
25
+ ]
26
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "autorun": false,
3
+ "terminals": [
4
+ {
5
+ "name": "Test",
6
+ "focus": true,
7
+ "execute": true,
8
+ "onlySingle": true,
9
+ "icon": "run",
10
+ "commands": [
11
+ "dir=[file] && test_path=${${(s:/spec/:)dir}[1]} && file=\"spec/\"${${(s:/spec/:)dir}[2]}",
12
+ "echo \"$dir\\n$test_path\\n$file:[lineNumber]\"",
13
+ "cd $test_path",
14
+ "rspec $file:[lineNumber]"
15
+ ]
16
+ },
17
+ {
18
+ "name": "Test file",
19
+ "focus": true,
20
+ "execute": true,
21
+ "onlySingle": true,
22
+ "icon": "run-all",
23
+ "commands": [
24
+ "dir=[file] && test_path=${${(s:/spec/:)dir}[1]} && file=\"spec/\"${${(s:/spec/:)dir}[2]}",
25
+ "echo \"$dir\\n$test_path\\n$file\"",
26
+ "cd $test_path",
27
+ "rspec $file"
28
+ ]
29
+ }
30
+ ]
31
+ }
data/CHANGELOG.md CHANGED
@@ -1,4 +1,7 @@
1
1
 
2
+ ## [0.2.0] - 2024-07-03
3
+ - Keys kan be kept until LoggableActivity::Sanitizer.run is called
4
+
2
5
  ## [0.1.58] - 2024-03-21
3
6
  ### Breaking change
4
7
  - All presentations generators are removed
@@ -30,6 +30,7 @@ class CreateLoggableActivities < ActiveRecord::Migration[7.1]
30
30
  create_table :loggable_encryption_keys do |t|
31
31
  t.references :record, polymorphic: true, null: true, index: true
32
32
  t.string :secret_key
33
+ t.datetime :delete_at
33
34
  end
34
35
  end
35
36
  end
@@ -18,6 +18,23 @@ module LoggableActivity
18
18
  validates :action, presence: true
19
19
  validate :must_have_at_least_one_payload
20
20
 
21
+ RELATION_TYPES = {
22
+ 'primary_payload' => 'self',
23
+ 'primary_update_payload' => 'self',
24
+ 'primary_destroy_payload' => 'self',
25
+ 'has_one_payload' => 'has_one',
26
+ 'has_one_create_payload' => 'has_one',
27
+ 'has_one_update_payload' => 'has_one',
28
+ 'has_one_destroy_payload' => 'has_one',
29
+ 'has_many_payload' => 'has_many',
30
+ 'has_many_create_payload' => 'has_many',
31
+ 'has_many_destroy_payload' => 'has_many',
32
+ 'has_many_update_payload' => 'has_many',
33
+ 'belongs_to_payload' => 'belongs_to',
34
+ 'belongs_to_destroy_payload' => 'belongs_to',
35
+ 'belongs_to_update_payload' => 'belongs_to'
36
+ }
37
+
21
38
  # Returns an array of hashes, each representing an activity's attributes and its associated relations. The structure and relations to include are specified in 'config/loggable_activity.yaml'. This format is designed for UI display purposes.
22
39
  #
23
40
  # Each hash in the array contains:
@@ -48,7 +65,7 @@ module LoggableActivity
48
65
  def payloads_attrs
49
66
  ordered_payloads.map do |payload|
50
67
  {
51
- related_to_activity_as: payload.related_to_activity_as,
68
+ relation: RELATION_TYPES[payload.related_to_activity_as],
52
69
  record_type: payload.record_type,
53
70
  record_id: payload.deleted? ? nil : payload.record_id,
54
71
  attrs: payload.attrs,
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'json-schema'
4
4
  require 'json'
5
+ require 'awesome_print'
5
6
 
6
7
  module LoggableActivity
7
8
  # This class is used to load the configuration file located at config/loggable_activity.yml
@@ -85,5 +86,10 @@ module LoggableActivity
85
86
  def self.current_user_model_name
86
87
  @config_data['current_user_model_name']
87
88
  end
89
+
90
+ # Returns whatever models should be sanitized on delete.
91
+ def self.task_for_sanitization
92
+ @config_data['task_for_sanitization']
93
+ end
88
94
  end
89
95
  end
@@ -14,16 +14,28 @@ module LoggableActivity
14
14
  # belongs_to :parent_key, class_name: '::LoggableActivity::EncryptionKey', optional: true,
15
15
  # foreign_key: 'parent_key_id'
16
16
 
17
- # Marks the encryption key as deleted by updating the key to nil.
17
+ # Prepare the record for deletion
18
18
  def mark_as_deleted!
19
- update(secret_key: nil)
19
+ LoggableActivity::Configuration.task_for_sanitization ? update(delete_at: DateTime.now + 1.month) : delete
20
20
  end
21
21
 
22
- # check if the encryption key is deleted
22
+ # check if the encryption key is deleted or it is about to be deleted
23
23
  def deleted?
24
- secret_key.nil?
24
+ secret_key.nil? || delete_at.present?
25
25
  end
26
26
 
27
+ # Delete the encryption key by updating the key to nil.
28
+ def delete
29
+ update(secret_key: nil, delete_at: nil)
30
+ end
31
+
32
+ # Restores the encryption key by updating the delete_at field to nil.
33
+ def restore!
34
+ update(delete_at: nil) if delete_at && DateTime.now < delete_at
35
+ end
36
+
37
+
38
+
27
39
  # Returns an encryption key for a record by its type and ID, optionally using a parent key.
28
40
  #
29
41
  # @param record_type [String] The type of the record.
@@ -206,6 +206,7 @@ module LoggableActivity
206
206
  def base_action
207
207
  name.downcase.gsub('::', '/')
208
208
  end
209
+
209
210
  end
210
211
  end
211
212
  end
@@ -0,0 +1,9 @@
1
+ module LoggableActivity
2
+ module Sanitizer
3
+ def self.run
4
+ ::LoggableActivity::EncryptionKey.where('delete_at < ?', DateTime.now).find_in_batches do |batch|
5
+ batch.each(&:delete)
6
+ end
7
+ end
8
+ end
9
+ end
@@ -16,7 +16,8 @@ module LoggableActivity
16
16
  # Builds the primary payload.
17
17
  def build_primary_update_payload
18
18
  previous_values, current_values = saved_changes(@record)
19
- previous_values.slice(*@loggable_attrs)
19
+ previous_values = previous_values.slice(*@loggable_attrs)
20
+ current_values = current_values.slice(*@loggable_attrs)
20
21
  options = { related_to_activity_as: 'primary_update_payload', current_payload: true, data_owner: true }
21
22
 
22
23
  build_encrypted_update_payload(
@@ -122,6 +123,7 @@ module LoggableActivity
122
123
  return if previous_values == current_values
123
124
 
124
125
  previous_values = previous_values.slice(*loggable_attrs)
126
+ current_values = current_values.slice(*loggable_attrs)
125
127
  data_owner = relation_config['data_owner']
126
128
  options = { related_to_activity_as: 'has_one_update_payload', current_payload: true, data_owner: }
127
129
 
@@ -3,5 +3,5 @@
3
3
  # Version of the gem
4
4
  module LoggableActivity
5
5
  # Version
6
- VERSION = '0.1.58'
6
+ VERSION = '0.2.1'
7
7
  end
@@ -9,6 +9,7 @@ require_relative 'loggable_activity/data_owner'
9
9
  require_relative 'loggable_activity/hooks'
10
10
  require_relative 'loggable_activity/payload'
11
11
  require_relative 'loggable_activity/error'
12
+ require_relative 'loggable_activity/sanitizer'
12
13
  require_relative 'loggable_activity/services/base_payloads_builder'
13
14
  require_relative 'loggable_activity/services/payloads_builder'
14
15
  require_relative 'loggable_activity/services/update_payloads_builder'
@@ -7,10 +7,13 @@
7
7
  },
8
8
  "fetch_current_user_name_from": {
9
9
  "type": "string"
10
+ },
11
+ "task_for_sanitization": {
12
+ "type": "boolean"
10
13
  }
11
14
  },
12
15
  "patternProperties": {
13
- "^(?!current_user_model_name$|fetch_current_user_name_from$)[A-Za-z0-9_:]+$": {
16
+ "^(?!current_user_model_name$|fetch_current_user_name_from$|task_for_sanitization)[A-Za-z0-9_:]+$": {
14
17
  "type": "object",
15
18
  "properties": {
16
19
  "data_owner": {
@@ -19,6 +22,9 @@
19
22
  "fetch_record_name_from": {
20
23
  "type": "string"
21
24
  },
25
+ "task_for_sanitization": {
26
+ "type": "boolean"
27
+ },
22
28
  "loggable_attrs": {
23
29
  "type": "array",
24
30
  "items": {
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: loggable_activity
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.58
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - "Max \nGroenlund"
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-03-21 00:00:00.000000000 Z
11
+ date: 2024-06-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -92,6 +92,20 @@ dependencies:
92
92
  - - ">="
93
93
  - !ruby/object:Gem::Version
94
94
  version: 6.1.1
95
+ - !ruby/object:Gem::Dependency
96
+ name: rspec-mocks
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: '3.13'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - "~>"
107
+ - !ruby/object:Gem::Version
108
+ version: '3.13'
95
109
  - !ruby/object:Gem::Dependency
96
110
  name: sqlite3
97
111
  requirement: !ruby/object:Gem::Requirement
@@ -106,6 +120,26 @@ dependencies:
106
120
  - - "~>"
107
121
  - !ruby/object:Gem::Version
108
122
  version: 1.4.2
123
+ - !ruby/object:Gem::Dependency
124
+ name: awesome_print
125
+ requirement: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - "~>"
128
+ - !ruby/object:Gem::Version
129
+ version: '1.9'
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: 1.9.2
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "~>"
138
+ - !ruby/object:Gem::Version
139
+ version: '1.9'
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: 1.9.2
109
143
  - !ruby/object:Gem::Dependency
110
144
  name: factory_bot
111
145
  requirement: !ruby/object:Gem::Requirement
@@ -164,6 +198,8 @@ files:
164
198
  - ".rspec"
165
199
  - ".rspec_status"
166
200
  - ".rubocop.yml"
201
+ - ".vscode/commands.json"
202
+ - ".vscode/terminals.json"
167
203
  - CHANGELOG.md
168
204
  - CODE_OF_CONDUCT.md
169
205
  - CONSIDERTIONS.md
@@ -254,6 +290,7 @@ files:
254
290
  - lib/loggable_activity/error.rb
255
291
  - lib/loggable_activity/hooks.rb
256
292
  - lib/loggable_activity/payload.rb
293
+ - lib/loggable_activity/sanitizer.rb
257
294
  - lib/loggable_activity/services/base_payloads_builder.rb
258
295
  - lib/loggable_activity/services/destroy_payloads_builder.rb
259
296
  - lib/loggable_activity/services/payloads_builder.rb
@@ -286,7 +323,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
286
323
  - !ruby/object:Gem::Version
287
324
  version: '0'
288
325
  requirements: []
289
- rubygems_version: 3.5.6
326
+ rubygems_version: 3.5.7
290
327
  signing_key:
291
328
  specification_version: 4
292
329
  summary: Activity Logger with relations, prepared for GDPR Compliance and .