class GirFFI::Builders::EnumBuilder

Implements the creation of an enum or flags type. The type will be attached to the appropriate namespace module, and will be defined as an enum for FFI.

Private Instance Methods

already_set_up() click to toggle source
# File lib/gir_ffi/builders/enum_builder.rb, line 48
def already_set_up
  @klass.respond_to? :get_gtype
end
enum_sym() click to toggle source
# File lib/gir_ffi/builders/enum_builder.rb, line 15
def enum_sym
  @classname.to_sym
end
get_or_define_module(parent, name) click to toggle source

FIXME: Remove duplication with ModuleBuilder

# File lib/gir_ffi/builders/enum_builder.rb, line 57
def get_or_define_module parent, name
  optionally_define_constant(parent, name) { ::Module.new }
end
instantiate_class() click to toggle source
# File lib/gir_ffi/builders/enum_builder.rb, line 26
def instantiate_class
  @klass = get_or_define_module namespace_module, @classname
  @enum = optionally_define_constant @klass, :Enum do
    lib.enum(enum_sym, value_spec)
  end
  unless already_set_up
    @klass.extend superclass
    setup_constants
    setup_gtype_getter
    stub_methods
    setup_inspect
  end
end
setup_inspect() click to toggle source
# File lib/gir_ffi/builders/enum_builder.rb, line 40
def setup_inspect
  @klass.instance_eval <<-EOS
    def self.inspect
      "#{@namespace}::#{@classname}"
    end
  EOS
end
superclass() click to toggle source
# File lib/gir_ffi/builders/enum_builder.rb, line 52
def superclass
  @superclass ||= EnumBase
end
value_spec() click to toggle source
# File lib/gir_ffi/builders/enum_builder.rb, line 19
def value_spec
  return info.values.map {|vinfo|
    val = GirFFI::ArgHelper.cast_uint32_to_int32(vinfo.value)
    [vinfo.name.to_sym, val]
  }.flatten
end