Sha256: 97ea9b2ff8846131121a7c30f57ad4c41c669c7f710ecc61c05396fa5837268f

Contents?: true

Size: 1.81 KB

Versions: 8

Compression:

Stored size: 1.81 KB

Contents

require 'gir_ffi/method_stubber'

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

        def has_instance_method method
          !!instance_method_introspection_data(method)
        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 if data && data.method?
        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 }
          build_class.class_eval function_definition(go)
          true
        end

        def stub_methods
          info.get_methods.each do |minfo|
            @klass.class_eval MethodStubber.new(minfo).method_stub
          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

8 entries across 8 versions & 1 rubygems

Version Path
gir_ffi-0.4.3 lib/gir_ffi/builder/type/with_methods.rb
gir_ffi-0.4.2 lib/gir_ffi/builder/type/with_methods.rb
gir_ffi-0.4.1 lib/gir_ffi/builder/type/with_methods.rb
gir_ffi-0.4.0 lib/gir_ffi/builder/type/with_methods.rb
gir_ffi-0.3.2 lib/gir_ffi/builder/type/with_methods.rb
gir_ffi-0.3.1 lib/gir_ffi/builder/type/with_methods.rb
gir_ffi-0.3.0 lib/gir_ffi/builder/type/with_methods.rb
gir_ffi-0.2.3 lib/gir_ffi/builder/type/with_methods.rb