class Gio::Loader
Public Class Methods
new(type)
click to toggle source
# File lib/gio2/loader.rb, line 61 def initialize(type) @type = type end
Private Instance Methods
define_content_type_class()
click to toggle source
# File lib/gio2/loader.rb, line 59 def define_content_type_class @content_type_class = Class.new do def initialize(type) @type = type end def to_s @type end end @base_module.const_set("ContentType", @content_type_class) end
define_file_commandline_arg(infos, klass)
click to toggle source
# File lib/gio2/loader.rb, line 214 def define_file_commandline_arg(infos, klass) method_name = "commandline_arg" find_info = lambda do |arguments| find_suitable_callable_info(infos, arguments) end validate = lambda do |info, arguments| validate_arguments(info, "#{klass}.#{method_name}", arguments) end klass.__send__(:define_method, method_name) do |*arguments| info = find_info.call(arguments) validate.call(info, arguments) info.invoke(:arguments => arguments) end end
define_mime_type_class()
click to toggle source
# File lib/gio2/loader.rb, line 72 def define_mime_type_class @mime_type_class = Class.new do def initialize(type) @type = type end def to_s @type end end @base_module.const_set("MimeType", @mime_type_class) end
define_resources_module()
click to toggle source
# File lib/gio2/loader.rb, line 85 def define_resources_module @resources_module = Module.new @base_module.const_set("Resources", @resources_module) end
error_class_name(info)
click to toggle source
# File lib/gio2/loader.rb, line 229 def error_class_name(info) name = info.name case name when /Enum\z/ $PREMATCH else name end end
error_parent_class(info)
click to toggle source
# File lib/gio2/loader.rb, line 239 def error_parent_class(info) Error end
load_function_info(info)
click to toggle source
Calls superclass method
# File lib/gio2/loader.rb, line 90 def load_function_info(info) name = info.name case name when "init" # ignore when /\Acontent_type_/ load_function_info_content_type(info) when "content_types_get_registered" @content_type_class.define_singleton_method(:registered) do info.invoke(:arguments => []).collect do |type| new(type) end end when /\Aresources_/ load_function_info_resources(info) else super end end
load_function_info_content_type(info)
click to toggle source
# File lib/gio2/loader.rb, line 110 def load_function_info_content_type(info) name = info.name.gsub(/\Acontent_type_/, "") case name when "equals", "is_a" case name when "equals" method_name = "==" when "is_a" method_name = "#{name}?" end @content_type_class.__send__(:define_method, method_name) do |other| if other.is_a?(self.class) other = other.to_s end if other.is_a?(String) info.invoke(:arguments => [to_s, other]) else false end end when "from_mime_type" @mime_type_class.__send__(:define_method, "content_type") do info.invoke(:arguments => [to_s]) end when "get_mime_type" mime_type_class = @mime_type_class @content_type_class.__send__(:define_method, "mime_type") do mime_type = info.invoke(:arguments => [to_s]) if mime_type mime_type_class.new(mime_type) else nil end end when "guess_for_tree" @content_type_guess_for_tree_info = info when "guess" validate = lambda do |arguments| method_name = "#{@content_type_class}.#{name}" validate_arguments(info, method_name, arguments) end @content_type_class.define_singleton_method(:guess) do |*arguments| validate.call(arguments) info.invoke(:arguments => arguments) end else case name when /\Acan_be_/ method_name = "#{$1}?" when /\Ais_/ method_name = "#{$POSTMATCH}?" when /\Aget_/ method_name = $POSTMATCH else method_name = name end @content_type_class.__send__(:define_method, method_name) do info.invoke(:arguments => [to_s]) end end end
load_function_info_resources(info)
click to toggle source
# File lib/gio2/loader.rb, line 173 def load_function_info_resources(info) method_name = info.name.gsub(/\Aresources_/, "") receiver = @resources_module validate = lambda do |arguments| validate_arguments(info, "#{receiver}.#{method_name}", arguments) end receiver.define_singleton_method(method_name) do |*arguments| validate.call(arguments) info.invoke(:arguments => arguments) end end
load_function_infos(infos, klass)
click to toggle source
Calls superclass method
# File lib/gio2/loader.rb, line 185 def load_function_infos(infos, klass) case klass.name when "Gio::File" load_function_infos_file(infos, klass) super else super end end
load_function_infos_file(infos, klass)
click to toggle source
# File lib/gio2/loader.rb, line 195 def load_function_infos_file(infos, klass) new_for_commandline_arg_infos = [] infos.each do |info| name = info.name case name when /\Anew_for_commandline_arg/ new_for_commandline_arg_infos << info when /\Anew_(?:for_)?/ method_name = $POSTMATCH define_singleton_method(klass, method_name, info) else define_singleton_method(klass, name, info) end end define_file_commandline_arg(new_for_commandline_arg_infos, klass) end
post_load(repository, namespace)
click to toggle source
# File lib/gio2/loader.rb, line 27 def post_load(repository, namespace) if @content_type_guess_for_tree_info content_type_class = @content_type_class info = @content_type_guess_for_tree_info file_module = @base_module.const_get("File") file_module.__send__(:define_method, "guess_content_types") do info.invoke(:arguments => [self]).collect do |type| content_type_class.new(type) end end end require_extension require_libraries end
pre_load(repository, namespace)
click to toggle source
# File lib/gio2/loader.rb, line 20 def pre_load(repository, namespace) define_content_type_class define_mime_type_class define_resources_module @content_type_guess_for_tree_info = nil end
require_extension()
click to toggle source
# File lib/gio2/loader.rb, line 42 def require_extension begin major, minor, _ = RUBY_VERSION.split(/\./) require "#{major}.#{minor}/gio2.so" rescue LoadError require "gio2.so" end end
require_libraries()
click to toggle source
# File lib/gio2/loader.rb, line 51 def require_libraries require "gio2/resources" require "gio2/inet-address" require "gio2/input-stream" require "gio2/pollable-input-stream" require "gio2/pollable-output-stream" end
to_s()
click to toggle source
# File lib/gio2/loader.rb, line 65 def to_s @type end