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
kls.class_eval "@search_prefixes ||=[]"
kls.class_eval "def self.search_prefixes *args; @search_prefixes.unshift *args unless args.empty?; @search_prefixes; end"
kls.class_eval " def self.inherited sub\n sub.class_eval '@search_prefixes = []'\n sub.search_prefixes *self.search_prefixes\n end\n EOF\nend\n"
|
Instance Method Details
#===(o) ⇒ Object
14
|
# File 'lib/efl.rb', line 14
def === o; @ptr === o.to_ptr; end
|
#address ⇒ Object
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_a ⇒ Object
9
|
# File 'lib/efl.rb', line 9
def to_a; [self] end
|
#to_ary ⇒ Object
10
|
# File 'lib/efl.rb', line 10
def to_ary; [self] end
|
#to_ptr ⇒ Object
13
|
# File 'lib/efl.rb', line 13
def to_ptr; @ptr; end
|
#to_s ⇒ Object
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
|