Module: JetstreamBridge::ModelCodecSetup
- Defined in:
- lib/jetstream_bridge/core/model_codec_setup.rb
Class Method Summary collapse
- .already_serialized?(klass, attr) ⇒ Boolean
- .apply! ⇒ Object
- .apply_to(klass) ⇒ Object
-
.ar_connected? ⇒ Boolean
— helpers —.
- .column?(klass, attr) ⇒ Boolean
- .json_column?(klass, attr) ⇒ Boolean
- .table_exists_safely?(klass) ⇒ Boolean
Class Method Details
.already_serialized?(klass, attr) ⇒ Boolean
55 56 57 58 59 |
# File 'lib/jetstream_bridge/core/model_codec_setup.rb', line 55 def already_serialized?(klass, attr) klass.attribute_types.fetch(attr, nil).is_a?(ActiveRecord::Type::Serialized) rescue StandardError false end |
.apply! ⇒ Object
9 10 11 12 13 |
# File 'lib/jetstream_bridge/core/model_codec_setup.rb', line 9 def apply! return unless ar_connected? [JetstreamBridge::OutboxEvent, JetstreamBridge::InboxEvent].each { |k| apply_to(k) } end |
.apply_to(klass) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/jetstream_bridge/core/model_codec_setup.rb', line 15 def apply_to(klass) return unless table_exists_safely?(klass) %w[payload headers].each do |attr| next unless column?(klass, attr) next if json_column?(klass, attr) || already_serialized?(klass, attr) klass.serialize attr.to_sym, coder: Oj end rescue ActiveRecord::StatementInvalid, ActiveRecord::ConnectionNotEstablished, ActiveRecord::NoDatabaseError # ignore when schema isn’t available yet end |
.ar_connected? ⇒ Boolean
— helpers —
30 31 32 33 34 |
# File 'lib/jetstream_bridge/core/model_codec_setup.rb', line 30 def ar_connected? ActiveRecord::Base.connected? rescue StandardError false end |
.column?(klass, attr) ⇒ Boolean
42 43 44 45 46 |
# File 'lib/jetstream_bridge/core/model_codec_setup.rb', line 42 def column?(klass, attr) klass.columns_hash.key?(attr) rescue StandardError false end |
.json_column?(klass, attr) ⇒ Boolean
48 49 50 51 52 53 |
# File 'lib/jetstream_bridge/core/model_codec_setup.rb', line 48 def json_column?(klass, attr) sql = klass.columns_hash.fetch(attr).sql_type.to_s.downcase sql.include?('json') # covers json & jsonb rescue StandardError false end |
.table_exists_safely?(klass) ⇒ Boolean
36 37 38 39 40 |
# File 'lib/jetstream_bridge/core/model_codec_setup.rb', line 36 def table_exists_safely?(klass) klass.table_exists? rescue StandardError false end |