class WebsocketRails::ControllerFactory

Attributes

controller_stores[R]
dispatcher[R]

Public Class Methods

new(dispatcher) click to toggle source
# File lib/websocket_rails/controller_factory.rb, line 6
def initialize(dispatcher)
  @dispatcher = dispatcher
  @controller_stores = {}
  @initialized_controllers = {}
end

Public Instance Methods

new_for_event(event, controller_class, method) click to toggle source

TODO: Add deprecation notice for user defined instance variables.

# File lib/websocket_rails/controller_factory.rb, line 14
def new_for_event(event, controller_class, method)
  controller_class = reload!(controller_class)
  controller = controller_class.new

  prepare(controller, event, method)

  controller
end

Private Instance Methods

initialize_controller(controller) click to toggle source
# File lib/websocket_rails/controller_factory.rb, line 57
def initialize_controller(controller)
  unless @initialized_controllers[controller.class] == true
    controller.send(:initialize_session) if controller.respond_to?(:initialize_session)
    @initialized_controllers[controller.class] = true
  end
end
prepare(controller, event, method) click to toggle source
# File lib/websocket_rails/controller_factory.rb, line 29
def prepare(controller, event, method)
  set_event(controller, event)
  set_dispatcher(controller, dispatcher)
  set_controller_store(controller)
  set_action_name(controller, method)
  initialize_controller(controller)
end
reload!(controller) click to toggle source

Reloads the controller class to pick up code changes while in the development environment.

# File lib/websocket_rails/controller_factory.rb, line 66
def reload!(controller)
  return controller unless defined?(Rails) and !Rails.configuration.cache_classes
  # we don't reload our own controller as we assume it provide as 'library'
  unless controller.name == "WebsocketRails::InternalController"
    class_name = controller.name
    filename = class_name.underscore
    load "#{filename}.rb"
    return class_name.constantize
  end

  return controller
end
set_action_name(controller, method) click to toggle source
# File lib/websocket_rails/controller_factory.rb, line 49
def set_action_name(controller, method)
  set_ivar :@_action_name, controller, method.to_s
end
set_controller_store(controller) click to toggle source
# File lib/websocket_rails/controller_factory.rb, line 45
def set_controller_store(controller)
  set_ivar :@_controller_store, controller, store_for_controller(controller)
end
set_dispatcher(controller, dispatcher) click to toggle source
# File lib/websocket_rails/controller_factory.rb, line 41
def set_dispatcher(controller, dispatcher)
  set_ivar :@_dispatcher, controller, dispatcher
end
set_event(controller, event) click to toggle source
# File lib/websocket_rails/controller_factory.rb, line 37
def set_event(controller, event)
  set_ivar :@_event, controller, event
end
set_ivar(ivar, object, value) click to toggle source
# File lib/websocket_rails/controller_factory.rb, line 53
def set_ivar(ivar, object, value)
  object.instance_variable_set(ivar, value)
end
store_for_controller(controller) click to toggle source
# File lib/websocket_rails/controller_factory.rb, line 25
def store_for_controller(controller)
  @controller_stores[controller.class] ||= DataStore::Controller.new(controller)
end