/usr/lib/ruby/vendor_ruby/ffi-gobject_introspection/i_base_info.rb is in ruby-gir-ffi 0.9.0-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | module GObjectIntrospection
# Wraps GIBaseInfo struct, the base \type for all info types.
# Decendant types will be implemented as needed.
class IBaseInfo
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)
@gobj = ptr
@lib = lib
end
def self.make_finalizer(lib, ptr)
proc { lib.g_base_info_unref ptr }
end
def to_ptr
@gobj
end
# 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
#
def self.build_array_method(method, single = nil)
method = method.to_s
single ||= method.to_s[0..-2]
count = method.sub(/^(get_)?/, '\\1n_')
class_eval <<-CODE
def #{method}
(0..(#{count} - 1)).map do |i|
#{single} i
end
end
CODE
end
# 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
#
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
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
def name
Lib.g_base_info_get_name @gobj
end
def info_type
Lib.g_base_info_get_type @gobj
end
def namespace
Lib.g_base_info_get_namespace @gobj
end
def safe_namespace
namespace.gsub(/^./, &:upcase)
end
def container
ptr = Lib.g_base_info_get_container @gobj
Lib.g_base_info_ref ptr
IRepository.wrap_ibaseinfo_pointer ptr
end
def deprecated?
Lib.g_base_info_is_deprecated @gobj
end
def attribute(name)
Lib.g_base_info_get_attribute @gobj, name
end
def self.wrap(ptr)
new ptr unless ptr.null?
end
def ==(other)
other.is_a?(IBaseInfo) && Lib.g_base_info_equal(@gobj, other)
end
end
end
|