iron_trail 0.0.6 → 0.1.0

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: 34fb140276f60147f1c5d4beb71a3ba39a8f2c552a76e3b3c7e749e94ec518a2
4
- data.tar.gz: 4e7700b3f5c53090a623e1be9ed5b0e6a513869450176c58bdc8fdd1352decf1
3
+ metadata.gz: 3e922d927b8d15e66a500efdb61b10b6c46bdfef803a4c5b9073f6bd08514a93
4
+ data.tar.gz: db70caa06c04c8ec6efaea449613419162a6a84d1a677d86a92e8fa7b8570c26
5
5
  SHA512:
6
- metadata.gz: 0faa78641a209ccc88bed839b8988e1cc250465e6621e08158e38f1c68c0a4be421ab7f5346cbed7b6a25a658eeca9a51d015a1b23572ee2e91eab6aa04e29ce
7
- data.tar.gz: 563248c156fb4716cb0befa64cfcd7a81f8b98594db3008853ccc2625e5e4b2e9a2948de12dbced48d018c3e1a915536baeef65d606deb973bcc0c0afe7853e3
6
+ metadata.gz: 8f8d1e73e606dabb8fca56e17ef4e5eaacbb935e28153ece111469b2c25b1bb193c94a2d5745eb0d27734ebe0a641e53df5c238d03a74526fa6df5ecc8dbafea
7
+ data.tar.gz: 065f9432f14e29f63e6c26ae5fbbf2800ed285c5af9bca9376871acc5a65d14efdc4951bcfd2bcdfb83c8b5498b4adb47d810ac9eb83cbab1deb3328f61038ab
@@ -11,10 +11,12 @@ DECLARE
11
11
  new_obj JSONB;
12
12
  actor_type TEXT;
13
13
  actor_id TEXT;
14
+ created_at TIMESTAMP;
14
15
 
15
16
  err_text TEXT; err_detail TEXT; err_hint TEXT; err_ctx TEXT;
16
17
  BEGIN
17
18
  SELECT split_part(split_part(current_query(), '/*IronTrail ', 2), ' IronTrail*/', 1) INTO it_meta;
19
+
18
20
  IF (it_meta <> '') THEN
19
21
  it_meta_obj = it_meta::JSONB;
20
22
 
@@ -28,17 +30,30 @@ BEGIN
28
30
  END IF;
29
31
  END IF;
30
32
 
33
+ old_obj = row_to_json(OLD);
34
+ new_obj = row_to_json(NEW);
35
+
36
+ IF (TG_OP = 'INSERT' AND new_obj ? 'created_at') THEN
37
+ created_at = NEW.created_at;
38
+ ELSIF (TG_OP = 'UPDATE' AND new_obj ? 'updated_at') THEN
39
+ created_at = NEW.updated_at;
40
+ END IF;
41
+
42
+ IF (created_at IS NULL) THEN
43
+ created_at = STATEMENT_TIMESTAMP();
44
+ ELSE
45
+ it_meta_obj = jsonb_set(COALESCE(it_meta_obj, '{}'::jsonb), array['_db_created_at'], TO_JSONB(STATEMENT_TIMESTAMP()));
46
+ END IF;
47
+
31
48
  IF (TG_OP = 'INSERT') THEN
32
49
  INSERT INTO "irontrail_changes" ("actor_id", "actor_type",
33
50
  "rec_table", "operation", "rec_id", "rec_new", "metadata", "created_at")
34
51
  VALUES (actor_id, actor_type,
35
- TG_TABLE_NAME, 'i', NEW.id, row_to_json(NEW), it_meta_obj, NOW());
52
+ TG_TABLE_NAME, 'i', NEW.id, new_obj, it_meta_obj, created_at);
36
53
 
37
54
  ELSIF (TG_OP = 'UPDATE') THEN
38
55
  IF (OLD <> NEW) THEN
39
56
  u_changes = jsonb_build_object();
40
- old_obj = row_to_json(OLD);
41
- new_obj = row_to_json(NEW);
42
57
 
43
58
  FOR key IN (SELECT jsonb_object_keys(old_obj) UNION SELECT jsonb_object_keys(new_obj))
44
59
  LOOP
@@ -51,14 +66,13 @@ BEGIN
51
66
 
52
67
  INSERT INTO "irontrail_changes" ("actor_id", "actor_type", "rec_table", "operation",
53
68
  "rec_id", "rec_old", "rec_new", "rec_delta", "metadata", "created_at")
54
- VALUES (actor_id, actor_type, TG_TABLE_NAME, 'u', NEW.id, row_to_json(OLD), row_to_json(NEW),
55
- u_changes, it_meta_obj, NOW());
69
+ VALUES (actor_id, actor_type, TG_TABLE_NAME, 'u', NEW.id, old_obj, new_obj, u_changes, it_meta_obj, created_at);
56
70
 
57
71
  END IF;
58
72
  ELSIF (TG_OP = 'DELETE') THEN
59
73
  INSERT INTO "irontrail_changes" ("actor_id", "actor_type", "rec_table", "operation",
60
74
  "rec_id", "rec_old", "metadata", "created_at")
61
- VALUES (actor_id, actor_type, TG_TABLE_NAME, 'd', OLD.id, row_to_json(OLD), it_meta_obj, NOW());
75
+ VALUES (actor_id, actor_type, TG_TABLE_NAME, 'd', OLD.id, old_obj, it_meta_obj, created_at);
62
76
 
63
77
  END IF;
64
78
  RETURN NULL;
@@ -74,7 +88,7 @@ EXCEPTION
74
88
  "err_text", "ex_detail", "ex_hint", "ex_ctx", "op", "table_name",
75
89
  "old_data", "new_data", "query", "created_at")
76
90
  VALUES (SQLSTATE, SQLERRM, err_text, err_detail, err_hint, err_ctx,
77
- TG_OP, TG_TABLE_NAME, row_to_json(OLD), row_to_json(NEW), current_query(), NOW());
91
+ TG_OP, TG_TABLE_NAME, row_to_json(OLD), row_to_json(NEW), current_query(), STATEMENT_TIMESTAMP());
78
92
  RETURN NULL;
79
93
  END;
80
94
  $$ LANGUAGE plpgsql;
@@ -1,5 +1,5 @@
1
1
  # frozen_literal_string: true
2
2
 
3
3
  module IronTrail
4
- VERSION = '0.0.6'
4
+ VERSION = '0.1.0'
5
5
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: iron_trail
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - André Diego Piske
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-01-22 00:00:00.000000000 Z
10
+ date: 2025-01-29 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: rails