waldit 0.0.23 → 0.0.25

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cb156ad006aa75f9f11fdb8fe6ce5de2330cde62c57e44967ebb93cff89ec9fb
4
- data.tar.gz: ff02eb2fd23cf1a24d4f32b54cbd4e54520f93d5820ed60bd3b3d799a5fdfe36
3
+ metadata.gz: ba555412a6c079daefae27957b707136b94b086ec4fb351c1243e7efb14470d0
4
+ data.tar.gz: 189649ec353443111a932cb10fbe6e3beb59efee8550453bb282da148a1d8858
5
5
  SHA512:
6
- metadata.gz: 2389cbdf8e6dd04a5e50ad4d071c6885939fe493b4108c982d14f0ba634c6cec4420aceba3867ac2b0013d99860aba6c7819200e365728d35fe3d62731e3bbdb
7
- data.tar.gz: 0cf7598ac224ac67ed1c556299bff5df098ff25255fcf5617ba308027b20a382cce0a28b00be1b941574250b4833f37191f3d2390ec8d7afdda0a2aec83f1e83
6
+ metadata.gz: 2839fd6125953177e69c733438fb042a40364b236712f6e2a8d8c0c2490b4917d82be47d265422de4a19cad27c4ce58189fc922d0d28288a476775e85e119a20
7
+ data.tar.gz: b49559cc7f60ab7b889fa3e183039214494f40dadc1ca50e00c006e8f62704d7b8ca709719ded76bf6c948835a9705617c7b673988ce97edd1e39fa332206bef
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Waldit
4
4
  module Context
5
- def with_context(context, &block)
5
+ def with_context(context = {}, &block)
6
6
  current_context = self.context || {}
7
7
  Thread.current[:waldit_context] ||= []
8
8
  Thread.current[:waldit_context].push(current_context.merge(context.as_json))
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "active_support/core_ext/module/delegation"
3
4
  require "rails/railtie"
4
5
 
5
6
  module Waldit
data/lib/waldit/record.rb CHANGED
@@ -4,10 +4,10 @@ module Waldit
4
4
  module Record
5
5
  def self.included(base)
6
6
  base.class_eval do
7
- scope :from_table, -> table { order(:committed_at).where(table_name: table) }
7
+ scope :from_table, -> table { order(:committed_at, :lsn).where(table_name: table) }
8
8
  scope :from_model, -> model { from_table(model.table_name) }
9
9
  scope :for, -> record { from_model(record.class).where(primary_key: record.id) }
10
- scope :with_context, -> ctx { order(:committed_at).where("context @> ?", ctx.to_json) }
10
+ scope :with_context, -> ctx { order(:committed_at, :lsn).where("context @> ?", ctx.to_json) }
11
11
  end
12
12
  end
13
13
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Waldit
4
- VERSION = "0.0.23"
4
+ VERSION = "0.0.25"
5
5
  end
@@ -16,6 +16,7 @@ module Waldit
16
16
  when InsertEvent
17
17
  new_attributes = clean_attributes(event.table, event.new)
18
18
  @connection.exec_prepared("waldit_insert", audit + [new_attributes.to_json])
19
+ true
19
20
 
20
21
  when UpdateEvent
21
22
  return if event.diff.without(ignored_columns(event.table)).empty?
@@ -23,6 +24,7 @@ module Waldit
23
24
  new_attributes = clean_attributes(event.table, event.new)
24
25
 
25
26
  @connection.exec_prepared("waldit_update", audit + [old_attributes.to_json, new_attributes.to_json])
27
+ true
26
28
 
27
29
  when DeleteEvent
28
30
  case @connection.exec_prepared("waldit_delete_cleanup", [event.transaction_id, event.table, primary_key]).values
@@ -33,6 +35,7 @@ module Waldit
33
35
  else
34
36
  # Don't need to audit anything on this case
35
37
  end
38
+ true
36
39
  end
37
40
  end
38
41
 
@@ -49,42 +52,41 @@ module Waldit
49
52
  events.each do |event|
50
53
  case event
51
54
  when CommitTransactionEvent
52
- changes = [:old, :new, :diff]
53
- .map { |diff| [diff, tables.filter { |table| Waldit.store_changes.call(table).include? diff }] }
54
- .to_h
55
-
56
- log_new = (changes[:new] || []).map { |table| "#{table}" }
57
- log_old = (changes[:old] || []).map { |table| "#{table}" }
58
- log_diff = (changes[:diff] || []).map { |table| "#{table}" }
59
-
60
- @connection.exec_prepared("waldit_finish", [
61
- event.transaction_id,
62
- event.timestamp,
63
- "{#{log_new.join(",")}}",
64
- "{#{log_old.join(",")}}",
65
- "{#{log_diff.join(",")}}",
66
- ])
67
-
68
- @connection.exec_prepared("waldit_cleanup", [
69
- event.transaction_id,
70
- "{#{(log_new + log_old).join(",")}}",
71
- "{#{log_diff.join(",")}}",
72
- ])
55
+ unless tables.empty?
56
+ changes = [:old, :new, :diff]
57
+ .map { |diff| [diff, tables.filter { |table| Waldit.store_changes.call(table).include? diff }] }
58
+ .to_h
59
+
60
+ log_new = (changes[:new] || []).map { |table| "#{table}" }
61
+ log_old = (changes[:old] || []).map { |table| "#{table}" }
62
+ log_diff = (changes[:diff] || []).map { |table| "#{table}" }
63
+
64
+ @connection.exec_prepared("waldit_finish", [
65
+ event.transaction_id,
66
+ event.timestamp,
67
+ "{#{log_new.join(",")}}",
68
+ "{#{log_old.join(",")}}",
69
+ "{#{log_diff.join(",")}}",
70
+ ])
71
+
72
+ @connection.exec_prepared("waldit_cleanup", [
73
+ event.transaction_id,
74
+ "{#{(log_new + log_old).join(",")}}",
75
+ "{#{log_diff.join(",")}}",
76
+ ])
77
+ end
73
78
 
74
79
  # We sucessful retried a connection, let's reset our retry state
75
80
  @retry = false
76
81
 
77
82
  when InsertEvent
78
- tables << event.table
79
- audit_event(event)
83
+ tables << event.table if audit_event(event)
80
84
 
81
85
  when UpdateEvent
82
- tables << event.table
83
- audit_event(event)
86
+ tables << event.table if audit_event(event)
84
87
 
85
88
  when DeleteEvent
86
- tables << event.table
87
- audit_event(event)
89
+ tables << event.table if audit_event(event)
88
90
  end
89
91
  end
90
92
  end
data/rbi/waldit.rbi CHANGED
@@ -2,7 +2,7 @@
2
2
  module Waldit
3
3
  extend T::Sig
4
4
  extend Waldit::Context
5
- VERSION = "0.0.23"
5
+ VERSION = "0.0.25"
6
6
 
7
7
  class << self
8
8
  sig { returns(String) }
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: waldit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.23
4
+ version: 0.0.25
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rodrigo Navarro
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2026-01-17 00:00:00.000000000 Z
10
+ date: 2026-02-12 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: wal
@@ -15,14 +15,14 @@ dependencies:
15
15
  requirements:
16
16
  - - ">="
17
17
  - !ruby/object:Gem::Version
18
- version: 0.0.8
18
+ version: 0.0.35
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - ">="
24
24
  - !ruby/object:Gem::Version
25
- version: 0.0.8
25
+ version: 0.0.35
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: activerecord
28
28
  requirement: !ruby/object:Gem::Requirement