Sha256: 995cb46e541b6a4170e06eaf68224a621b3531b47c4077a351392729d4313381
Contents?: true
Size: 1.91 KB
Versions: 1
Compression:
Stored size: 1.91 KB
Contents
module GirFFI module Builder module Type # Implements method creation for types such as, :union, :struct, # :object, :interface. module WithMethods def setup_method method go = method_introspection_data method attach_and_define_method method, go, meta_class end def setup_instance_method method go = instance_method_introspection_data method attach_and_define_method method, go, build_class end private def meta_class klass = build_class return (class << klass; self; end) end def method_introspection_data method info.find_method method end def instance_method_introspection_data method data = method_introspection_data method return !data.nil? && data.method? ? data : nil end def function_definition_builder go Builder::Function.new(go, lib) end def function_definition go function_definition_builder(go).generate end def attach_and_define_method method, go, modul return false if go.nil? Builder.attach_ffi_function lib, go modul.class_eval { remove_method method } modul.class_eval function_definition(go) true end def stub_methods info.get_methods.each do |minfo| @klass.class_eval method_stub(minfo.name, minfo.method?) end end def method_stub symbol, is_instance_method " def #{is_instance_method ? '' : 'self.'}#{symbol} *args, &block setup_and_call :#{symbol}, *args, &block end " end def pretty_print_methods info.get_methods.map do |minfo| function_definition_builder(minfo).pretty_print.indent + "\n" end.join end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
gir_ffi-0.2.2 | lib/gir_ffi/builder/type/with_methods.rb |