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 60
def already_set_up
  klass.respond_to? :gtype
end
enum_sym() click to toggle source
# File lib/gir_ffi/builders/enum_builder.rb, line 14
def enum_sym
  @classname.to_sym
end
klass() click to toggle source
# File lib/gir_ffi/builders/enum_builder.rb, line 34
def klass
  @klass ||= get_or_define_module namespace_module, @classname
end
setup_class() click to toggle source
# File lib/gir_ffi/builders/enum_builder.rb, line 25
def setup_class
  setup_ffi_type
  klass.extend superclass
  setup_constants
  setup_value_constants
  stub_methods
  setup_inspect
end
setup_ffi_type() click to toggle source
# File lib/gir_ffi/builders/enum_builder.rb, line 38
def setup_ffi_type
  optionally_define_constant klass, :Enum do
    lib.enum(enum_sym, value_spec)
  end
end
setup_inspect() click to toggle source
# File lib/gir_ffi/builders/enum_builder.rb, line 52
      def setup_inspect
        klass.instance_eval <<-RUBY, __FILE__, __LINE__ + 1
          def self.inspect                  # def self.inspect
            "#{@namespace}::#{@classname}"  #   "GFoo::Bar"
          end                               # end
        RUBY
      end
setup_value_constants() click to toggle source
# File lib/gir_ffi/builders/enum_builder.rb, line 44
def setup_value_constants
  value_infos.each do |vinfo|
    optionally_define_constant klass, vinfo.constant_name do
      vinfo.value
    end
  end
end
superclass() click to toggle source
# File lib/gir_ffi/builders/enum_builder.rb, line 64
def superclass
  EnumBase
end
value_infos() click to toggle source
# File lib/gir_ffi/builders/enum_builder.rb, line 68
def value_infos
  @value_infos ||= info.values
end
value_spec() click to toggle source
# File lib/gir_ffi/builders/enum_builder.rb, line 18
def value_spec
  value_infos.map do |vinfo|
    val = GirFFI::ArgHelper.cast_uint32_to_int32(vinfo.value)
    [vinfo.name.to_sym, val]
  end.flatten
end