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