lib/knj/objects.rb in knjrbfw-0.0.98 vs lib/knj/objects.rb in knjrbfw-0.0.99

- old
+ new

@@ -122,47 +122,51 @@ #This connects a block to an event. When the event is called the block will be executed. def connect(args, &block) raise "No object given." if !args["object"] raise "No signals given." if !args.key?("signal") and !args.key?("signals") args["block"] = block if block_given? - @callbacks[args["object"].to_sym] = {} if !@callbacks[args["object"]] - conn_id = @callbacks[args["object"].to_sym].length.to_s - @callbacks[args["object"].to_sym][conn_id] = args + object = args["object"].to_sym + + @callbacks[object] = {} if !@callbacks[object] + conn_id = @callbacks[object].length.to_s + @callbacks[object][conn_id] = args return conn_id end #Returns true if the given signal is connected to the given object. def connected?(args) raise "No object given." if !args["object"] raise "No signal given." if !args.key?("signal") + object = args["object"].to_sym - if @callbacks.key?(args["object"].to_sym) - @callbacks[args["object"].to_sym].clone.each do |ckey, callback| - return true if callback.key?("signal") and callback["signal"] == args["signal"] - return true if callback.key?("signals") and callback["signals"].index(args["signal"]) != nil + if @callbacks.key?(object) + @callbacks[object].clone.each do |ckey, callback| + return true if callback.key?("signal") and callback["signal"].to_s == args["signal"].to_s + return true if callback.key?("signals") and (callback["signals"].include?(args["signal"].to_s) or callback["signals"].include?(args["signal"].to_sym)) end end return false end #Unconnects a connect by 'object' and 'conn_id'. def unconnect(args) raise ArgumentError, "No object given." if !args["object"] - raise ArgumentError, "Object doesnt exist: '#{args["object"]}'." if !@callbacks.key?(args["object"].to_sym) + object = args["object"].to_sym + raise ArgumentError, "Object doesnt exist: '#{object}'." if !@callbacks.key?(object) if args["conn_id"] conn_ids = [args["conn_id"]] elsif args["conn_ids"] conn_ids = args["conn_ids"] else raise ArgumentError, "Could not figure out connection IDs." end conn_ids.each do |conn_id| - raise Errno::ENOENT, "Conn ID doest exist: '#{conn_id}' (#{args})." if !@callbacks[args["object"].to_sym].key?(conn_id) - @callbacks[args["object"].to_sym].delete(conn_id) + raise Errno::ENOENT, "Conn ID doest exist: '#{conn_id}' (#{args})." if !@callbacks[object].key?(conn_id) + @callbacks[object].delete(conn_id) end end #This method is used to call the connected callbacks for an event. def call(args, &block) @@ -170,13 +174,13 @@ if @callbacks.key?(classstr) @callbacks[classstr].clone.each do |callback_key, callback| docall = false - if callback.key?("signal") and args.key?("signal") and callback["signal"] == args["signal"] + if callback.key?("signal") and args.key?("signal") and callback["signal"].to_s == args["signal"].to_s docall = true - elsif callback["signals"] and args["signal"] and callback["signals"].include?(args["signal"]) + elsif callback["signals"] and args["signal"] and (callback["signals"].include?(args["signal"].to_s) or callback["signals"].include?(args["signal"].to_sym)) docall = true end next if !docall @@ -191,10 +195,10 @@ raise "Unknown number of arguments: #{arity}" end callback["block"].call(*callargs) elsif callback["callback"] - require "php4r" + require "php4r" if !Kernel.const_defined?(:Php4r) Php4r.call_user_func(callback["callback"], args) else raise "No valid callback given." end end \ No newline at end of file