class Pakyow::UI::Handler

@api private

Public Class Methods

new(app) click to toggle source
# File lib/pakyow/ui/handler.rb, line 16
def initialize(app)
  @app = app
end

Public Instance Methods

call(args, subscription: nil, result: nil) click to toggle source
# File lib/pakyow/ui/handler.rb, line 20
def call(args, subscription: nil, result: nil)
  renderer = Marshal.restore(args[:metadata])[:renderer]
  renderer.presentables[:__ui_transform] = true

  # If an ephemeral caused the update, replace the value for any matching presentables.
  #
  if result.is_a?(Data::Sources::Ephemeral)
    renderer.presentables.each do |key, value|
      if value.is_a?(Data::Proxy) && value.source.is_a?(Data::Sources::Ephemeral) && value.source.type == result.type && value.source.qualifications == result.qualifications
        value.instance_variable_set(:@source, result)
      end
    end
  end

  renderer.perform

  @app.websocket_server.subscription_broadcast(
    Realtime::Channel.new(:transformation, subscription[:id]),
    { id: args[:transformation_id], calls: renderer.presenter }
  )
end