From df490aebdfce1d52f4e5c79cd778ea088cdff71f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Zurcher?= Date: Thu, 19 Jan 2012 17:28:28 +0100 Subject: lib/efl/ffi.rb: add module MethResolver --- lib/efl/ffi.rb | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/lib/efl/ffi.rb b/lib/efl/ffi.rb index f1c1d7d..98a9d69 100644 --- a/lib/efl/ffi.rb +++ b/lib/efl/ffi.rb @@ -112,6 +112,36 @@ module Efl module_function :find_function end # + module MethResolver + def self.resolve mod, meth, prefix + meth_s = meth.to_s + if meth_s =~/^(.*)=$/ + meth_s = $1+'_set' + args_s = '*args[0]' + elsif meth_s =~/^(.*)\?$/ + meth_s = $1+'_get' + args_s = '*args' + else + args_s = '*args' + end + sym = ( + if Efl::Native.respond_to? prefix+meth_s + prefix+meth_s + elsif Efl::Native.respond_to? meth_s + meth_s + elsif Efl::Native.respond_to? prefix+meth_s+'_get' + prefix+meth_s+'_get' + elsif Efl::Native.respond_to? meth_s+'_get' + meth_s+'_get' + else + raise NameError.new "#{mod.name}.#{meth_s} (#{meth})" + end + ) + mod.module_eval "def self.#{meth} *args, █ r=Efl::Native.#{sym}(#{args_s}); yield r if block_given?; r; end" + sym + end + end + # module ClassHelper def to_a; [self] end def to_ary; [self] end -- cgit v1.1-2-g2b99