class Motion::ComponentConnection

Attributes

component[R]
log_helper[R]

Public Class Methods

from_state( state, serializer: Motion.serializer, log_helper: LogHelper.new, **kargs ) click to toggle source
# File lib/motion/component_connection.rb, line 7
def self.from_state(
  state,
  serializer: Motion.serializer,
  log_helper: LogHelper.new,
  **kargs
)
  component = serializer.deserialize(state)

  new(component, log_helper: log_helper.for_component(component), **kargs)
end
new(component, log_helper: LogHelper.for_component(component)) click to toggle source
# File lib/motion/component_connection.rb, line 20
def initialize(component, log_helper: LogHelper.for_component(component))
  @component = component
  @log_helper = log_helper

  timing("Connected") do
    @render_hash = component.render_hash

    component.process_connect
  end
end

Public Instance Methods

broadcasts() click to toggle source
# File lib/motion/component_connection.rb, line 94
def broadcasts
  component.broadcasts
end
close() click to toggle source
# File lib/motion/component_connection.rb, line 31
def close
  timing("Disconnected") do
    component.process_disconnect
  end

  true
rescue => error
  handle_error(error, "disconnecting the component")

  false
end
if_render_required() { |component| ... } click to toggle source
# File lib/motion/component_connection.rb, line 79
def if_render_required(&block)
  timing("Rendered") do
    next_render_hash = component.render_hash

    return if @render_hash == next_render_hash &&
      !component.awaiting_forced_rerender?

    yield(component)

    @render_hash = next_render_hash
  end
rescue => error
  handle_error(error, "rendering the component")
end
periodic_timers() click to toggle source
# File lib/motion/component_connection.rb, line 98
def periodic_timers
  component.periodic_timers
end
process_broadcast(broadcast, message) click to toggle source
# File lib/motion/component_connection.rb, line 55
def process_broadcast(broadcast, message)
  timing("Processed broadcast to #{broadcast}") do
    component.process_broadcast broadcast, message
  end

  true
rescue => error
  handle_error(error, "processing a broadcast to #{broadcast}")

  false
end
process_motion(motion, event = nil) click to toggle source
# File lib/motion/component_connection.rb, line 43
def process_motion(motion, event = nil)
  timing("Processed #{motion}") do
    component.process_motion(motion, event)
  end

  true
rescue => error
  handle_error(error, "processing #{motion}")

  false
end
process_periodic_timer(timer) click to toggle source
# File lib/motion/component_connection.rb, line 67
def process_periodic_timer(timer)
  timing("Processed periodic timer #{timer}") do
    component.process_periodic_timer timer
  end

  true
rescue => error
  handle_error(error, "processing periodic timer #{timer}")

  false
end

Private Instance Methods

handle_error(error, context) click to toggle source
# File lib/motion/component_connection.rb, line 110
def handle_error(error, context)
  log_helper.error("An error occurred while #{context}", error: error)
end
timing(context, &block) click to toggle source
# File lib/motion/component_connection.rb, line 106
def timing(context, &block)
  log_helper.timing(context, &block)
end