Module: Efl::ClassHelper

Class Method Summary collapse

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(m, *args, &block) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/efl.rb', line 30

def method_missing m, *args, &block
    m_s = m.to_s
    if m_s =~/^(.*)=$/
        m_s = $1+'_set'
        args_s = '*args[0]'
    elsif m_s =~/^(.*)\?$/
        m_s = $1+'_get'
        args_s = '*args'
    else
        args_s = '*args'
    end
    (['']+self.class.search_prefixes).each do |p|
        sym = p+m_s
        meth = (
            if Efl::Native.respond_to? sym
                sym
            elsif Efl::Native.respond_to? m_s
                m_s
            elsif Efl::Native.respond_to? sym+'_get'
                sym+'_get'
            elsif Efl::Native.respond_to? m_s+'_get'
                m_s+'_get'
            else
                nil
            end
        )
        if not meth.nil?
            self.class.class_eval "def #{m} *args, █ r=Efl::Native.#{meth}(@ptr,#{args_s}); yield r if block_given?; r; end"
            return self.send m, *args, &block
        end
    end
    Kernel.raise NameError.new "#{self.class.name} is unable to resolve #{m} within #{self.class.search_prefixes.inspect}"
end

Class Method Details

.included(kls) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/efl.rb', line 17

def self.included kls
    # create class instance @search_prefixes
    kls.class_eval "@search_prefixes ||=[]"
    # access and prepend *args to @search_prefixes
    kls.class_eval "def self.search_prefixes *args; @search_prefixes.unshift *args unless args.empty?; @search_prefixes; end"
    # on inheritance, copy ancestor's @search_prefixes
    kls.class_eval <<-EOF
    def self.inherited sub
        sub.class_eval '@search_prefixes = []'
        sub.search_prefixes *self.search_prefixes
    end
    EOF
end

Instance Method Details

#===(o) ⇒ Object



14
# File 'lib/efl.rb', line 14

def === o; @ptr === o.to_ptr; end

#addressObject



16
# File 'lib/efl.rb', line 16

def address; @ptr.address; end

#null?Boolean



15
# File 'lib/efl.rb', line 15

def null?; @ptr.null?; end

#to_aObject



9
# File 'lib/efl.rb', line 9

def to_a; [self] end

#to_aryObject



10
# File 'lib/efl.rb', line 10

def to_ary; [self] end

#to_ptrObject



13
# File 'lib/efl.rb', line 13

def to_ptr; @ptr; end

#to_sObject Also known as: to_str



11
# File 'lib/efl.rb', line 11

def to_s; Object.instance_method(:to_s).bind(self).call+' ['+self.to_ptr.to_s+']' end