loggable_activity 0.1.56 → 0.1.58

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.
Files changed (70) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +10 -1
  3. data/CHANGELOG.md +9 -0
  4. data/GETTING-STARTED.md +8 -47
  5. data/PAYLOAD_EXAMPLE.md +63 -0
  6. data/docs/LoggableActivity/Activity.html +92 -241
  7. data/docs/LoggableActivity/Configuration.html +162 -15
  8. data/docs/LoggableActivity/ConfigurationError.html +148 -0
  9. data/docs/LoggableActivity/DataOwner.html +138 -0
  10. data/docs/LoggableActivity/Encryption.html +18 -14
  11. data/docs/LoggableActivity/EncryptionError.html +47 -1
  12. data/docs/LoggableActivity/EncryptionKey.html +54 -35
  13. data/docs/LoggableActivity/Error.html +48 -0
  14. data/docs/LoggableActivity/Hooks.html +221 -89
  15. data/docs/LoggableActivity/Payload.html +103 -27
  16. data/docs/LoggableActivity/Services/BasePayloadsBuilder.html +442 -0
  17. data/docs/LoggableActivity/Services/DestroyPayloadsBuilder.html +395 -0
  18. data/docs/LoggableActivity/Services/PayloadsBuilder.html +342 -0
  19. data/docs/LoggableActivity/Services/UpdatePayloadsBuilder.html +490 -0
  20. data/docs/LoggableActivity/Services.html +93 -0
  21. data/docs/created.rid +14 -10
  22. data/docs/index.html +10 -2
  23. data/docs/js/navigation.js.gz +0 -0
  24. data/docs/js/search_index.js +1 -1
  25. data/docs/js/search_index.js.gz +0 -0
  26. data/docs/js/searcher.js.gz +0 -0
  27. data/docs/table_of_contents.html +253 -85
  28. data/lib/generators/loggable_activity/install_generator.rb +2 -18
  29. data/lib/generators/loggable_activity/templates/binary_ids/create_loggable_activities.rb +9 -10
  30. data/lib/generators/loggable_activity/templates/create_loggable_activities.rb +16 -13
  31. data/lib/loggable_activity/activity.rb +53 -102
  32. data/lib/loggable_activity/configuration.rb +60 -3
  33. data/lib/loggable_activity/data_owner.rb +18 -0
  34. data/lib/loggable_activity/encryption.rb +14 -14
  35. data/lib/loggable_activity/encryption_key.rb +26 -25
  36. data/lib/loggable_activity/error.rb +34 -0
  37. data/lib/loggable_activity/hooks.rb +78 -43
  38. data/lib/loggable_activity/payload.rb +70 -20
  39. data/lib/loggable_activity/services/base_payloads_builder.rb +127 -0
  40. data/lib/loggable_activity/services/destroy_payloads_builder.rb +127 -0
  41. data/lib/loggable_activity/services/payloads_builder.rb +98 -0
  42. data/lib/loggable_activity/services/update_payloads_builder.rb +168 -0
  43. data/lib/loggable_activity/version.rb +1 -1
  44. data/lib/loggable_activity.rb +6 -6
  45. data/lib/schemas/config_schema.json +90 -0
  46. metadata +37 -26
  47. data/docs/LoggableActivity/PayloadsBuilder.html +0 -441
  48. data/docs/LoggableActivity/UpdatePayloadsBuilder.html +0 -424
  49. data/lib/generators/loggable_activity/install_templates_generator.rb +0 -105
  50. data/lib/generators/loggable_activity/templates/helpers/activity_helper.rb +0 -37
  51. data/lib/generators/loggable_activity/templates/helpers/router.rb +0 -52
  52. data/lib/generators/loggable_activity/templates/helpers/routes_helper.rb +0 -20
  53. data/lib/generators/loggable_activity/templates/views/loggable_activity/templates/default/_create.html.erb +0 -23
  54. data/lib/generators/loggable_activity/templates/views/loggable_activity/templates/default/_create.html.slim +0 -18
  55. data/lib/generators/loggable_activity/templates/views/loggable_activity/templates/default/_destroy.html.erb +0 -18
  56. data/lib/generators/loggable_activity/templates/views/loggable_activity/templates/default/_destroy.html.slim +0 -17
  57. data/lib/generators/loggable_activity/templates/views/loggable_activity/templates/default/_show.html.erb +0 -18
  58. data/lib/generators/loggable_activity/templates/views/loggable_activity/templates/default/_show.html.slim +0 -17
  59. data/lib/generators/loggable_activity/templates/views/loggable_activity/templates/default/_update.html.erb +0 -18
  60. data/lib/generators/loggable_activity/templates/views/loggable_activity/templates/default/_update.html.slim +0 -12
  61. data/lib/generators/loggable_activity/templates/views/loggable_activity/templates/shared/_activity_info.html.erb +0 -12
  62. data/lib/generators/loggable_activity/templates/views/loggable_activity/templates/shared/_activity_info.html.slim +0 -11
  63. data/lib/generators/loggable_activity/templates/views/loggable_activity/templates/shared/_list_attrs.html.erb +0 -8
  64. data/lib/generators/loggable_activity/templates/views/loggable_activity/templates/shared/_list_attrs.html.slim +0 -6
  65. data/lib/generators/loggable_activity/templates/views/loggable_activity/templates/shared/_update_attrs.html.erb +0 -17
  66. data/lib/generators/loggable_activity/templates/views/loggable_activity/templates/shared/_update_attrs.html.slim +0 -14
  67. data/lib/generators/loggable_activity/templates/views/loggable_activity/templates/shared/_updated_relations.html.erb +0 -23
  68. data/lib/generators/loggable_activity/templates/views/loggable_activity/templates/shared/_updated_relations.html.slim +0 -21
  69. data/lib/loggable_activity/payloads_builder.rb +0 -153
  70. data/lib/loggable_activity/update_payloads_builder.rb +0 -127
@@ -0,0 +1,98 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LoggableActivity
4
+ module Services
5
+ # This class is responsible for building payloads used in loggable activities.
6
+ class PayloadsBuilder < BasePayloadsBuilder
7
+ # Builds payloads for the loggable activity and returns an array of payload objects.
8
+ #
9
+ # Example call:
10
+ # payloads = ::LoggableActivity::Services::PayloadsBuilder.new(record, initial_payloads).build
11
+ #
12
+ # Returns an Array of ::LoggableActivity::Payload instances, each representing a payload
13
+ # for the loggable activity. For example:
14
+ # [
15
+ # #<::LoggableActivity::Payload:0x0000000109658718 @encryption_key="key1", @record=#<MockRecord:0x0000000105000000 @name="Record1">, @encrypted_record_name="Encrypted Name1", @encrypted_attrs={...}, @related_to_activity_as="primary_payload", @data_owner=true, @route="route1">,
16
+ # #<::LoggableActivity::Payload:0x0000000109658720 @encryption_key="key2", @record=#<MockRecord:0x0000000105000001 @name="Record2">, @encrypted_record_name="Encrypted Name2", @encrypted_attrs={...}, @related_to_activity_as="has_one_payload", @data_owner=true, @route="route2">
17
+ # ]
18
+ #
19
+ def build
20
+ build_primary_payload
21
+ build_relations_payloads
22
+ @payloads
23
+ end
24
+
25
+ private
26
+
27
+ # Builds the primary payload.
28
+ def build_primary_payload
29
+ options = { related_to_activity_as: 'primary_payload', current_payload: true, data_owner: true }
30
+ build_encrypted_payload(@record, options)
31
+ end
32
+
33
+ # Builds the relations payloads.
34
+ def build_relations_payloads
35
+ @relations.each do |relation_config|
36
+ build_relation_payload(relation_config)
37
+ end
38
+ end
39
+
40
+ # Builds payloads for relations definded in the configuration.
41
+ #
42
+ # @param relation_config [Hash] The configuration of the relation.
43
+ def build_relation_payload(relation_config)
44
+ relation_config.each_key do |key|
45
+ case key
46
+ when 'belongs_to'
47
+ build_belongs_to_payload(relation_config)
48
+ when 'has_one'
49
+ build_has_one_payload(relation_config)
50
+ when 'has_many'
51
+ build_has_many_payloads(relation_config)
52
+ end
53
+ end
54
+ end
55
+
56
+ # Builds payloads for has_many relations.
57
+ def build_has_many_payloads(relation_config)
58
+ relation = (relation_config['has_many']).to_s
59
+ records = @record.send(relation)
60
+ data_owner = relation_config['data_owner']
61
+ options = { related_to_activity_as: 'has_many_payload', current_payload: true, data_owner: }
62
+ records.each do |record|
63
+ record.disable_hooks = true
64
+ build_encrypted_payload(record, options)
65
+ end
66
+ end
67
+
68
+ # Builds the payload for a has_one relation.
69
+ def build_has_one_payload(relation_config)
70
+ relation = (relation_config['has_one']).to_s
71
+ record = @record.send(relation)
72
+ return if record.nil?
73
+
74
+ data_owner = relation_config['data_owner']
75
+ options =
76
+ { related_to_activity_as: 'has_one_payload', current_payload: true, data_owner: }
77
+
78
+ build_encrypted_payload(record, options)
79
+ end
80
+
81
+ def build_belongs_to_payload(relation_config)
82
+ relation = (relation_config['belongs_to']).to_s
83
+ record = @record.send(relation)
84
+ return if record.nil?
85
+
86
+ data_owner = relation_config['data_owner']
87
+
88
+ if data_owner
89
+ encryption_key = encryption_key_for_record(@record)
90
+ DataOwner.create!(record:, encryption_key:)
91
+ end
92
+ options = { related_to_activity_as: 'belongs_to_payload', current_payload: true, data_owner: }
93
+
94
+ build_encrypted_payload(record, options)
95
+ end
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,168 @@
1
+ # frozen_string_literal: true
2
+
3
+ module LoggableActivity
4
+ module Services
5
+ # This service class builds update payloads when an instance of a model is updated.
6
+ class UpdatePayloadsBuilder < BasePayloadsBuilder
7
+ # Builds payloads for a ::LoggableActivity::Activity.
8
+ def build
9
+ build_primary_update_payload
10
+ build_relations_update_payloads
11
+ @payloads
12
+ end
13
+
14
+ private
15
+
16
+ # Builds the primary payload.
17
+ def build_primary_update_payload
18
+ previous_values, current_values = saved_changes(@record)
19
+ previous_values.slice(*@loggable_attrs)
20
+ options = { related_to_activity_as: 'primary_update_payload', current_payload: true, data_owner: true }
21
+
22
+ build_encrypted_update_payload(
23
+ @record,
24
+ current_values,
25
+ previous_values,
26
+ options
27
+ )
28
+ end
29
+
30
+ # Build the payloads for the relations of the record.
31
+ # only relations included in the configuration, will be logged.
32
+ def build_relations_update_payloads
33
+ @relations.each do |relation_config|
34
+ build_relation_update_payload(relation_config)
35
+ end
36
+ end
37
+
38
+ def build_relation_update_payload(relation_config)
39
+ relation_config.each_key do |key|
40
+ case key
41
+ when 'belongs_to'
42
+ build_belongs_to_update_payload(relation_config)
43
+ when 'has_one'
44
+ build_has_one_update_payload(relation_config)
45
+ when 'has_many'
46
+ build_has_many_update_payloads(relation_config)
47
+ end
48
+ end
49
+ end
50
+
51
+ # Builds the update payload for a belongs_to relation.
52
+ def build_belongs_to_update_payload(relation_config)
53
+ relation_id = "#{relation_config['belongs_to']}_id"
54
+ model_class_name = relation_config['model']
55
+ model_class = model_class_name.constantize
56
+ data_owner = relation_config['data_owner']
57
+
58
+ model_ids = saved_changes(@record).map { |hash| hash[relation_id] }
59
+
60
+ model_ids.each_with_index do |id, index|
61
+ record = id ? model_class.find_by(id:) : nil
62
+ next unless record
63
+
64
+ options =
65
+ { related_to_activity_as: 'belongs_to_update_payload', current_payload: index == 1, data_owner: }
66
+
67
+ build_encrypted_payload(record, options)
68
+ end
69
+ end
70
+
71
+ # Builds payloads for has_many relations.
72
+ def build_has_many_update_payloads(relation_config)
73
+ relation = (relation_config['has_many']).to_s
74
+ records = @record.send(relation)
75
+ return nil if records.empty?
76
+
77
+ records.each do |record|
78
+ if record.persisted? && record.changes_to_save.any?
79
+ build_has_many_update_payload(relation_config, record)
80
+ elsif record.persisted? && record.saved_changes.any?
81
+ # "no changes to save"
82
+ else
83
+ build_has_many_create_payload(relation_config, record)
84
+ end
85
+ end
86
+ end
87
+
88
+ def build_has_many_update_payload(relation_config, record)
89
+ record.disable_hooks = true
90
+ previous_values, current_values = changes_to_save(record)
91
+ loggable_attrs = relation_config['loggable_attrs']
92
+ return if previous_values == current_values
93
+
94
+ previous_values = previous_values.slice(*loggable_attrs)
95
+ data_owner = relation_config['data_owner']
96
+ options = { related_to_activity_as: 'has_many_update_payload', current_payload: true, data_owner: }
97
+
98
+ build_encrypted_update_payload(
99
+ record,
100
+ current_values,
101
+ previous_values,
102
+ options
103
+ )
104
+ end
105
+
106
+ def build_has_many_create_payload(relation_config, record)
107
+ record.disable_hooks = true
108
+ data_owner = relation_config['data_owner']
109
+ options =
110
+ { related_to_activity_as: 'has_many_create_payload', current_payload: true, data_owner: }
111
+ build_encrypted_payload(record, options)
112
+ end
113
+
114
+ # Builds the update payload for a has_one relation.
115
+ def build_has_one_update_payload(relation_config)
116
+ relation = (relation_config['has_one']).to_s
117
+ record = @record.send(relation)
118
+ return nil if record.nil?
119
+
120
+ previous_values, current_values = changes_to_save(record)
121
+ loggable_attrs = record.class.loggable_attrs
122
+ return if previous_values == current_values
123
+
124
+ previous_values = previous_values.slice(*loggable_attrs)
125
+ data_owner = relation_config['data_owner']
126
+ options = { related_to_activity_as: 'has_one_update_payload', current_payload: true, data_owner: }
127
+
128
+ build_encrypted_update_payload(
129
+ record,
130
+ current_values,
131
+ previous_values,
132
+ options
133
+ )
134
+ end
135
+
136
+ # Returns the encrypted attributes for the update payload.
137
+ def encrypted_update_attrs(current_values, previous_values, encryption_key)
138
+ changes = []
139
+
140
+ previous_values.each do |key, from_value|
141
+ from = ::LoggableActivity::Encryption.encrypt(from_value, encryption_key)
142
+ to_value = current_values[key]
143
+ to = ::LoggableActivity::Encryption.encrypt(to_value, encryption_key)
144
+ changes << { key => { from:, to: } }
145
+ end
146
+ { changes: }
147
+ end
148
+
149
+ # Builds the encrypted update payload for a record.
150
+ def build_encrypted_update_payload(record, current_values, previous_values, options = {})
151
+ encryption_key = ::LoggableActivity::EncryptionKey.for_record(record)
152
+
153
+ encrypted_attrs = encrypted_update_attrs(
154
+ current_values,
155
+ previous_values,
156
+ encryption_key.secret_key
157
+ )
158
+
159
+ build_payload(
160
+ record,
161
+ encryption_key,
162
+ encrypted_attrs,
163
+ options
164
+ )
165
+ end
166
+ end
167
+ end
168
+ end
@@ -3,5 +3,5 @@
3
3
  # Version of the gem
4
4
  module LoggableActivity
5
5
  # Version
6
- VERSION = '0.1.56'
6
+ VERSION = '0.1.58'
7
7
  end
@@ -5,11 +5,11 @@ require_relative 'loggable_activity/activity'
5
5
  require_relative 'loggable_activity/configuration'
6
6
  require_relative 'loggable_activity/encryption'
7
7
  require_relative 'loggable_activity/encryption_key'
8
+ require_relative 'loggable_activity/data_owner'
8
9
  require_relative 'loggable_activity/hooks'
9
10
  require_relative 'loggable_activity/payload'
10
- require_relative 'loggable_activity/payloads_builder'
11
- require_relative 'loggable_activity/update_payloads_builder'
12
-
13
- module LoggableActivity
14
- class Error < StandardError; end
15
- end
11
+ require_relative 'loggable_activity/error'
12
+ require_relative 'loggable_activity/services/base_payloads_builder'
13
+ require_relative 'loggable_activity/services/payloads_builder'
14
+ require_relative 'loggable_activity/services/update_payloads_builder'
15
+ require_relative 'loggable_activity/services/destroy_payloads_builder'
@@ -0,0 +1,90 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-06/schema#",
3
+ "type": "object",
4
+ "properties": {
5
+ "current_user_model_name": {
6
+ "type": "string"
7
+ },
8
+ "fetch_current_user_name_from": {
9
+ "type": "string"
10
+ }
11
+ },
12
+ "patternProperties": {
13
+ "^(?!current_user_model_name$|fetch_current_user_name_from$)[A-Za-z0-9_:]+$": {
14
+ "type": "object",
15
+ "properties": {
16
+ "data_owner": {
17
+ "type": "boolean"
18
+ },
19
+ "fetch_record_name_from": {
20
+ "type": "string"
21
+ },
22
+ "loggable_attrs": {
23
+ "type": "array",
24
+ "items": {
25
+ "type": "string"
26
+ }
27
+ },
28
+ "auto_log": {
29
+ "type": "array",
30
+ "items": {
31
+ "type": "string",
32
+ "enum": [
33
+ "create",
34
+ "update",
35
+ "destroy"
36
+ ]
37
+ }
38
+ },
39
+ "route": {
40
+ "type": "string",
41
+ "minLength": 1
42
+ },
43
+ "relations": {
44
+ "type": "array",
45
+ "items": {
46
+ "type": "object",
47
+ "properties": {
48
+ "has_many": {
49
+ "type": "string"
50
+ },
51
+ "has_one": {
52
+ "type": "string"
53
+ },
54
+ "belongs_to": {
55
+ "type": "string"
56
+ },
57
+ "model": {
58
+ "type": "string"
59
+ },
60
+ "loggable_attrs": {
61
+ "type": "array",
62
+ "items": {
63
+ "type": "string"
64
+ }
65
+ },
66
+ "route": {
67
+ "type": "string",
68
+ "minLength": 1
69
+ },
70
+ "fetch_record_name_from": {
71
+ "type": "string"
72
+ }
73
+ },
74
+ "required": [
75
+ "model"
76
+ ]
77
+ }
78
+ }
79
+ },
80
+ "required": [
81
+ "loggable_attrs"
82
+ ]
83
+ }
84
+ },
85
+ "additionalProperties": false,
86
+ "required": [
87
+ "current_user_model_name",
88
+ "fetch_current_user_name_from"
89
+ ]
90
+ }
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.56
4
+ version: 0.1.58
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-04 00:00:00.000000000 Z
11
+ date: 2024-03-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -24,6 +24,26 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 7.1.3
27
+ - !ruby/object:Gem::Dependency
28
+ name: json-schema
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '4.1'
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 4.1.1
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: '4.1'
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 4.1.1
27
47
  - !ruby/object:Gem::Dependency
28
48
  name: rails
29
49
  requirement: !ruby/object:Gem::Requirement
@@ -149,20 +169,26 @@ files:
149
169
  - CONSIDERTIONS.md
150
170
  - GETTING-STARTED.md
151
171
  - LICENSE.txt
172
+ - PAYLOAD_EXAMPLE.md
152
173
  - README.md
153
174
  - ROADMAP.md
154
175
  - Rakefile
155
176
  - docs/LoggableActivity.html
156
177
  - docs/LoggableActivity/Activity.html
157
178
  - docs/LoggableActivity/Configuration.html
179
+ - docs/LoggableActivity/ConfigurationError.html
180
+ - docs/LoggableActivity/DataOwner.html
158
181
  - docs/LoggableActivity/Encryption.html
159
182
  - docs/LoggableActivity/EncryptionError.html
160
183
  - docs/LoggableActivity/EncryptionKey.html
161
184
  - docs/LoggableActivity/Error.html
162
185
  - docs/LoggableActivity/Hooks.html
163
186
  - docs/LoggableActivity/Payload.html
164
- - docs/LoggableActivity/PayloadsBuilder.html
165
- - docs/LoggableActivity/UpdatePayloadsBuilder.html
187
+ - docs/LoggableActivity/Services.html
188
+ - docs/LoggableActivity/Services/BasePayloadsBuilder.html
189
+ - docs/LoggableActivity/Services/DestroyPayloadsBuilder.html
190
+ - docs/LoggableActivity/Services/PayloadsBuilder.html
191
+ - docs/LoggableActivity/Services/UpdatePayloadsBuilder.html
166
192
  - docs/created.rid
167
193
  - docs/css/fonts.css
168
194
  - docs/css/rdoc.css
@@ -211,44 +237,29 @@ files:
211
237
  - lib/generators/.DS_Store
212
238
  - lib/generators/loggable_activity/.DS_Store
213
239
  - lib/generators/loggable_activity/install_generator.rb
214
- - lib/generators/loggable_activity/install_templates_generator.rb
215
240
  - lib/generators/loggable_activity/templates/.DS_Store
216
241
  - lib/generators/loggable_activity/templates/binary_ids/create_loggable_activities.rb
217
242
  - lib/generators/loggable_activity/templates/config/locales/loggable_activity.en.yml
218
243
  - lib/generators/loggable_activity/templates/config/loggable_activity.yaml
219
244
  - lib/generators/loggable_activity/templates/create_loggable_activities.rb
220
245
  - lib/generators/loggable_activity/templates/current_user.rb
221
- - lib/generators/loggable_activity/templates/helpers/activity_helper.rb
222
- - lib/generators/loggable_activity/templates/helpers/router.rb
223
- - lib/generators/loggable_activity/templates/helpers/routes_helper.rb
224
246
  - lib/generators/loggable_activity/templates/loggable_activity.en.yaml
225
- - lib/generators/loggable_activity/templates/views/loggable_activity/templates/default/_create.html.erb
226
- - lib/generators/loggable_activity/templates/views/loggable_activity/templates/default/_create.html.slim
227
- - lib/generators/loggable_activity/templates/views/loggable_activity/templates/default/_destroy.html.erb
228
- - lib/generators/loggable_activity/templates/views/loggable_activity/templates/default/_destroy.html.slim
229
- - lib/generators/loggable_activity/templates/views/loggable_activity/templates/default/_show.html.erb
230
- - lib/generators/loggable_activity/templates/views/loggable_activity/templates/default/_show.html.slim
231
- - lib/generators/loggable_activity/templates/views/loggable_activity/templates/default/_update.html.erb
232
- - lib/generators/loggable_activity/templates/views/loggable_activity/templates/default/_update.html.slim
233
- - lib/generators/loggable_activity/templates/views/loggable_activity/templates/shared/_activity_info.html.erb
234
- - lib/generators/loggable_activity/templates/views/loggable_activity/templates/shared/_activity_info.html.slim
235
- - lib/generators/loggable_activity/templates/views/loggable_activity/templates/shared/_list_attrs.html.erb
236
- - lib/generators/loggable_activity/templates/views/loggable_activity/templates/shared/_list_attrs.html.slim
237
- - lib/generators/loggable_activity/templates/views/loggable_activity/templates/shared/_update_attrs.html.erb
238
- - lib/generators/loggable_activity/templates/views/loggable_activity/templates/shared/_update_attrs.html.slim
239
- - lib/generators/loggable_activity/templates/views/loggable_activity/templates/shared/_updated_relations.html.erb
240
- - lib/generators/loggable_activity/templates/views/loggable_activity/templates/shared/_updated_relations.html.slim
241
247
  - lib/loggable_activity.rb
242
248
  - lib/loggable_activity/.DS_Store
243
249
  - lib/loggable_activity/activity.rb
244
250
  - lib/loggable_activity/configuration.rb
251
+ - lib/loggable_activity/data_owner.rb
245
252
  - lib/loggable_activity/encryption.rb
246
253
  - lib/loggable_activity/encryption_key.rb
254
+ - lib/loggable_activity/error.rb
247
255
  - lib/loggable_activity/hooks.rb
248
256
  - lib/loggable_activity/payload.rb
249
- - lib/loggable_activity/payloads_builder.rb
250
- - lib/loggable_activity/update_payloads_builder.rb
257
+ - lib/loggable_activity/services/base_payloads_builder.rb
258
+ - lib/loggable_activity/services/destroy_payloads_builder.rb
259
+ - lib/loggable_activity/services/payloads_builder.rb
260
+ - lib/loggable_activity/services/update_payloads_builder.rb
251
261
  - lib/loggable_activity/version.rb
262
+ - lib/schemas/config_schema.json
252
263
  - pkg/loggable_activity-0.1.35.gem
253
264
  - sig/loggable_activity.rbs
254
265
  homepage: https://loggableactivity-efe7b931c886.herokuapp.com/