jetstream_bridge 1.9.0 → 1.10.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 +4 -4
- data/Gemfile.lock +1 -1
- data/lib/jetstream_bridge/core/model_codec_setup.rb +59 -0
- data/lib/jetstream_bridge/railtie.rb +3 -23
- data/lib/jetstream_bridge/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1fef54e5e8426e80c735e83ef11cf816643af9a0a8c3fac97089239f0b3743a7
|
4
|
+
data.tar.gz: 17442379f0f1a984fd89976b814a69752c83ec7efe4cc33602fb2998602999ce
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 690ec24627cce26f73db546832083ed823ef4481451523260daf0d3802376ac999f631f8d56abd5a949d8a942210881b9da8656c0489264328215c5428db26b4
|
7
|
+
data.tar.gz: a7d17b77244fe5c3c260dad42c31cba8ddeef4988d96a0722cafc46cf5792d02e91f23332d0873d0230f624a331563652f2928e2219fde1572412dd6a4cca440
|
data/Gemfile.lock
CHANGED
@@ -0,0 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module JetstreamBridge
|
4
|
+
module ModelCodecSetup
|
5
|
+
module_function
|
6
|
+
|
7
|
+
def apply!
|
8
|
+
return unless ar_connected?
|
9
|
+
|
10
|
+
[JetstreamBridge::OutboxEvent, JetstreamBridge::InboxEvent].each { |k| apply_to(k) }
|
11
|
+
end
|
12
|
+
|
13
|
+
def apply_to(klass)
|
14
|
+
return unless table_exists_safely?(klass)
|
15
|
+
|
16
|
+
%w[payload headers].each do |attr|
|
17
|
+
next unless column?(klass, attr)
|
18
|
+
next if json_column?(klass, attr) || already_serialized?(klass, attr)
|
19
|
+
|
20
|
+
klass.serialize attr.to_sym, coder: JSON
|
21
|
+
end
|
22
|
+
rescue ActiveRecord::StatementInvalid, ActiveRecord::ConnectionNotEstablished, ActiveRecord::NoDatabaseError
|
23
|
+
# ignore when schema isn’t available yet
|
24
|
+
end
|
25
|
+
|
26
|
+
# --- helpers ---
|
27
|
+
|
28
|
+
def ar_connected?
|
29
|
+
ActiveRecord::Base.connected?
|
30
|
+
rescue StandardError
|
31
|
+
false
|
32
|
+
end
|
33
|
+
|
34
|
+
def table_exists_safely?(klass)
|
35
|
+
klass.table_exists?
|
36
|
+
rescue StandardError
|
37
|
+
false
|
38
|
+
end
|
39
|
+
|
40
|
+
def column?(klass, attr)
|
41
|
+
klass.columns_hash.key?(attr)
|
42
|
+
rescue StandardError
|
43
|
+
false
|
44
|
+
end
|
45
|
+
|
46
|
+
def json_column?(klass, attr)
|
47
|
+
sql = klass.columns_hash.fetch(attr).sql_type.to_s.downcase
|
48
|
+
sql.include?('json') # covers json & jsonb
|
49
|
+
rescue StandardError
|
50
|
+
false
|
51
|
+
end
|
52
|
+
|
53
|
+
def already_serialized?(klass, attr)
|
54
|
+
klass.attribute_types.fetch(attr, nil).is_a?(ActiveRecord::Type::Serialized)
|
55
|
+
rescue StandardError
|
56
|
+
false
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -1,32 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require_relative 'core/model_codec_setup'
|
4
|
+
|
4
5
|
module JetstreamBridge
|
5
6
|
class Railtie < ::Rails::Railtie
|
6
7
|
initializer 'jetstream_bridge.defer_model_tweaks' do
|
7
8
|
ActiveSupport.on_load(:active_record) do
|
8
|
-
ActiveSupport::Reloader.to_prepare
|
9
|
-
# Skip if not connected (e.g., non-DB rake tasks)
|
10
|
-
begin
|
11
|
-
next unless ActiveRecord::Base.connected?
|
12
|
-
rescue StandardError
|
13
|
-
next
|
14
|
-
end
|
15
|
-
|
16
|
-
[JetstreamBridge::OutboxEvent, JetstreamBridge::InboxEvent].each do |klass|
|
17
|
-
next unless klass.table_exists?
|
18
|
-
|
19
|
-
%w[payload headers].each do |attr|
|
20
|
-
next unless klass.columns_hash.key?(attr)
|
21
|
-
|
22
|
-
# Only add serialize if the column is not JSON/JSONB
|
23
|
-
type = klass.type_for_attribute(attr)
|
24
|
-
klass.serialize attr.to_sym, coder: JSON unless type&.json?
|
25
|
-
end
|
26
|
-
rescue ActiveRecord::StatementInvalid, ActiveRecord::ConnectionNotEstablished
|
27
|
-
# Ignore in tasks/environments without DB
|
28
|
-
end
|
29
|
-
end
|
9
|
+
ActiveSupport::Reloader.to_prepare { JetstreamBridge::ModelCodecSetup.apply! }
|
30
10
|
end
|
31
11
|
end
|
32
12
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jetstream_bridge
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Attara
|
@@ -192,6 +192,7 @@ files:
|
|
192
192
|
- lib/jetstream_bridge/core/connection.rb
|
193
193
|
- lib/jetstream_bridge/core/duration.rb
|
194
194
|
- lib/jetstream_bridge/core/logging.rb
|
195
|
+
- lib/jetstream_bridge/core/model_codec_setup.rb
|
195
196
|
- lib/jetstream_bridge/core/model_utils.rb
|
196
197
|
- lib/jetstream_bridge/models/inbox_event.rb
|
197
198
|
- lib/jetstream_bridge/models/outbox_event.rb
|