loggable_activity 0.1.55 → 0.1.58

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +10 -1
  3. data/CHANGELOG.md +14 -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 +58 -101
  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/.DS_Store +0 -0
  50. data/lib/generators/loggable_activity/install_templates_generator.rb +0 -103
  51. data/lib/generators/loggable_activity/templates/helpers/loggable_activity_helper.rb +0 -49
  52. data/lib/generators/loggable_activity/templates/loggable_activity_helper.rb +0 -58
  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.55'
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.55
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-01 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
@@ -208,47 +234,32 @@ files:
208
234
  - docs/js/searcher.js.gz
209
235
  - docs/table_of_contents.html
210
236
  - help/loggable_activity_help.txt
211
- - lib/.DS_Store
212
237
  - lib/generators/.DS_Store
213
238
  - lib/generators/loggable_activity/.DS_Store
214
239
  - lib/generators/loggable_activity/install_generator.rb
215
- - lib/generators/loggable_activity/install_templates_generator.rb
216
240
  - lib/generators/loggable_activity/templates/.DS_Store
217
241
  - lib/generators/loggable_activity/templates/binary_ids/create_loggable_activities.rb
218
242
  - lib/generators/loggable_activity/templates/config/locales/loggable_activity.en.yml
219
243
  - lib/generators/loggable_activity/templates/config/loggable_activity.yaml
220
244
  - lib/generators/loggable_activity/templates/create_loggable_activities.rb
221
245
  - lib/generators/loggable_activity/templates/current_user.rb
222
- - lib/generators/loggable_activity/templates/helpers/loggable_activity_helper.rb
223
246
  - lib/generators/loggable_activity/templates/loggable_activity.en.yaml
224
- - lib/generators/loggable_activity/templates/loggable_activity_helper.rb
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/