class GirFFI::Builders::BaseMethodBuilder

Base class for method definition builders.

Public Class Methods

new(info, return_value_builder_class, receiver_info: nil, argument_builder_class: ArgumentBuilder) click to toggle source
# File lib/gir_ffi/builders/base_method_builder.rb, line 15
def initialize(info, return_value_builder_class,
               receiver_info: nil,
               argument_builder_class: ArgumentBuilder)
  @info = info
  @return_value_builder_class = return_value_builder_class
  @argument_builder_class = argument_builder_class
  @receiver_info = receiver_info
end

Public Instance Methods

invocation() click to toggle source

Methods used by MethodTemplate

# File lib/gir_ffi/builders/base_method_builder.rb, line 30
def invocation
  "#{lib_name}.#{@info.symbol} #{function_call_arguments.join(", ")}".strip
end
method_arguments() click to toggle source
# File lib/gir_ffi/builders/base_method_builder.rb, line 34
def method_arguments
  argument_builder_collection.method_argument_names
end
method_definition() click to toggle source
# File lib/gir_ffi/builders/base_method_builder.rb, line 24
def method_definition
  template.method_definition
end
preparation() click to toggle source
# File lib/gir_ffi/builders/base_method_builder.rb, line 38
def preparation
  []
end

Private Instance Methods

argument_builder_collection() click to toggle source
# File lib/gir_ffi/builders/base_method_builder.rb, line 74
def argument_builder_collection
  @argument_builder_collection ||=
    ArgumentBuilderCollection.new(return_value_builder, argument_builders,
                                  error_argument_builder: error_argument,
                                  receiver_builder: receiver_builder)
end
argument_builders() click to toggle source

Methods used for setting up the builders

# File lib/gir_ffi/builders/base_method_builder.rb, line 54
def argument_builders
  @argument_builders ||=
    @info.args.map { |arg| make_argument_builder arg }
end
error_argument() click to toggle source
# File lib/gir_ffi/builders/base_method_builder.rb, line 81
def error_argument
  @error_argument ||=
    if @info.can_throw_gerror?
      make_argument_builder ErrorArgumentInfo.new
    else
      NullArgumentBuilder.new
    end
end
lib_name() click to toggle source
# File lib/gir_ffi/builders/base_method_builder.rb, line 90
def lib_name
  "#{@info.safe_namespace}::Lib"
end
make_argument_builder(argument_info) click to toggle source
# File lib/gir_ffi/builders/base_method_builder.rb, line 94
def make_argument_builder(argument_info)
  @argument_builder_class.new variable_generator, argument_info
end
receiver_builder() click to toggle source
# File lib/gir_ffi/builders/base_method_builder.rb, line 70
def receiver_builder
  @receiver_builder ||= @receiver_info ? make_argument_builder(@receiver_info) : nil
end
return_value_builder() click to toggle source
# File lib/gir_ffi/builders/base_method_builder.rb, line 65
def return_value_builder
  @return_value_builder ||= @return_value_builder_class.new(variable_generator,
                                                            return_value_info)
end
return_value_info() click to toggle source
# File lib/gir_ffi/builders/base_method_builder.rb, line 59
def return_value_info
  @return_value_info ||= ReturnValueInfo.new(@info.return_type,
                                             @info.caller_owns,
                                             @info.skip_return?)
end
template() click to toggle source
# File lib/gir_ffi/builders/base_method_builder.rb, line 48
def template
  @template ||= MethodTemplate.new(self, argument_builder_collection)
end
variable_generator() click to toggle source
# File lib/gir_ffi/builders/base_method_builder.rb, line 44
def variable_generator
  @variable_generator ||= VariableNameGenerator.new
end