Module: GLib

Extended by:
FFI::Library
Defined in:
lib/vips.rb

Overview

This module uses FFI to make a simple layer over the glib and gobject libraries.

Constant Summary collapse

G_FREE =

save the FFI::Function that attach will return ... we can use it directly as a param for callbacks

attach_function :g_free, [:pointer], :void
LOG_FLAG_RECURSION =

log flags

1 << 0
LOG_FLAG_FATAL =
1 << 1
LOG_LEVEL_ERROR =

GLib log levels

1 << 2
LOG_LEVEL_CRITICAL =

always fatal

1 << 3
LOG_LEVEL_WARNING =
1 << 4
LOG_LEVEL_MESSAGE =
1 << 5
LOG_LEVEL_INFO =
1 << 6
LOG_LEVEL_DEBUG =
1 << 7
GLIB_TO_SEVERITY =

map glib levels to Logger::Severity

{
    LOG_LEVEL_ERROR => Logger::ERROR,
    LOG_LEVEL_CRITICAL => Logger::FATAL,
    LOG_LEVEL_WARNING => Logger::WARN,
    LOG_LEVEL_MESSAGE => Logger::UNKNOWN,
    LOG_LEVEL_INFO => Logger::INFO,
    LOG_LEVEL_DEBUG => Logger::DEBUG
}
LOG_HANDLER =

module-level, so it's not GCd away

Proc.new do |domain, level, message, user_data|
    @logger.log(GLIB_TO_SEVERITY[level], message, domain) 
end

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.loggerObject

Returns the value of attribute logger.



15
16
17
# File 'lib/vips.rb', line 15

def logger
  @logger
end

Class Method Details

.remove_log_handlerObject



73
74
75
76
77
78
# File 'lib/vips.rb', line 73

def self.remove_log_handler
    if @glib_log_handler_id and @glib_log_domain
        g_log_remove_handler @glib_log_domain, @glib_log_handler_id
        @glib_log_handler_id = nil
    end
end

.set_log_domain(domain) ⇒ Object



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/vips.rb', line 80

def self.set_log_domain domain
    GLib::remove_log_handler

    @glib_log_domain = domain

    # forward all glib logging output from this domain to a Ruby logger
    if @glib_log_domain
        @glib_log_handler_id = g_log_set_handler @glib_log_domain,
            LOG_LEVEL_DEBUG | 
            LOG_LEVEL_INFO | 
            LOG_LEVEL_MESSAGE | 
            LOG_LEVEL_WARNING | 
            LOG_LEVEL_ERROR | 
            LOG_LEVEL_CRITICAL | 
            LOG_FLAG_FATAL | LOG_FLAG_RECURSION,
            LOG_HANDLER, nil

        # we must remove any handlers on exit, since libvips may log stuff 
        # on shutdown and we don't want LOG_HANDLER to be invoked 
        # after Ruby has gone
        at_exit {
            GLib::remove_log_handler
        }
    end

end