class GirFFI::Builders::MethodTemplate

Encapsulates the general structure of generated methods, consisting of a preparation phase where arguments are converted to the form needed by the main call of the method, the main call itself, a post-processing phase where the return values and any 'out' arguments of the main call are converted into a form suitable for returning, and finally the returning of said values to the caller.

The different method builders collaborate with MethodTemplate to build the desired method.

Public Class Methods

new(builder, argument_builder_collection) click to toggle source
# File lib/gir_ffi/builders/method_template.rb, line 13
def initialize(builder, argument_builder_collection)
  @builder = builder
  @argument_builder_collection = argument_builder_collection
end

Public Instance Methods

method_definition() click to toggle source
# File lib/gir_ffi/builders/method_template.rb, line 18
def method_definition
  code = "def #{qualified_method_name}"
  code << "(#{method_arguments.join(', ')})" if method_arguments.any?
  method_lines.each { |line| code << "\n  #{line}" }
  code << "\nend\n"
end

Private Instance Methods

capturing_invocation() click to toggle source
# File lib/gir_ffi/builders/method_template.rb, line 72
def capturing_invocation
  ["#{result_name_list} = #{@builder.invocation}"]
end
invocation() click to toggle source
# File lib/gir_ffi/builders/method_template.rb, line 51
def invocation
  if result_name_list.empty?
    plain_invocation
  else
    capturing_invocation
  end
end
method_arguments() click to toggle source
# File lib/gir_ffi/builders/method_template.rb, line 31
def method_arguments
  @builder.method_arguments
end
method_lines() click to toggle source
# File lib/gir_ffi/builders/method_template.rb, line 35
def method_lines
  method_preparation +
    parameter_preparation +
    invocation +
    return_value_conversion +
    result
end
method_preparation() click to toggle source
# File lib/gir_ffi/builders/method_template.rb, line 43
def method_preparation
  @builder.preparation
end
parameter_preparation() click to toggle source
# File lib/gir_ffi/builders/method_template.rb, line 47
def parameter_preparation
  @argument_builder_collection.parameter_preparation
end
plain_invocation() click to toggle source
# File lib/gir_ffi/builders/method_template.rb, line 76
def plain_invocation
  [@builder.invocation].compact
end
qualified_method_name() click to toggle source
# File lib/gir_ffi/builders/method_template.rb, line 27
def qualified_method_name
  "#{@builder.singleton_method? ? 'self.' : ''}#{@builder.method_name}"
end
result() click to toggle source
# File lib/gir_ffi/builders/method_template.rb, line 63
def result
  @builder.result
end
result_name_list() click to toggle source
# File lib/gir_ffi/builders/method_template.rb, line 67
def result_name_list
  @result_name_list ||=
    @argument_builder_collection.capture_variable_names.join(', ')
end
return_value_conversion() click to toggle source
# File lib/gir_ffi/builders/method_template.rb, line 59
def return_value_conversion
  @argument_builder_collection.return_value_conversion
end