Sha256: 22ed9a6be31d91a03c9f8ac7911ff6dfb7275f9e7a73b4adf5489270ec0b276d
Contents?: true
Size: 1.4 KB
Versions: 9
Compression:
Stored size: 1.4 KB
Contents
# frozen_string_literal: true require 'gir_ffi/builders/argument_builder_collection' require 'gir_ffi/builders/method_template' require 'gir_ffi/builders/null_return_value_builder' module GirFFI module Builders # Implements the creation of a Ruby constructor definition out of a # GIR IFunctionInfo. # TODO: Derive from BaseMethodBuilder class ConstructorBuilder def initialize(info) @info = info return_value_builder = NullReturnValueBuilder.new arg_builders = ArgumentBuilderCollection.new(return_value_builder, []) @template = MethodTemplate.new(self, arg_builders) end def method_definition @template.method_definition end def singleton_method? true end def method_name @info.safe_name end def method_arguments ['*args', '&block'] end def preparation if @info.safe_name == 'new' ['obj = allocate'] else [ "raise NoMethodError unless self == #{@info.container.full_type_name}", 'obj = allocate' ] end end def invocation "obj.__send__ #{initializer_name.to_sym.inspect}, #{method_arguments.join(', ')}" end def result ['obj'] end private def initializer_name @info.safe_name.sub(/^new/, 'initialize') end end end end
Version data entries
9 entries across 9 versions & 1 rubygems