loggable_activity 0.1.56 → 0.1.59

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) 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/.DS_Store +0 -0
  30. data/lib/generators/loggable_activity/templates/binary_ids/create_loggable_activities.rb +9 -10
  31. data/lib/generators/loggable_activity/templates/create_loggable_activities.rb +16 -13
  32. data/lib/loggable_activity/activity.rb +53 -102
  33. data/lib/loggable_activity/configuration.rb +60 -3
  34. data/lib/loggable_activity/data_owner.rb +18 -0
  35. data/lib/loggable_activity/encryption.rb +14 -14
  36. data/lib/loggable_activity/encryption_key.rb +26 -25
  37. data/lib/loggable_activity/error.rb +34 -0
  38. data/lib/loggable_activity/hooks.rb +78 -43
  39. data/lib/loggable_activity/payload.rb +70 -20
  40. data/lib/loggable_activity/services/base_payloads_builder.rb +127 -0
  41. data/lib/loggable_activity/services/destroy_payloads_builder.rb +127 -0
  42. data/lib/loggable_activity/services/payloads_builder.rb +98 -0
  43. data/lib/loggable_activity/services/update_payloads_builder.rb +170 -0
  44. data/lib/loggable_activity/version.rb +1 -1
  45. data/lib/loggable_activity.rb +6 -6
  46. data/lib/schemas/config_schema.json +90 -0
  47. metadata +37 -26
  48. data/docs/LoggableActivity/PayloadsBuilder.html +0 -441
  49. data/docs/LoggableActivity/UpdatePayloadsBuilder.html +0 -424
  50. data/lib/generators/loggable_activity/install_templates_generator.rb +0 -105
  51. data/lib/generators/loggable_activity/templates/helpers/activity_helper.rb +0 -37
  52. data/lib/generators/loggable_activity/templates/helpers/router.rb +0 -52
  53. data/lib/generators/loggable_activity/templates/helpers/routes_helper.rb +0 -20
  54. data/lib/generators/loggable_activity/templates/views/loggable_activity/templates/default/_create.html.erb +0 -23
  55. data/lib/generators/loggable_activity/templates/views/loggable_activity/templates/default/_create.html.slim +0 -18
  56. data/lib/generators/loggable_activity/templates/views/loggable_activity/templates/default/_destroy.html.erb +0 -18
  57. data/lib/generators/loggable_activity/templates/views/loggable_activity/templates/default/_destroy.html.slim +0 -17
  58. data/lib/generators/loggable_activity/templates/views/loggable_activity/templates/default/_show.html.erb +0 -18
  59. data/lib/generators/loggable_activity/templates/views/loggable_activity/templates/default/_show.html.slim +0 -17
  60. data/lib/generators/loggable_activity/templates/views/loggable_activity/templates/default/_update.html.erb +0 -18
  61. data/lib/generators/loggable_activity/templates/views/loggable_activity/templates/default/_update.html.slim +0 -12
  62. data/lib/generators/loggable_activity/templates/views/loggable_activity/templates/shared/_activity_info.html.erb +0 -12
  63. data/lib/generators/loggable_activity/templates/views/loggable_activity/templates/shared/_activity_info.html.slim +0 -11
  64. data/lib/generators/loggable_activity/templates/views/loggable_activity/templates/shared/_list_attrs.html.erb +0 -8
  65. data/lib/generators/loggable_activity/templates/views/loggable_activity/templates/shared/_list_attrs.html.slim +0 -6
  66. data/lib/generators/loggable_activity/templates/views/loggable_activity/templates/shared/_update_attrs.html.erb +0 -17
  67. data/lib/generators/loggable_activity/templates/views/loggable_activity/templates/shared/_update_attrs.html.slim +0 -14
  68. data/lib/generators/loggable_activity/templates/views/loggable_activity/templates/shared/_updated_relations.html.erb +0 -23
  69. data/lib/generators/loggable_activity/templates/views/loggable_activity/templates/shared/_updated_relations.html.slim +0 -21
  70. data/lib/loggable_activity/payloads_builder.rb +0 -153
  71. 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,170 @@
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 = previous_values.slice(*@loggable_attrs)
20
+ current_values = current_values.slice(*@loggable_attrs)
21
+ options = { related_to_activity_as: 'primary_update_payload', current_payload: true, data_owner: true }
22
+
23
+ build_encrypted_update_payload(
24
+ @record,
25
+ current_values,
26
+ previous_values,
27
+ options
28
+ )
29
+ end
30
+
31
+ # Build the payloads for the relations of the record.
32
+ # only relations included in the configuration, will be logged.
33
+ def build_relations_update_payloads
34
+ @relations.each do |relation_config|
35
+ build_relation_update_payload(relation_config)
36
+ end
37
+ end
38
+
39
+ def build_relation_update_payload(relation_config)
40
+ relation_config.each_key do |key|
41
+ case key
42
+ when 'belongs_to'
43
+ build_belongs_to_update_payload(relation_config)
44
+ when 'has_one'
45
+ build_has_one_update_payload(relation_config)
46
+ when 'has_many'
47
+ build_has_many_update_payloads(relation_config)
48
+ end
49
+ end
50
+ end
51
+
52
+ # Builds the update payload for a belongs_to relation.
53
+ def build_belongs_to_update_payload(relation_config)
54
+ relation_id = "#{relation_config['belongs_to']}_id"
55
+ model_class_name = relation_config['model']
56
+ model_class = model_class_name.constantize
57
+ data_owner = relation_config['data_owner']
58
+
59
+ model_ids = saved_changes(@record).map { |hash| hash[relation_id] }
60
+
61
+ model_ids.each_with_index do |id, index|
62
+ record = id ? model_class.find_by(id:) : nil
63
+ next unless record
64
+
65
+ options =
66
+ { related_to_activity_as: 'belongs_to_update_payload', current_payload: index == 1, data_owner: }
67
+
68
+ build_encrypted_payload(record, options)
69
+ end
70
+ end
71
+
72
+ # Builds payloads for has_many relations.
73
+ def build_has_many_update_payloads(relation_config)
74
+ relation = (relation_config['has_many']).to_s
75
+ records = @record.send(relation)
76
+ return nil if records.empty?
77
+
78
+ records.each do |record|
79
+ if record.persisted? && record.changes_to_save.any?
80
+ build_has_many_update_payload(relation_config, record)
81
+ elsif record.persisted? && record.saved_changes.any?
82
+ # "no changes to save"
83
+ else
84
+ build_has_many_create_payload(relation_config, record)
85
+ end
86
+ end
87
+ end
88
+
89
+ def build_has_many_update_payload(relation_config, record)
90
+ record.disable_hooks = true
91
+ previous_values, current_values = changes_to_save(record)
92
+ loggable_attrs = relation_config['loggable_attrs']
93
+ return if previous_values == current_values
94
+
95
+ previous_values = previous_values.slice(*loggable_attrs)
96
+ data_owner = relation_config['data_owner']
97
+ options = { related_to_activity_as: 'has_many_update_payload', current_payload: true, data_owner: }
98
+
99
+ build_encrypted_update_payload(
100
+ record,
101
+ current_values,
102
+ previous_values,
103
+ options
104
+ )
105
+ end
106
+
107
+ def build_has_many_create_payload(relation_config, record)
108
+ record.disable_hooks = true
109
+ data_owner = relation_config['data_owner']
110
+ options =
111
+ { related_to_activity_as: 'has_many_create_payload', current_payload: true, data_owner: }
112
+ build_encrypted_payload(record, options)
113
+ end
114
+
115
+ # Builds the update payload for a has_one relation.
116
+ def build_has_one_update_payload(relation_config)
117
+ relation = (relation_config['has_one']).to_s
118
+ record = @record.send(relation)
119
+ return nil if record.nil?
120
+
121
+ previous_values, current_values = changes_to_save(record)
122
+ loggable_attrs = record.class.loggable_attrs
123
+ return if previous_values == current_values
124
+
125
+ previous_values = previous_values.slice(*loggable_attrs)
126
+ current_values = current_values.slice(*loggable_attrs)
127
+ data_owner = relation_config['data_owner']
128
+ options = { related_to_activity_as: 'has_one_update_payload', current_payload: true, data_owner: }
129
+
130
+ build_encrypted_update_payload(
131
+ record,
132
+ current_values,
133
+ previous_values,
134
+ options
135
+ )
136
+ end
137
+
138
+ # Returns the encrypted attributes for the update payload.
139
+ def encrypted_update_attrs(current_values, previous_values, encryption_key)
140
+ changes = []
141
+
142
+ previous_values.each do |key, from_value|
143
+ from = ::LoggableActivity::Encryption.encrypt(from_value, encryption_key)
144
+ to_value = current_values[key]
145
+ to = ::LoggableActivity::Encryption.encrypt(to_value, encryption_key)
146
+ changes << { key => { from:, to: } }
147
+ end
148
+ { changes: }
149
+ end
150
+
151
+ # Builds the encrypted update payload for a record.
152
+ def build_encrypted_update_payload(record, current_values, previous_values, options = {})
153
+ encryption_key = ::LoggableActivity::EncryptionKey.for_record(record)
154
+
155
+ encrypted_attrs = encrypted_update_attrs(
156
+ current_values,
157
+ previous_values,
158
+ encryption_key.secret_key
159
+ )
160
+
161
+ build_payload(
162
+ record,
163
+ encryption_key,
164
+ encrypted_attrs,
165
+ options
166
+ )
167
+ end
168
+ end
169
+ end
170
+ 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.59'
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.59
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/