module AssociateJsonb::ArelExtensions::Table

Attributes

store_tracker[R]

Public Class Methods

new(*args, store_tracker: nil, **opts) click to toggle source
Calls superclass method
# File lib/associate_jsonb/arel_extensions/table.rb, line 9
def initialize(*args, store_tracker: nil, **opts)
  @store_tracker = store_tracker
  super(*args, **opts)
end

Public Instance Methods

[](name) click to toggle source
Calls superclass method
# File lib/associate_jsonb/arel_extensions/table.rb, line 23
def [](name)
  return super unless store_col = store_tracker&.get(name)

  attr = ::Arel::Nodes::Jsonb::DashDoubleArrow.
    new(self, self[store_col[:store]], store_col[:key])

  if cast_as = (store_col[:cast] && store_col[:cast][:sql_type])
    attr = ::Arel::Nodes::NamedFunction.new(
      "CAST",
      [ attr.as(cast_as) ]
    )
  end

  Arel::Nodes::Jsonb::Attribute.new(self, name, attr)
end
alias(...) click to toggle source
Calls superclass method
# File lib/associate_jsonb/arel_extensions/table.rb, line 14
def alias(...)
  super(...).with_store_tracker(store_tracker)
end
with_store_tracker(tracker) click to toggle source
# File lib/associate_jsonb/arel_extensions/table.rb, line 18
def with_store_tracker(tracker)
  @store_tracker = tracker
  self
end