loggable_activity 0.1.39 → 0.1.40

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 (96) hide show
  1. checksums.yaml +4 -4
  2. data/.document +1 -0
  3. data/.nojekyll +1 -0
  4. data/.rubocop.yml +1 -1
  5. data/doc/.nojekyll +1 -0
  6. data/doc/CHANGELOG_md.html +125 -0
  7. data/doc/CODE_OF_CONDUCT_md.html +220 -0
  8. data/doc/CONSIDERTIONS_md.html +227 -0
  9. data/doc/CreateLoggableActivities.html +144 -0
  10. data/doc/CreateLoggableEncryptionKeys.html +140 -0
  11. data/doc/CreateLoggablePayloads.html +144 -0
  12. data/doc/GETTING-STARTED_md.html +186 -0
  13. data/doc/Gemfile.html +104 -0
  14. data/doc/Gemfile_lock.html +152 -0
  15. data/doc/LICENSE_txt.html +104 -0
  16. data/doc/LoggableActivity/CurrentUser.html +99 -0
  17. data/doc/LoggableActivity/Generators/InstallGenerator.html +178 -0
  18. data/doc/LoggableActivity/Generators.html +91 -0
  19. data/doc/README_md.html +138 -0
  20. data/doc/ROADMAP_md.html +151 -0
  21. data/doc/Rakefile.html +102 -0
  22. data/doc/bin/setup.html +100 -0
  23. data/doc/notes/CHEAT_SHEET_md.html +130 -0
  24. data/doc/sig/loggable_activity_rbs.html +101 -0
  25. data/docs/LoggableActivity/Activity.html +494 -0
  26. data/docs/LoggableActivity/Configuration.html +183 -0
  27. data/docs/LoggableActivity/Encryption.html +220 -0
  28. data/docs/LoggableActivity/EncryptionError.html +99 -0
  29. data/docs/LoggableActivity/EncryptionKey.html +327 -0
  30. data/docs/LoggableActivity/Error.html +97 -0
  31. data/docs/LoggableActivity/Hooks.html +172 -0
  32. data/docs/LoggableActivity/Payload.html +159 -0
  33. data/docs/LoggableActivity/PayloadsBuilder.html +154 -0
  34. data/docs/LoggableActivity/UpdatePayloadsBuilder.html +199 -0
  35. data/docs/LoggableActivity.html +100 -0
  36. data/docs/created.rid +10 -0
  37. data/docs/css/fonts.css +167 -0
  38. data/docs/css/rdoc.css +687 -0
  39. data/docs/fonts/Lato-Light.ttf +0 -0
  40. data/docs/fonts/Lato-LightItalic.ttf +0 -0
  41. data/docs/fonts/Lato-Regular.ttf +0 -0
  42. data/docs/fonts/Lato-RegularItalic.ttf +0 -0
  43. data/docs/fonts/SourceCodePro-Bold.ttf +0 -0
  44. data/docs/fonts/SourceCodePro-Regular.ttf +0 -0
  45. data/docs/images/add.png +0 -0
  46. data/docs/images/arrow_up.png +0 -0
  47. data/docs/images/brick.png +0 -0
  48. data/docs/images/brick_link.png +0 -0
  49. data/docs/images/bug.png +0 -0
  50. data/docs/images/bullet_black.png +0 -0
  51. data/docs/images/bullet_toggle_minus.png +0 -0
  52. data/docs/images/bullet_toggle_plus.png +0 -0
  53. data/docs/images/date.png +0 -0
  54. data/docs/images/delete.png +0 -0
  55. data/docs/images/find.png +0 -0
  56. data/docs/images/loadingAnimation.gif +0 -0
  57. data/docs/images/macFFBgHack.png +0 -0
  58. data/docs/images/package.png +0 -0
  59. data/docs/images/page_green.png +0 -0
  60. data/docs/images/page_white_text.png +0 -0
  61. data/docs/images/page_white_width.png +0 -0
  62. data/docs/images/plugin.png +0 -0
  63. data/docs/images/ruby.png +0 -0
  64. data/docs/images/tag_blue.png +0 -0
  65. data/docs/images/tag_green.png +0 -0
  66. data/docs/images/transparent.png +0 -0
  67. data/docs/images/wrench.png +0 -0
  68. data/docs/images/wrench_orange.png +0 -0
  69. data/docs/images/zoom.png +0 -0
  70. data/docs/index.html +91 -0
  71. data/docs/js/darkfish.js +97 -0
  72. data/docs/js/navigation.js +105 -0
  73. data/docs/js/navigation.js.gz +0 -0
  74. data/docs/js/search.js +110 -0
  75. data/docs/js/search_index.js +1 -0
  76. data/docs/js/search_index.js.gz +0 -0
  77. data/docs/js/searcher.js +229 -0
  78. data/docs/js/searcher.js.gz +0 -0
  79. data/docs/table_of_contents.html +184 -0
  80. data/lib/generators/loggable_activity/install_generator.rb +2 -1
  81. data/lib/generators/loggable_activity/templates/current_user.rb +1 -1
  82. data/lib/generators/loggable_activity/templates/loggable_activity.yml +29 -0
  83. data/lib/loggable_activity/activity.rb +208 -59
  84. data/lib/loggable_activity/configuration.rb +18 -0
  85. data/lib/loggable_activity/encryption.rb +20 -1
  86. data/lib/loggable_activity/encryption_key.rb +81 -14
  87. data/lib/loggable_activity/hooks.rb +10 -7
  88. data/lib/loggable_activity/payload.rb +45 -11
  89. data/lib/loggable_activity/payloads_builder.rb +50 -4
  90. data/lib/loggable_activity/update_payloads_builder.rb +64 -2
  91. data/lib/loggable_activity/version.rb +1 -1
  92. metadata +81 -9
  93. data/.DS_Store +0 -0
  94. data/loggable_activity-0.1.32.gem +0 -0
  95. data/loggable_activity-0.1.33.gem +0 -0
  96. data/loggable_activity-0.1.34.gem +0 -0
@@ -1,44 +1,111 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # This the key used to unlock the data for one payload.
4
- # When deleted only the encryption_key field is deleted.
5
-
6
3
  module LoggableActivity
4
+ # This class represents the encryption key used to unlock the data for one payload.
5
+ # When deleted, only the encryption_key field is deleted.
7
6
  class EncryptionKey < ActiveRecord::Base
8
7
  self.table_name = 'loggable_encryption_keys'
9
- require 'securerandom'
8
+
9
+ # Associations
10
10
  belongs_to :record, polymorphic: true, optional: true
11
11
  belongs_to :parrent_key, class_name: 'LoggableActivity::EncryptionKey', optional: true,
12
12
  foreign_key: 'parrent_key_id'
13
13
 
14
+ # Marks the encryption key as deleted by updating the key to nil.
14
15
  def mark_as_deleted
15
16
  update(key: nil)
16
17
  parrent_key.mark_as_deleted if parrent_key.present?
17
18
  end
18
19
 
19
- def self.for_record_by_type_and_id(record_type, record_id, parrent_key = nil)
20
- enctyption_key = find_by(record_type:, record_id:)
21
-
22
- return enctyption_key if enctyption_key
20
+ # Returns an encryption key for a record by its type and ID, optionally using a parent key.
21
+ #
22
+ # @param record_type [String] The type of the record.
23
+ # @param record_id [Integer] The ID of the record.
24
+ # @param parent_key [LoggableActivity::EncryptionKey, nil] The parent encryption key, if any.
25
+ # @return [LoggableActivity::EncryptionKey] The encryption key for the record.
26
+ #
27
+ # Example:
28
+ # LoggableActivity::EncryptionKey.for_record_by_type_and_id('User', 1)
29
+ #
30
+ # Returns:
31
+ # {
32
+ # :id => 39,
33
+ # :parrent_key_id => 38,
34
+ # :key => "a8f4774e7f42eb253045a4db7de7b79e",
35
+ # :record_type => "User",
36
+ # :record_id => 1
37
+ # }
38
+ #
39
+ def self.for_record_by_type_and_id(record_type, record_id, parent_key = nil)
40
+ encryption_key = find_by(record_type:, record_id:)
41
+ return encryption_key if encryption_key
23
42
 
24
- create_encryption_key(record_type, record_id, parrent_key)
43
+ create_encryption_key(record_type, record_id, parent_key)
25
44
  end
26
45
 
27
- def self.for_record(record, parrent_key = nil)
46
+ # Returns an encryption key for a record, optionally using a parent key.
47
+ #
48
+ # @param record [ActiveRecord::Base] The record for which to get the encryption key.
49
+ # @param parent_key [LoggableActivity::EncryptionKey, nil] The parent encryption key, if any.
50
+ # @return [LoggableActivity::EncryptionKey] The encryption key for the record.
51
+ #
52
+ # Example:
53
+ # user = User.find(1)
54
+ # LoggableActivity::EncryptionKey.for_record(user)
55
+ #
56
+ # Returns:
57
+ # {
58
+ # :id => 39,
59
+ # :parrent_key_id => 38,
60
+ # :key => "a8f4774e7f42eb253045a4db7de7b79e",
61
+ # :record_type => "User",
62
+ # :record_id => 1
63
+ # }
64
+ #
65
+ def self.for_record(record, parent_key = nil)
28
66
  encryption_key = find_by(record:)
29
67
  return encryption_key if encryption_key
30
68
 
31
- create_encryption_key(record.class.name, record.id, parrent_key)
69
+ create_encryption_key(record.class.name, record.id, parent_key)
32
70
  end
33
71
 
34
- def self.create_encryption_key(record_type, record_id, parrent_key = nil)
35
- if parrent_key
36
- create(record_type:, record_id:, key: random_key, parrent_key_id: parrent_key.id)
72
+ # Creates an encryption key for a record, optionally using a parent key.
73
+ #
74
+ # @param record_type [String] The type of the record.
75
+ # @param record_id [Integer] The ID of the record.
76
+ # @param parent_key [LoggableActivity::EncryptionKey, nil] The parent encryption key, if any.
77
+ # @return [LoggableActivity::EncryptionKey] The created encryption key.
78
+ #
79
+ # Example:
80
+ # LoggableActivity::EncryptionKey.create_encryption_key('User', 1)
81
+ #
82
+ # Returns:
83
+ # {
84
+ # :id => 39,
85
+ # :parrent_key_id => 38,
86
+ # :key => "a8f4774e7f42eb253045a4db7de7b79e",
87
+ # :record_type => "User",
88
+ # :record_id => 1
89
+ # }
90
+ #
91
+ def self.create_encryption_key(record_type, record_id, parent_key = nil)
92
+ if parent_key
93
+ create(record_type:, record_id:, key: random_key, parent_key_id: parent_key.id)
37
94
  else
38
95
  create(record_type:, record_id:, key: random_key)
39
96
  end
40
97
  end
41
98
 
99
+ # Generates a random encryption key.
100
+ #
101
+ # @return [String] The generated encryption key.
102
+ #
103
+ # Example:
104
+ # LoggableActivity::EncryptionKey.random_key
105
+ #
106
+ # Returns:
107
+ # "a8f4774e7f42eb253045a4db7de7b79e"
108
+ #
42
109
  def self.random_key
43
110
  SecureRandom.hex(16)
44
111
  end
@@ -6,17 +6,19 @@ require 'loggable_activity/payloads_builder'
6
6
  require 'loggable_activity/update_payloads_builder'
7
7
 
8
8
  module LoggableActivity
9
+ # This module provides hooks for creating activities when included in a model.
9
10
  module Hooks
10
11
  extend ActiveSupport::Concern
11
12
  include LoggableActivity::PayloadsBuilder
12
13
  include LoggableActivity::UpdatePayloadsBuilder
13
14
 
15
+ # The included hook sets up configuration and callback hooks for the model.
14
16
  included do
15
17
  config = LoggableActivity::Configuration.for_class(name)
16
- if config.nil?
17
- raise "Loggable::Configuration not found for #{name}, Please add it to 'config/loggable_activity.yaml'"
18
- end
19
18
 
19
+ raise "Loggable::Configuration not found for #{name}, Please add it to 'config/loggable_activity.yaml'" if config.nil?
20
+
21
+ # Initializes attributes based on configuration.
20
22
  self.loggable_attrs = config&.fetch('loggable_attrs', []) || []
21
23
  self.relations = config&.fetch('relations', []) || []
22
24
  self.auto_log = config&.fetch('auto_log', []) || []
@@ -26,12 +28,13 @@ module LoggableActivity
26
28
  after_create :log_create_activity
27
29
  after_update :log_update_activity
28
30
  before_destroy :log_destroy_activity
29
-
30
- # has_one: encryption_key, as: :encryption_key, class_name: 'LoggableActivity::EncryptionKey'
31
31
  end
32
32
 
33
- # This is the main method for logging activities.
34
- # It is never called from the directly from the controller.
33
+ # Logs an activity with the specified action, actor, and params.
34
+ #
35
+ # @param action [Symbol] The action to log (:create, :update, :destroy, or custom).
36
+ # @param actor [Object] The actor performing the action.
37
+ # @param params [Hash] Additional parameters for the activity.
35
38
  def log(action, actor: nil, params: {})
36
39
  @action = action
37
40
  @actor = actor || Thread.current[:current_user]
@@ -1,19 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # This is the payload of the log. It contains the encrypted data of one record in the DB.
4
- # When the record is deleted, the encryption_key for the payload is deleted.
5
- # Payloads comes in different flavors.
6
- # The primary_payload is the payload that contains the parrent record.
7
- # When fecthing the attrs, they are packed differently depending on the payload_type.
8
-
9
3
  module LoggableActivity
4
+ # This class represents a payload in the log, containing encrypted data of one record in the database.
5
+ # When the record is deleted, the encryption key for the payload is also deleted.
6
+ # Payloads come in different types, each serving a specific purpose.
10
7
  class Payload < ActiveRecord::Base
11
8
  self.table_name = 'loggable_payloads'
12
- belongs_to :record, polymorphic: true, optional: true
13
9
 
10
+ # Associations
14
11
  belongs_to :activity
15
12
  belongs_to :record, polymorphic: true, optional: true
13
+
14
+ # Validations
16
15
  validates :encrypted_attrs, presence: true
16
+
17
+ # Enumeration for different payload types
17
18
  enum payload_type: {
18
19
  primary_payload: 0,
19
20
  update_payload: 1,
@@ -21,6 +22,21 @@ module LoggableActivity
21
22
  previous_association: 3
22
23
  }
23
24
 
25
+ # Returns the decrypted attributes of the payload based on its type.
26
+ #
27
+ # @return [Hash] The decrypted attributes.
28
+ #
29
+ # Example:
30
+ # payload.attrs
31
+ #
32
+ # Returns:
33
+ # {
34
+ # "street" => "Machu Picchu",
35
+ # "city" => "Aguas Calientes",
36
+ # "country" => "Peru",
37
+ # "postal_code" => "08680"
38
+ # }
39
+ #
24
40
  def attrs
25
41
  return deleted_attrs if record.nil?
26
42
 
@@ -29,27 +45,38 @@ module LoggableActivity
29
45
  decrypted_attrs
30
46
  when 'update_payload'
31
47
  decrypted_update_attrs
32
- # when 'destroy_payload'
33
- # destroy_payload_attrs
34
48
  end
35
49
  end
36
50
 
51
+ private
52
+
53
+ # Retrieves the encryption key for the payload.
54
+ #
55
+ # @return [String, nil] The encryption key.
37
56
  def payload_encryption_key
38
57
  @payload_encryption_key ||= LoggableActivity::EncryptionKey.for_record(record)&.key
39
58
  end
40
59
 
41
- private
42
-
60
+ # Helper method to handle deleted attributes.
61
+ #
62
+ # @return [Hash] The hash with deleted attributes.
43
63
  def deleted_attrs
44
64
  encrypted_attrs.transform_values! { I18n.t('loggable.activity.deleted') }
45
65
  end
46
66
 
67
+ # Decrypts the 'from' and 'to' attributes in the update payload.
68
+ #
69
+ # @return [Array<Hash>] The array of decrypted changes.
47
70
  def decrypted_update_attrs
48
71
  encrypted_attrs['changes'].map do |change|
49
72
  decrypted_from_to_attr(change)
50
73
  end
51
74
  end
52
75
 
76
+ # Decrypts 'from' and 'to' attributes.
77
+ #
78
+ # @param change [Hash] The change hash containing 'from' and 'to' values.
79
+ # @return [Hash] The decrypted 'from' and 'to' values.
53
80
  def decrypted_from_to_attr(change)
54
81
  change.to_h do |key, value|
55
82
  from = decrypt_attr(value['from'])
@@ -58,12 +85,19 @@ module LoggableActivity
58
85
  end
59
86
  end
60
87
 
88
+ # Decrypts all attributes.
89
+ #
90
+ # @return [Hash] The decrypted attributes.
61
91
  def decrypted_attrs
62
92
  encrypted_attrs.each do |key, value|
63
93
  encrypted_attrs[key] = decrypt_attr(value)
64
94
  end
65
95
  end
66
96
 
97
+ # Decrypts a single attribute.
98
+ #
99
+ # @param value [String] The encrypted value to decrypt.
100
+ # @return [String] The decrypted value.
67
101
  def decrypt_attr(value)
68
102
  LoggableActivity::Encryption.decrypt(value, payload_encryption_key)
69
103
  end
@@ -1,9 +1,28 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # This is a factory for building payloads.
4
-
5
3
  module LoggableActivity
4
+ # This module is responsible for building payloads used in loggable activities.
6
5
  module PayloadsBuilder
6
+ # Builds payloads for the loggable activity.
7
+ #
8
+ # Example:
9
+ # build_payloads
10
+ #
11
+ # Returns:
12
+ # #<LoggableActivity::Payload:0x0000000109658718> {
13
+ # :id => 129,
14
+ # :record_type => "Demo::Club",
15
+ # :record_id => 4,
16
+ # :encrypted_attrs => {
17
+ # "name" => "z/jigjcm3Fb89L7QT8XiNhvVgjtRXKkmg/xohR6wIc0=\n"
18
+ # },
19
+ # :payload_type => "current_association",
20
+ # :data_owner => nil,
21
+ # :activity_id => 50,
22
+ # :created_at => Wed, 14 Feb 2024 13:21:13.964339000 UTC +00:00,
23
+ # :updated_at => Wed, 14 Feb 2024 13:21:13.964339000 UTC +00:00
24
+ # }
25
+ #
7
26
  def build_payloads
8
27
  build_primary_payload
9
28
  self.class.relations.each do |relation_config|
@@ -12,6 +31,9 @@ module LoggableActivity
12
31
  @payloads
13
32
  end
14
33
 
34
+ private
35
+
36
+ # Builds the primary payload.
15
37
  def build_primary_payload
16
38
  encrypted_attrs = encrypt_attrs(attributes, self.class.loggable_attrs, primary_encryption_key)
17
39
  @payloads << LoggableActivity::Payload.new(
@@ -22,6 +44,7 @@ module LoggableActivity
22
44
  )
23
45
  end
24
46
 
47
+ # Builds the payload for destroyed records.
25
48
  def build_destroy_payload
26
49
  encrypted_attrs = encrypt_attrs(attributes, self.class.loggable_attrs, primary_encryption_key)
27
50
  encrypted_attrs.transform_values! { '*** DELETED ***' }
@@ -33,6 +56,9 @@ module LoggableActivity
33
56
  )
34
57
  end
35
58
 
59
+ # Builds payloads for related records.
60
+ #
61
+ # @param relation_config [Hash] The configuration of the relation.
36
62
  def build_relation_payload(relation_config)
37
63
  relation_config.each_key do |key|
38
64
  case key
@@ -44,8 +70,12 @@ module LoggableActivity
44
70
  end
45
71
  end
46
72
 
47
- def build_payload(relation_config, ralation_type)
48
- associated_record = send(relation_config[ralation_type])
73
+ # Builds the payload for a specific relation.
74
+ #
75
+ # @param relation_config [Hash] The configuration of the relation.
76
+ # @param relation_type [String] The type of the relation.
77
+ def build_payload(relation_config, relation_type)
78
+ associated_record = send(relation_config[relation_type])
49
79
  return nil if associated_record.nil?
50
80
 
51
81
  associated_loggable_attrs = relation_config['loggable_attrs']
@@ -67,6 +97,11 @@ module LoggableActivity
67
97
  )
68
98
  end
69
99
 
100
+ # Retrieves the encryption key for the associated record.
101
+ #
102
+ # @param associated_record [ActiveRecord::Base] The associated record.
103
+ # @param data_owner [Boolean] Whether the associated record is the owner of the data.
104
+ # @return [LoggableActivity::EncryptionKey] The encryption key for the associated record.
70
105
  def associated_record_encryption_key(associated_record, data_owner)
71
106
  if data_owner
72
107
  LoggableActivity::EncryptionKey.for_record(associated_record, LoggableActivity::EncryptionKey.for_record(self))
@@ -75,11 +110,22 @@ module LoggableActivity
75
110
  end
76
111
  end
77
112
 
113
+ # Encrypts attributes.
114
+ #
115
+ # @param attrs [Hash] The attributes to be encrypted.
116
+ # @param loggable_attrs [Array<String>] The loggable attributes.
117
+ # @param encryption_key [String] The encryption key.
118
+ # @return [Hash] The encrypted attributes.
78
119
  def encrypt_attrs(attrs, loggable_attrs, encryption_key)
79
120
  attrs = attrs.slice(*loggable_attrs)
80
121
  encrypt_attr(attrs, encryption_key)
81
122
  end
82
123
 
124
+ # Encrypts a single attribute.
125
+ #
126
+ # @param attrs [Hash] The attributes to be encrypted.
127
+ # @param encryption_key [String] The encryption key.
128
+ # @return [Hash] The encrypted attributes.
83
129
  def encrypt_attr(attrs, encryption_key)
84
130
  attrs.each do |key, value|
85
131
  attrs[key] = LoggableActivity::Encryption.encrypt(value, encryption_key)
@@ -1,9 +1,69 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # This is a factory for building update payloads
4
-
5
3
  module LoggableActivity
4
+ # This module is responsible for building update payloads used in loggable activities.
6
5
  module UpdatePayloadsBuilder
6
+ # Builds payloads for an activity update event.
7
+ #
8
+ # Example:
9
+ # build_update_payloads
10
+ #
11
+ # Returns:
12
+ # [
13
+ # [0] #<LoggableActivity::Payload:0x00000001047d31d8> {
14
+ # :id => nil,
15
+ # :record_type => "Demo::Club",
16
+ # :record_id => 7,
17
+ # :encrypted_attrs => {
18
+ # "changes" => [
19
+ # [0] {
20
+ # "name" => {
21
+ # "from" => "+aQznZK64KLQ8wsyZlSOGQbqm+J8gDX93rNFeF+wY68=\n",
22
+ # "to" => "OdS834ZDS06+AYxmz4cUjhtgk7Jc8NoOVAAqR81Is7w=\n"
23
+ # }
24
+ # }
25
+ # ]
26
+ # },
27
+ # :payload_type => "update_payload",
28
+ # :data_owner => false,
29
+ # :activity_id => nil,
30
+ # :created_at => nil,
31
+ # :updated_at => nil
32
+ # },
33
+ # [1] #<LoggableActivity::Payload:0x0000000107847f80> {
34
+ # :id => nil,
35
+ # :record_type => "Demo::Address",
36
+ # :record_id => 7,
37
+ # :encrypted_attrs => {
38
+ # "street" => "W7cmT22Bb5TKVmtxTYJt1w==\n",
39
+ # "city" => "AAwdTI7Xo86cMbFBAMsMIw==\n",
40
+ # "country" => "7gu5wdu6O9tD7Q7+EDOqAg==\n",
41
+ # "postal_code" => "ljjfT6MXGNK33/PUyi6Nmw==\n"
42
+ # },
43
+ # :payload_type => "previous_association",
44
+ # :data_owner => false,
45
+ # :activity_id => nil,
46
+ # :created_at => nil,
47
+ # :updated_at => nil
48
+ # },
49
+ # [2] #<LoggableActivity::Payload:0x0000000107802a98> {
50
+ # :id => nil,
51
+ # :record_type => "Demo::Address",
52
+ # :record_id => 8,
53
+ # :encrypted_attrs => {
54
+ # "street" => "CuULVgIEgrOcWBxegKEvSg==\n",
55
+ # "city" => "QbvodOYMvNFpkvsCprqGqg==\n",
56
+ # "country" => "/N03d1OL3TY+aaiPUQ5N1A==\n",
57
+ # "postal_code" => "ZZu3S5tnaTeq+wBu0dPKBw==\n"
58
+ # },
59
+ # :payload_type => "current_association",
60
+ # :data_owner => false,
61
+ # :activity_id => nil,
62
+ # :created_at => nil,
63
+ # :updated_at => nil
64
+ # }
65
+ # ]
66
+ #
7
67
  def build_update_payloads
8
68
  @update_payloads = []
9
69
 
@@ -16,6 +76,8 @@ module LoggableActivity
16
76
  @update_payloads
17
77
  end
18
78
 
79
+ private
80
+
19
81
  def primary_update_attrs
20
82
  previous_values = saved_changes.transform_values(&:first)
21
83
  current_values = saved_changes.transform_values(&:last)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module LoggableActivity
4
- VERSION = '0.1.39'
4
+ VERSION = '0.1.40'
5
5
  end
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.39
4
+ version: 0.1.40
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-02-12 00:00:00.000000000 Z
11
+ date: 2024-02-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -37,7 +37,8 @@ executables: []
37
37
  extensions: []
38
38
  extra_rdoc_files: []
39
39
  files:
40
- - ".DS_Store"
40
+ - ".document"
41
+ - ".nojekyll"
41
42
  - ".rspec"
42
43
  - ".rspec_status"
43
44
  - ".rubocop.yml"
@@ -49,6 +50,81 @@ files:
49
50
  - README.md
50
51
  - ROADMAP.md
51
52
  - Rakefile
53
+ - doc/.nojekyll
54
+ - doc/CHANGELOG_md.html
55
+ - doc/CODE_OF_CONDUCT_md.html
56
+ - doc/CONSIDERTIONS_md.html
57
+ - doc/CreateLoggableActivities.html
58
+ - doc/CreateLoggableEncryptionKeys.html
59
+ - doc/CreateLoggablePayloads.html
60
+ - doc/GETTING-STARTED_md.html
61
+ - doc/Gemfile.html
62
+ - doc/Gemfile_lock.html
63
+ - doc/LICENSE_txt.html
64
+ - doc/LoggableActivity/CurrentUser.html
65
+ - doc/LoggableActivity/Generators.html
66
+ - doc/LoggableActivity/Generators/InstallGenerator.html
67
+ - doc/README_md.html
68
+ - doc/ROADMAP_md.html
69
+ - doc/Rakefile.html
70
+ - doc/bin/setup.html
71
+ - doc/notes/CHEAT_SHEET_md.html
72
+ - doc/sig/loggable_activity_rbs.html
73
+ - docs/LoggableActivity.html
74
+ - docs/LoggableActivity/Activity.html
75
+ - docs/LoggableActivity/Configuration.html
76
+ - docs/LoggableActivity/Encryption.html
77
+ - docs/LoggableActivity/EncryptionError.html
78
+ - docs/LoggableActivity/EncryptionKey.html
79
+ - docs/LoggableActivity/Error.html
80
+ - docs/LoggableActivity/Hooks.html
81
+ - docs/LoggableActivity/Payload.html
82
+ - docs/LoggableActivity/PayloadsBuilder.html
83
+ - docs/LoggableActivity/UpdatePayloadsBuilder.html
84
+ - docs/created.rid
85
+ - docs/css/fonts.css
86
+ - docs/css/rdoc.css
87
+ - docs/fonts/Lato-Light.ttf
88
+ - docs/fonts/Lato-LightItalic.ttf
89
+ - docs/fonts/Lato-Regular.ttf
90
+ - docs/fonts/Lato-RegularItalic.ttf
91
+ - docs/fonts/SourceCodePro-Bold.ttf
92
+ - docs/fonts/SourceCodePro-Regular.ttf
93
+ - docs/images/add.png
94
+ - docs/images/arrow_up.png
95
+ - docs/images/brick.png
96
+ - docs/images/brick_link.png
97
+ - docs/images/bug.png
98
+ - docs/images/bullet_black.png
99
+ - docs/images/bullet_toggle_minus.png
100
+ - docs/images/bullet_toggle_plus.png
101
+ - docs/images/date.png
102
+ - docs/images/delete.png
103
+ - docs/images/find.png
104
+ - docs/images/loadingAnimation.gif
105
+ - docs/images/macFFBgHack.png
106
+ - docs/images/package.png
107
+ - docs/images/page_green.png
108
+ - docs/images/page_white_text.png
109
+ - docs/images/page_white_width.png
110
+ - docs/images/plugin.png
111
+ - docs/images/ruby.png
112
+ - docs/images/tag_blue.png
113
+ - docs/images/tag_green.png
114
+ - docs/images/transparent.png
115
+ - docs/images/wrench.png
116
+ - docs/images/wrench_orange.png
117
+ - docs/images/zoom.png
118
+ - docs/index.html
119
+ - docs/js/darkfish.js
120
+ - docs/js/navigation.js
121
+ - docs/js/navigation.js.gz
122
+ - docs/js/search.js
123
+ - docs/js/search_index.js
124
+ - docs/js/search_index.js.gz
125
+ - docs/js/searcher.js
126
+ - docs/js/searcher.js.gz
127
+ - docs/table_of_contents.html
52
128
  - lib/.DS_Store
53
129
  - lib/generators/.DS_Store
54
130
  - lib/generators/loggable_activity/.DS_Store
@@ -59,6 +135,7 @@ files:
59
135
  - lib/generators/loggable_activity/templates/create_loggable_payloads.rb
60
136
  - lib/generators/loggable_activity/templates/current_user.rb
61
137
  - lib/generators/loggable_activity/templates/loggable_activity.en.yml
138
+ - lib/generators/loggable_activity/templates/loggable_activity.yml
62
139
  - lib/loggable_activity.rb
63
140
  - lib/loggable_activity/.DS_Store
64
141
  - lib/loggable_activity/activity.rb
@@ -70,18 +147,13 @@ files:
70
147
  - lib/loggable_activity/payloads_builder.rb
71
148
  - lib/loggable_activity/update_payloads_builder.rb
72
149
  - lib/loggable_activity/version.rb
73
- - loggable_activity-0.1.32.gem
74
- - loggable_activity-0.1.33.gem
75
- - loggable_activity-0.1.34.gem
76
150
  - pkg/loggable_activity-0.1.35.gem
77
151
  - sig/loggable_activity.rbs
78
152
  homepage: https://loggableactivity-efe7b931c886.herokuapp.com/
79
153
  licenses:
80
154
  - MIT
81
155
  metadata:
82
- homepage_uri: https://loggableactivity-efe7b931c886.herokuapp.com/
83
- source_code_uri: https://github.com/maxgronlund/LoggableActivity
84
- changelog_uri: https://github.com/maxgronlund/LoggableActivity/CHANGELOG.md
156
+ documentation_uri: https://maxgronlund.github.io/LoggableActivity/
85
157
  rubygems_mfa_required: 'true'
86
158
  post_install_message:
87
159
  rdoc_options: []
data/.DS_Store DELETED
Binary file
Binary file
Binary file
Binary file