module Tengine::Core::Driveable

イベントドライバ定義モジュール

Public Class Methods

__find_session_id_for_driver_name__(driver_name) click to toggle source
# File lib/tengine/core/driveable.rb, line 239
def __find_session_id_for_driver_name__(driver_name)
  return nil unless @driver_name_to_session_id
  @driver_name_to_session_id[driver_name]
end
__forget_session_ids_for_drivers__() click to toggle source
# File lib/tengine/core/driveable.rb, line 235
def __forget_session_ids_for_drivers__
  @driver_name_to_session_id = nil
end
__remember_session_ids_for_drivers__(dsl_version) click to toggle source
# File lib/tengine/core/driveable.rb, line 228
def __remember_session_ids_for_drivers__(dsl_version)
  @driver_name_to_session_id = {}
  Tengine::Core::Driver.where(:version => dsl_version).each do |d|
    @driver_name_to_session_id[d.name] = d.session_id
  end
end
method_added(method_name) click to toggle source
# File lib/tengine/core/driveable.rb, line 49
def self.method_added(method_name)
  return unless @__context__.__on_args__
  args = @__context__.__on_args__
  @__context__.__on_args__ = nil
  return unless @__context__.__creating_driver__
  driver = @__context__.driver
  reload_driver_with_cache_message_if_need(driver)
  options = args.extract_options!
  handler = driver.handlers.create!({
      :event_type_names => args,
      :target_instantiation_key => :instance_method,
      :target_method_name => method_name.to_s
    }.update(options))
  args.each do |event_type_name|
    driver.handler_paths.find_or_create_by(:event_type_name => event_type_name, :handler_id => handler.id)
  end
end
reload_driver_with_cache_message_if_need(driver) click to toggle source

–tengined-cache-driversオプションを指定せずに複数のtenginedプロセスを起動すると ドライバのリロードに失敗することがあるため、複数プロセスを起動する際には、 –tengined-cache-driversオプションを指定するようにメッセージを出力します。

# File lib/tengine/core/driveable.rb, line 96
def self.reload_driver_with_cache_message_if_need(driver)
  begin
    driver.reload
  rescue Mongoid::Errors::DocumentNotFound => e
    Tengine::Core.stderr_logger.error("[#{Process.pid}] failed to reload driver. Use --tengined-cache-drivers option if you execute multiple tengined processes. driver : #{driver.inspect}. ")
    raise e
  end
end
singleton_method_added(method_name) click to toggle source
# File lib/tengine/core/driveable.rb, line 67
def self.singleton_method_added(method_name)
  return if method_name == :singleton_method_added
  # def self.hoge... と class << self; def baz...; end ではselfが異なる
  # (前者はclass自身、後者はclassのsingleton_classになる)ので、差異を吸収するために
  # selfが前者の場合@__context__には後者への参照が設定されており、
  # selfが後者の場合には、@__context__はnilなので、selfを使うことによって
  # 同じインスタンスの__on_args__を使用することが可能になります。
  context = @__context__ || self
  return unless context.__on_args__
  args = context.__on_args__
  context.__on_args__ = nil
  return unless @__context__.__creating_driver__
  driver = context.driver
  reload_driver_with_cache_message_if_need(driver)
  options = args.extract_options!
  handler = driver.handlers.create!({
      :event_type_names => args,
      :target_instantiation_key => :static,
      :target_method_name => method_name.to_s
    }.update(options))
  # puts "handler: #{handler.inspect}\n#{args.inspect}"
  args.each do |event_type_name|
    driver.handler_paths.create!(:event_type_name => event_type_name, :handler_id => handler.id)
  end
end

Public Instance Methods

__creating_driver__() click to toggle source
# File lib/tengine/core/driveable.rb, line 19
def __creating_driver__; @__creating_driver__; end
__creating_driver__=(val) click to toggle source
# File lib/tengine/core/driveable.rb, line 20
def __creating_driver__=(val); @__creating_driver__ = val; end
__on_args__() click to toggle source
# File lib/tengine/core/driveable.rb, line 16
def __on_args__; @__on_args__; end
__on_args__=(val) click to toggle source
# File lib/tengine/core/driveable.rb, line 17
def __on_args__=(val); @__on_args__ = val; end
ack?() click to toggle source
# File lib/tengine/core/driveable.rb, line 204
def ack?; kernel.ack?; end
driver() click to toggle source
# File lib/tengine/core/driveable.rb, line 13
def driver; @driver; end
driver=(val) click to toggle source
# File lib/tengine/core/driveable.rb, line 14
def driver=(val); @driver = val; end
event() click to toggle source
# File lib/tengine/core/driveable.rb, line 195
def event
  @__event_wrapper__ ||= (@__event__ ? Tengine::Core::EventWrapper.new(@__event__) : nil)
end
fire(*args, &block) click to toggle source
# File lib/tengine/core/driveable.rb, line 207
def fire(*args, &block)
  kernel.fire(*args, &block)
end
kernel() click to toggle source
# File lib/tengine/core/driveable.rb, line 199
def kernel
  ev = @__event__
  ev ? ev.kernel : nil
end
session() click to toggle source
# File lib/tengine/core/driveable.rb, line 191
def session
  self.class.session
end
submit() click to toggle source
# File lib/tengine/core/driveable.rb, line 205
def submit; kernel.submit; end