class GirFFI::Builders::ObjectBuilder

Implements the creation of a class representing a GObject Object.

Public Instance Methods

find_property(property_name) click to toggle source
# File lib/gir_ffi/builders/object_builder.rb, line 23
def find_property property_name
  info.find_property property_name or
    superclass.find_property property_name or
    raise "Property #{property_name} not found"
end
find_signal(signal_name) click to toggle source
# File lib/gir_ffi/builders/object_builder.rb, line 14
def find_signal signal_name
  signal_definers.each do |inf|
    sig = inf.find_signal signal_name
    return sig if sig
  end
  superclass.find_signal signal_name or
    raise "Signal #{signal_name} not found"
end

Private Instance Methods

define_vfunc_invoker(vfunc_name, invoker_name) click to toggle source
# File lib/gir_ffi/builders/object_builder.rb, line 95
def define_vfunc_invoker vfunc_name, invoker_name
  return if vfunc_name == invoker_name
  @klass.class_eval "
    def #{vfunc_name} *args, &block
      #{invoker_name}(*args, &block)
    end
  "
end
interfaces() click to toggle source
# File lib/gir_ffi/builders/object_builder.rb, line 116
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 46
def layout_superclass
  FFI::Struct
end
parent() click to toggle source
# File lib/gir_ffi/builders/object_builder.rb, line 50
def parent
  unless defined? @parent
    pr = info.parent
    if pr.nil? or (pr.safe_name == @classname and pr.namespace == @namespace)
      @parent = nil
    else
      @parent = pr
    end
  end
  @parent
end
setup_accessors_for_property_info(prop) click to toggle source
# File lib/gir_ffi/builders/object_builder.rb, line 77
def setup_accessors_for_property_info prop
  builder = Builder::Property.new prop
  unless info.find_instance_method prop.getter_name
    @klass.class_eval builder.getter_def
  end
  @klass.class_eval builder.setter_def
end
setup_class() click to toggle source
# File lib/gir_ffi/builders/object_builder.rb, line 31
def setup_class
  setup_layout
  setup_constants
  stub_methods
  setup_gtype_getter
  if info.fundamental?
    setup_field_accessors
  else
    setup_property_accessors
  end
  setup_vfunc_invokers
  setup_interfaces
end
setup_interfaces() click to toggle source
# File lib/gir_ffi/builders/object_builder.rb, line 104
def setup_interfaces
  interfaces.each do |iface|
    @klass.class_eval do
      include iface
    end
  end
end
setup_property_accessors() click to toggle source

TODO: Unify with field accessor setup.

# File lib/gir_ffi/builders/object_builder.rb, line 71
def setup_property_accessors
  info.properties.each do |prop|
    setup_accessors_for_property_info prop
  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 87
def setup_vfunc_invokers
  info.vfuncs.each do |vfinfo|
    if (invoker = vfinfo.invoker)
      define_vfunc_invoker vfinfo.name, invoker.name
    end
  end
end
signal_definers() click to toggle source
# File lib/gir_ffi/builders/object_builder.rb, line 112
def signal_definers
  [info] + info.interfaces
end
superclass() click to toggle source
# File lib/gir_ffi/builders/object_builder.rb, line 62
def superclass
  @superclass ||= if parent
                    Builder.build_class parent
                  else
                    ObjectBase
                  end
end