class GirFFI::Builders::ObjectBuilder
Implements the creation of a class representing a GObject
Object
.
Public Instance Methods
ancestor_infos()
click to toggle source
# File lib/gir_ffi/builders/object_builder.rb, line 51 def ancestor_infos @ancestor_infos ||= [info] + info.interfaces + parent_ancestor_infos end
class_struct_class()
click to toggle source
# File lib/gir_ffi/builders/object_builder.rb, line 38 def class_struct_class @class_struct_class ||= begin parent_struct = parent_builder.class_struct_class if class_struct_info StructBuilder.new(class_struct_info, superclass: parent_struct).build_class else parent_struct end end end
eligible_properties()
click to toggle source
# File lib/gir_ffi/builders/object_builder.rb, line 55 def eligible_properties info.properties.reject do |pinfo| info.find_instance_method("get_#{pinfo.name}") end end
find_property(property_name)
click to toggle source
# File lib/gir_ffi/builders/object_builder.rb, line 34 def find_property(property_name) seek_in_ancestor_infos { |info| info.find_property property_name } end
find_signal(signal_name)
click to toggle source
# File lib/gir_ffi/builders/object_builder.rb, line 30 def find_signal(signal_name) seek_in_ancestor_infos { |info| info.find_signal signal_name } end
Private Instance Methods
class_struct_info()
click to toggle source
# File lib/gir_ffi/builders/object_builder.rb, line 73 def class_struct_info @class_struct_info ||= info.class_struct end
define_abstract_initializer()
click to toggle source
# File lib/gir_ffi/builders/object_builder.rb, line 136 def define_abstract_initializer klass.class_eval <<-RUBY, __FILE__, __LINE__ + 1 def initialize(*) raise NoMethodError end RUBY end
define_default_initializer()
click to toggle source
# File lib/gir_ffi/builders/object_builder.rb, line 144 def define_default_initializer klass.class_eval <<-RUBY, __FILE__, __LINE__ + 1 def initialize(properties = {}) base_initialize(properties) end RUBY end
define_vfunc_invoker(vfunc_name, invoker_name)
click to toggle source
# File lib/gir_ffi/builders/object_builder.rb, line 116 def define_vfunc_invoker(vfunc_name, invoker_name) return if vfunc_name == invoker_name klass.class_eval <<-DEF, __FILE__, __LINE__ + 1 def #{vfunc_name} *args, &block # def foo *args, &block #{invoker_name}(*args, &block) # foo_invoker *args, &block end # end DEF end
interfaces()
click to toggle source
# File lib/gir_ffi/builders/object_builder.rb, line 158 def interfaces info.interfaces.map do |ifinfo| GirFFI::Builder.build_class ifinfo end end
layout_superclass()
click to toggle source
FIXME: Private method only used in subclass
# File lib/gir_ffi/builders/object_builder.rb, line 78 def layout_superclass GirFFI::Struct end
parent_ancestor_infos()
click to toggle source
# File lib/gir_ffi/builders/object_builder.rb, line 98 def parent_ancestor_infos @parent_ancestor_infos ||= parent_builder.ancestor_infos end
parent_builder()
click to toggle source
# File lib/gir_ffi/builders/object_builder.rb, line 90 def parent_builder @parent_builder ||= if parent_info Builders::TypeBuilder.builder_for(parent_info) else ObjectBaseBuilder.new end end
parent_info()
click to toggle source
# File lib/gir_ffi/builders/object_builder.rb, line 82 def parent_info info.parent end
seek_in_ancestor_infos() { |info| ... }
click to toggle source
# File lib/gir_ffi/builders/object_builder.rb, line 164 def seek_in_ancestor_infos ancestor_infos.each do |info| item = yield info return item if item end nil end
setup_class()
click to toggle source
# File lib/gir_ffi/builders/object_builder.rb, line 63 def setup_class setup_layout setup_constants stub_methods setup_property_accessors setup_vfunc_invokers setup_interfaces setup_initializer end
setup_initializer()
click to toggle source
# File lib/gir_ffi/builders/object_builder.rb, line 126 def setup_initializer return if info.find_method "new" if info.abstract? define_abstract_initializer else define_default_initializer end end
setup_interfaces()
click to toggle source
# File lib/gir_ffi/builders/object_builder.rb, line 152 def setup_interfaces interfaces.each do |iface| klass.send :include, iface end end
setup_property_accessors()
click to toggle source
# File lib/gir_ffi/builders/object_builder.rb, line 102 def setup_property_accessors eligible_properties.each do |prop| PropertyBuilder.new(prop).build end end
setup_vfunc_invokers()
click to toggle source
TODO: Guard agains accidental invocation of undefined vfuncs. TODO: Create object responsible for creating these invokers
# File lib/gir_ffi/builders/object_builder.rb, line 110 def setup_vfunc_invokers info.vfuncs.each do |vfinfo| define_vfunc_invoker vfinfo.name, vfinfo.invoker_name if vfinfo.has_invoker? end end
superclass()
click to toggle source
# File lib/gir_ffi/builders/object_builder.rb, line 86 def superclass @superclass ||= parent_builder.build_class end