class GirFFI::Builders::PropertyBuilder

Creates property getter and setter code for a given IPropertyInfo.

Public Class Methods

new(property_info) click to toggle source
# File lib/gir_ffi/builders/property_builder.rb, line 5
def initialize(property_info)
  @info = property_info
end

Public Instance Methods

build() click to toggle source
# File lib/gir_ffi/builders/property_builder.rb, line 9
def build
  setup_getter
  setup_setter if setting_allowed
end
container_defines_getter_method?() click to toggle source
# File lib/gir_ffi/builders/property_builder.rb, line 18
def container_defines_getter_method?
  container_info.find_instance_method getter_name
end
getter_def() click to toggle source

TODO: Fix argument builders so #converting_getter_def can always be used.

# File lib/gir_ffi/builders/property_builder.rb, line 27
def getter_def
  case type_info.tag
  when :glist, :ghash
    converting_getter_def
  else
    simple_getter_def
  end
end
setter_def() click to toggle source

TODO: Fix argument builders so #converting_setter_def can always be used.

# File lib/gir_ffi/builders/property_builder.rb, line 37
def setter_def
  case type_info.flattened_tag
  when :glist, :ghash, :strv
    converting_setter_def
  else
    simple_setter_def
  end
end
setup_getter() click to toggle source
# File lib/gir_ffi/builders/property_builder.rb, line 14
def setup_getter
  container_class.class_eval getter_def unless container_defines_getter_method?
end
setup_setter() click to toggle source
# File lib/gir_ffi/builders/property_builder.rb, line 22
def setup_setter
  container_class.class_eval setter_def
end

Private Instance Methods

argument_info() click to toggle source
# File lib/gir_ffi/builders/property_builder.rb, line 111
def argument_info
  @argument_info ||= FieldArgumentInfo.new('value', type_info)
end
container_class() click to toggle source
# File lib/gir_ffi/builders/property_builder.rb, line 115
def container_class
  @container_class ||= container_module.const_get(container_info.safe_name)
end
container_info() click to toggle source
# File lib/gir_ffi/builders/property_builder.rb, line 123
def container_info
  @container_info ||= @info.container
end
container_module() click to toggle source
# File lib/gir_ffi/builders/property_builder.rb, line 119
def container_module
  @container_module ||= Object.const_get(container_info.safe_namespace)
end
converting_getter_def() click to toggle source

TODO: Use a builder like MarshallingMethodBuilder

# File lib/gir_ffi/builders/property_builder.rb, line 49
      def converting_getter_def
        capture = getter_builder.capture_variable_name
        "        def #{getter_name}
          #{capture} = get_property("#{property_name}").get_value_plain
          #{getter_builder.post_conversion.join("\n")}
          #{getter_builder.return_value_name}
        end
".reset_indentation
      end
converting_setter_def() click to toggle source
# File lib/gir_ffi/builders/property_builder.rb, line 73
      def converting_setter_def
        "        def #{setter_name} value
          #{setter_builder.pre_conversion.join("\n")}
          set_property("#{property_name}", #{setter_builder.call_argument_name})
        end
".reset_indentation
      end
getter_builder() click to toggle source
# File lib/gir_ffi/builders/property_builder.rb, line 68
def getter_builder
  @getter_builder ||= ReturnValueBuilder.new(VariableNameGenerator.new,
                                             argument_info)
end
getter_name() click to toggle source
# File lib/gir_ffi/builders/property_builder.rb, line 99
def getter_name
  @info.getter_name
end
property_name() click to toggle source
# File lib/gir_ffi/builders/property_builder.rb, line 95
def property_name
  @info.name
end
setter_builder() click to toggle source
# File lib/gir_ffi/builders/property_builder.rb, line 90
def setter_builder
  @setter_builder ||= ArgumentBuilder.new(VariableNameGenerator.new,
                                          argument_info)
end
setter_name() click to toggle source
# File lib/gir_ffi/builders/property_builder.rb, line 103
def setter_name
  @info.setter_name
end
setting_allowed() click to toggle source
# File lib/gir_ffi/builders/property_builder.rb, line 127
def setting_allowed
  @info.writeable? && !@info.construct_only?
end
simple_getter_def() click to toggle source
# File lib/gir_ffi/builders/property_builder.rb, line 60
      def simple_getter_def
        "        def #{getter_name}
          get_property("#{property_name}").get_value
        end
".reset_indentation
      end
simple_setter_def() click to toggle source
# File lib/gir_ffi/builders/property_builder.rb, line 82
      def simple_setter_def
        "        def #{setter_name} value
          set_property("#{property_name}", value)
        end
".reset_indentation
      end
type_info() click to toggle source
# File lib/gir_ffi/builders/property_builder.rb, line 107
def type_info
  @type_info ||= @info.property_type
end