Module: Efl::MethodResolver

Defined in:
lib/efl/native.rb

Class Method Summary collapse

Class Method Details

.resolve(mod, meth, prefix) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/efl/native.rb', line 9

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