# class Gio::Loader

### Public Class Methods

new(type) click to toggle source

    # File lib/gio2/loader.rb, line 74
    def initialize(type)
      @type = type
    end

### Private Instance Methods

define_content_type_class() click to toggle source

    # File lib/gio2/loader.rb, line 72
    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_dbus_module() click to toggle source

    # File lib/gio2/loader.rb, line 98
    def define_dbus_module
      @dbus_module = Module.new
      @base_module.const_set("DBus", @dbus_module)
    end

define_mime_type_class() click to toggle source

    # File lib/gio2/loader.rb, line 85
    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 103
    def define_resources_module
      @resources_module = Module.new
      @base_module.const_set("Resources", @resources_module)
    end

error_parent_class(info) click to toggle source

    # File lib/gio2/loader.rb, line 188
    def error_parent_class(info)
      Error
    end

load_function_info(info) click to toggle source
Calls superclass method

    # File lib/gio2/loader.rb, line 108
    def load_function_info(info)
      name = info.name
      case name
      when /\Acontent_type_/
        load_function_info_content_type(info)
      when "content_types_get_registered"
        define_singleton_method(@content_type_class, "registered", info)
      when /\Aresources_/
        name = rubyish_method_name(info, :prefix => "resources_")
        define_singleton_method(@resources_module, name, info)
      when /\Adbus_/
        name = rubyish_method_name(info, :prefix => "dbus_")
        define_singleton_method(@dbus_module, name, info)
      when /\Afile_/
        # Ignore because they are defined by load_interface_info
      else
        super
      end
    end

load_function_info_content_type(info) click to toggle source

    # File lib/gio2/loader.rb, line 128
    def load_function_info_content_type(info)
      name = rubyish_method_name(info, :prefix => "content_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([to_s, other])
          else
            false
          end
        end
      when "from_mime_type"
        @mime_type_class.__send__(:define_method, "content_type") do
          info.invoke([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([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"
        define_singleton_method(@content_type_class, name, info)
      else
        case name
        when /\Aget_/
          method_name = $POSTMATCH
        else
          method_name = name
        end
        @content_type_class.__send__(:define_method, method_name) do
          info.invoke([to_s])
        end
      end
    end

post_load(repository, namespace) click to toggle source

    # File lib/gio2/loader.rb, line 29
    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([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_dbus_module
      define_resources_module
      @file_function_infos = []
      @content_type_guess_for_tree_info = nil
    end

require_extension() click to toggle source

    # File lib/gio2/loader.rb, line 44
    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 53
    def require_libraries
      require "gio2/action"
      require "gio2/action-map"
      require "gio2/application-command-line"
      require "gio2/content-type"
      require "gio2/file"
      require "gio2/inet-address"
      require "gio2/input-stream"
      require "gio2/menu-item"
      require "gio2/pollable-input-stream"
      require "gio2/pollable-output-stream"
      require "gio2/resources"
      require "gio2/settings"
      require "gio2/settings-schema-source"
      require "gio2/simple-action"

      require "gio2/deprecated"
    end

rubyish_class_name(info) click to toggle source
Calls superclass method

    # File lib/gio2/loader.rb, line 179
    def rubyish_class_name(info)
      case info.name
      when /Enum\z/
        $PREMATCH
      else
        super
      end
    end

should_unlock_gvl?(function_info, klass) click to toggle source

    # File lib/gio2/loader.rb, line 192
    def should_unlock_gvl?(function_info, klass)
      case klass.name
      when "Gio::InputStream"
        case function_info.name
        when "read", "read_all"
          true
        else
          false
        end
      else
        false
      end
    end

to_s() click to toggle source

    # File lib/gio2/loader.rb, line 78
    def to_s
      @type
    end