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.
# File lib/gir_ffi/builders/enum_builder.rb, line 48 def already_set_up @klass.respond_to? :get_gtype end
# File lib/gir_ffi/builders/enum_builder.rb, line 15 def enum_sym @classname.to_sym end
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
# 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
# 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
# File lib/gir_ffi/builders/enum_builder.rb, line 52 def superclass @superclass ||= EnumBase end
# 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