module Tengine::Core::Driveable::ClassMethods
Public Instance Methods
driver()
click to toggle source
# File lib/tengine/core/driveable.rb, line 112 def driver unless @driver driver_attrs = { :name => self.driver_name, # self.name.gsub(/:/, 'Colon'), :version => Tengine::Core::Setting.dsl_version } @driver = Tengine::Core::Driver.where(driver_attrs).first end @driver end
driver_name()
click to toggle source
# File lib/tengine/core/driveable.rb, line 107 def driver_name return nil if self.name.nil? (self < Tengine::Core::Driveable::ByDsl) ? self.name.underscore : self.name end
on(*args, &block)
click to toggle source
# File lib/tengine/core/driveable.rb, line 127 def on(*args, &block) context = @__context__ || self options = args.extract_options! event_type_names = args if block filepath, lineno = *block.source_location filepath = context.config.relative_path_from_dsl_dir(filepath.dup.force_encoding(Encoding.default_external).freeze) options.update(:filepath => filepath, :lineno => lineno) filter_def = nil handler = nil if event_type_names.length == 1 && event_type_names.first.is_a?(Tengine::Core::DslFilterDef) filter_def = event_type_names.first options[:filter] = filter_def.filter event_type_names = filter_def.event_type_names base_method_name = event_type_names.map(&:to_s).join("_") driver = context.driver driver.reload method_name = filter_def.to_method_name attrs = { :target_method_name => method_name, :event_type_names => event_type_names, # :target_instantiation_key => :instance_method, # attrsを検索にも使うので_cdの方を指定しています :target_instantiation_cd => Tengine::Core::Handler.target_instantiation_id_by_key(:instance_method), } # .update(options) handler = driver.handlers.find_or_initialize_by(attrs) options.each{|k,v| handler.send("#{k}=", v)} handler.save! event_type_names.each do |event_type_name| driver.handler_paths.find_or_create_by(:event_type_name => event_type_name, :handler_id => handler.id) end else method_name = event_type_names.map(&:to_s).join("_") context.__on_args__ = event_type_names.map(&:to_s) + [options] end case block.arity when 1 then define_method(method_name, &block) when 0 then impl_method_name = "__#{method_name}_impl__" self.instance_eval do define_method(method_name) do |event| @__event__ = event begin send(impl_method_name) ensure @__event__ = nil end end define_method(impl_method_name, &block) end else raise Tengine::Core::DslError, "#{block.artity} aritties block given" end # handler.save! if handler else filepath, lineno = *caller.first.sub(/:in.+\Z/, '').split(/:/, 2) options.update(:filepath => filepath, :lineno => lineno) context.__on_args__ = ( args + [options] ) end end
session()
click to toggle source
# File lib/tengine/core/driveable.rb, line 123 def session @__session_wrapper__ ||= Tengine::Core::SessionWrapper.new(driver.session) end