Class: GObjectIntrospection::IBaseInfo

Inherits:
Object
  • Object
show all
Defined in:
lib/ffi-gobject_introspection/i_base_info.rb

Overview

Wraps GIBaseInfo struct, the base type for all info types. Decendant types will be implemented as needed.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(ptr, lib = Lib) ⇒ IBaseInfo

Returns a new instance of IBaseInfo.

Raises:

  • (ArgumentError)


7
8
9
10
11
12
13
14
# File 'lib/ffi-gobject_introspection/i_base_info.rb', line 7

def initialize(ptr, lib = Lib)
  raise ArgumentError, 'ptr must not be null' if ptr.null?

  ObjectSpace.define_finalizer self, self.class.make_finalizer(lib, ptr)

  @pointer = ptr
  @lib = lib
end

Instance Attribute Details

#pointerObject (readonly)

Returns the value of attribute pointer.



16
17
18
# File 'lib/ffi-gobject_introspection/i_base_info.rb', line 16

def pointer
  @pointer
end

Class Method Details

.build_array_method(method, single = nil) ⇒ Object

This is a helper method to construct a method returning an array, out of the methods returning their number and the individual elements.

For example, given the methods n_foos and foo(i), this method will create an additional method foos returning all foos.

Provide the second parameter if the plural is not trivially constructed by adding s to the singular.

Examples:

build_array_method :fields
build_array_mehtod :properties, :property
build_array_method :get_methods


41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/ffi-gobject_introspection/i_base_info.rb', line 41

def self.build_array_method(method, single = nil)
  method = method.to_s
  single ||= method[0..-2]
  count = method.sub(/^(get_)?/, '\\1n_')
  class_eval <<-CODE, __FILE__, __LINE__ + 1
    def #{method}
      (0..(#{count} - 1)).map do |i|
        #{single} i
      end
    end
  CODE
end

.build_finder_method(method, counter = nil, fetcher = nil) ⇒ Object

This is a helper method to construct a method for finding an element, out of the methods returning their number and the individual elements.

For example, given the methods n_foos and foo(i), this method will create an additional method find_foo returning the foo with the matching name.

Optionally provide counter and fetcher methods if they cannot be trivially derived from the finder method.

Examples:

build_finder_method :find_field
build_finder_method :find_property, :n_properties
build_finder_method :find_method, :get_n_methods, :get_method


70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/ffi-gobject_introspection/i_base_info.rb', line 70

def self.build_finder_method(method, counter = nil, fetcher = nil)
  method = method.to_s
  single = method.sub(/^find_/, '')
  counter ||= "n_#{single}s"
  fetcher ||= single
  class_eval <<-CODE, __FILE__, __LINE__ + 1
    def #{method}(name)
      name = name.to_s
      #{counter}.times do |i|
        it = #{fetcher}(i)
        return it if it.name == name
      end
      nil
    end
  CODE
end

.make_finalizer(lib, ptr) ⇒ Object



18
19
20
# File 'lib/ffi-gobject_introspection/i_base_info.rb', line 18

def self.make_finalizer(lib, ptr)
  proc { lib.g_base_info_unref ptr }
end

.wrap(ptr) ⇒ Object



117
118
119
# File 'lib/ffi-gobject_introspection/i_base_info.rb', line 117

def self.wrap(ptr)
  new ptr unless ptr.null?
end

Instance Method Details

#==(other) ⇒ Object



121
122
123
# File 'lib/ffi-gobject_introspection/i_base_info.rb', line 121

def ==(other)
  other.is_a?(IBaseInfo) && Lib.g_base_info_equal(self, other)
end

#attribute(name) ⇒ Object



113
114
115
# File 'lib/ffi-gobject_introspection/i_base_info.rb', line 113

def attribute(name)
  Lib.g_base_info_get_attribute self, name
end

#containerObject



103
104
105
106
107
# File 'lib/ffi-gobject_introspection/i_base_info.rb', line 103

def container
  ptr = Lib.g_base_info_get_container self
  Lib.g_base_info_ref ptr
  IRepository.wrap_ibaseinfo_pointer ptr
end

#deprecated?Boolean

Returns:

  • (Boolean)


109
110
111
# File 'lib/ffi-gobject_introspection/i_base_info.rb', line 109

def deprecated?
  Lib.g_base_info_is_deprecated self
end

#info_typeObject



91
92
93
# File 'lib/ffi-gobject_introspection/i_base_info.rb', line 91

def info_type
  Lib.g_base_info_get_type self
end

#nameObject



87
88
89
# File 'lib/ffi-gobject_introspection/i_base_info.rb', line 87

def name
  Lib.g_base_info_get_name self
end

#namespaceObject



95
96
97
# File 'lib/ffi-gobject_introspection/i_base_info.rb', line 95

def namespace
  Lib.g_base_info_get_namespace self
end

#safe_namespaceObject



99
100
101
# File 'lib/ffi-gobject_introspection/i_base_info.rb', line 99

def safe_namespace
  namespace.gsub(/^./, &:upcase)
end

#to_ptrObject



22
23
24
# File 'lib/ffi-gobject_introspection/i_base_info.rb', line 22

def to_ptr
  @pointer
end