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