Sha256: 70d7ae4a629b26d34c7adc99723d1a528802761017137ea9c375923fdd30300e
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