iron_trail 0.0.5 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3e922d927b8d15e66a500efdb61b10b6c46bdfef803a4c5b9073f6bd08514a93
|
4
|
+
data.tar.gz: db70caa06c04c8ec6efaea449613419162a6a84d1a677d86a92e8fa7b8570c26
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8f8d1e73e606dabb8fca56e17ef4e5eaacbb935e28153ece111469b2c25b1bb193c94a2d5745eb0d27734ebe0a641e53df5c238d03a74526fa6df5ecc8dbafea
|
7
|
+
data.tar.gz: 065f9432f14e29f63e6c26ae5fbbf2800ed285c5af9bca9376871acc5a65d14efdc4951bcfd2bcdfb83c8b5498b4adb47d810ac9eb83cbab1deb3328f61038ab
|
@@ -1,6 +1,6 @@
|
|
1
1
|
class CreateIrontrailChanges < ActiveRecord::Migration[<%= ActiveRecord::Migration.current_version %>]
|
2
2
|
def change
|
3
|
-
|
3
|
+
create_table :irontrail_changes, primary_key: [:id, :created_at] do |t|
|
4
4
|
t.column :id, :bigserial, null: false
|
5
5
|
t.column :actor_type, :text
|
6
6
|
t.column :actor_id, :text
|
@@ -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,
|
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,
|
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,
|
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(),
|
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;
|
data/lib/iron_trail/version.rb
CHANGED
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
|
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-
|
10
|
+
date: 2025-01-29 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
13
|
name: rails
|
@@ -37,20 +37,6 @@ dependencies:
|
|
37
37
|
- - "~>"
|
38
38
|
- !ruby/object:Gem::Version
|
39
39
|
version: '1.5'
|
40
|
-
- !ruby/object:Gem::Dependency
|
41
|
-
name: pg_party
|
42
|
-
requirement: !ruby/object:Gem::Requirement
|
43
|
-
requirements:
|
44
|
-
- - "~>"
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version: '1.8'
|
47
|
-
type: :development
|
48
|
-
prerelease: false
|
49
|
-
version_requirements: !ruby/object:Gem::Requirement
|
50
|
-
requirements:
|
51
|
-
- - "~>"
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: '1.8'
|
54
40
|
- !ruby/object:Gem::Dependency
|
55
41
|
name: appraisal
|
56
42
|
requirement: !ruby/object:Gem::Requirement
|