class GirFFI::Builders::ModuleBuilder
Builds a module based on information found in the introspection repository.
Public Class Methods
new(module_name, namespace: module_name, version: nil)
click to toggle source
# File lib/gir_ffi/builders/module_builder.rb, line 14 def initialize(module_name, namespace: module_name, version: nil) @namespace = namespace @version = version @safe_namespace = module_name end
Public Instance Methods
build_namespaced_class(classname)
click to toggle source
# File lib/gir_ffi/builders/module_builder.rb, line 38 def build_namespaced_class(classname) info = find_namespaced_class_info(classname) Builder.build_class info end
find_namespaced_class_info(classname)
click to toggle source
# File lib/gir_ffi/builders/module_builder.rb, line 43 def find_namespaced_class_info(classname) name = classname.to_s info = gir.find_by_name(@namespace, name) || gir.find_by_name(@namespace, name.sub(/^./, &:downcase)) unless info raise NameError, "Class #{classname} not found in namespace #{@namespace}" end info end
generate()
click to toggle source
# File lib/gir_ffi/builders/module_builder.rb, line 20 def generate modul end
method_available?(method)
click to toggle source
# File lib/gir_ffi/builders/module_builder.rb, line 34 def method_available?(method) function_introspection_data(method.to_s) and true end
setup_method(method)
click to toggle source
# File lib/gir_ffi/builders/module_builder.rb, line 24 def setup_method(method) go = function_introspection_data method.to_s return false unless go Builder.attach_ffi_function lib, go modul.class_eval FunctionBuilder.new(go).method_definition, __FILE__, __LINE__ true end
Private Instance Methods
already_set_up()
click to toggle source
# File lib/gir_ffi/builders/module_builder.rb, line 83 def already_set_up @module.const_defined? :GIR_FFI_BUILDER end
build_dependencies()
click to toggle source
# File lib/gir_ffi/builders/module_builder.rb, line 66 def build_dependencies deps = gir.dependencies @namespace deps.each do |dep| name, version = dep.split "-" Builder.build_module name, version end end
function_introspection_data(function)
click to toggle source
# File lib/gir_ffi/builders/module_builder.rb, line 106 def function_introspection_data(function) info = gir.find_by_name @namespace, function.to_s return unless info info.info_type == :function ? info : nil end
gir()
click to toggle source
# File lib/gir_ffi/builders/module_builder.rb, line 113 def gir @gir ||= GObjectIntrospection::IRepository.default.tap do |it| it.require @namespace, @version end end
instantiate_module()
click to toggle source
# File lib/gir_ffi/builders/module_builder.rb, line 74 def instantiate_module @module = get_or_define_module ::Object, @safe_namespace end
lib()
click to toggle source
# File lib/gir_ffi/builders/module_builder.rb, line 102 def lib @lib ||= get_or_define_module modul, :Lib end
lib_already_set_up()
click to toggle source
# File lib/gir_ffi/builders/module_builder.rb, line 98 def lib_already_set_up (class << lib; self; end).include? FFI::Library end
modul()
click to toggle source
# File lib/gir_ffi/builders/module_builder.rb, line 56 def modul unless defined? @module build_dependencies instantiate_module setup_lib_for_ffi unless lib_already_set_up setup_module unless already_set_up end @module end
setup_lib_for_ffi()
click to toggle source
# File lib/gir_ffi/builders/module_builder.rb, line 87 def setup_lib_for_ffi lib.extend FFI::Library lib.extend FFI::BitMasks lib.ffi_lib_flags :global, :lazy lib.ffi_lib(*shared_library_specification.split(/,/)) if shared_library_specification end
setup_module()
click to toggle source
# File lib/gir_ffi/builders/module_builder.rb, line 78 def setup_module @module.extend ModuleBase @module.const_set :GIR_FFI_BUILDER, self end