Module: GLib::Deprecatable

Defined in:
lib/glib2/deprecatable.rb

Constant Summary collapse

@@deprecated_const =
{}
@@deprecated_signal =
{}

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.extended(class_or_module) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/glib2/deprecatable.rb', line 57

def self.extended(class_or_module)
  GLib::Instantiatable.class_eval do
    %w(signal_connect signal_connect_after).each do |connect_method|
      alias_name = "__deprecatable_#{connect_method}__"
      next if private_method_defined?(alias_name)
      alias_method alias_name, connect_method
      private alias_name

      define_method(connect_method) do |signal, *margs, &mblock|
        signal = signal.to_s.gsub('_', '-').to_sym
        signals = @@deprecated_signal[self]
        if new_signal = (signals || {})[signal]
          msg = "#{caller[0]}: '#{signal}' signal has been deprecated."
          case new_signal
          when String, Symbol
            warn "#{msg} Use '#{new_signal}' signal."
            signal = new_signal
          when Hash
            if new_signal[:raise]
              raise DeprecatedError.new("#{msg} #{new_signal[:raise]}")
            elsif new_signal[:warn]
              warn "#{msg} #{new_signal[:warn]}"
            else
              warn "#{msg} Don't use this signal anymore."
            end
            return
          end
        end
        __send__(alias_name, signal, *margs, &mblock)
      end
    end
  end
end

Instance Method Details

#define_deprecated_const(deprecated_const, new_const = {}) ⇒ Object



11
12
13
14
# File 'lib/glib2/deprecatable.rb', line 11

def define_deprecated_const(deprecated_const, new_const = {})
  @@deprecated_const[self] ||= {}
  @@deprecated_const[self][deprecated_const.to_sym] = new_const
end

#define_deprecated_enums(enums, prefix = nil) ⇒ Object Also known as: define_deprecated_flags



16
17
18
19
20
21
22
23
# File 'lib/glib2/deprecatable.rb', line 16

def define_deprecated_enums(enums, prefix = nil)
  enums = module_eval(enums.to_s) rescue return
  enums.constants.each do |const|
    deprecated_const = prefix ? "#{prefix}_#{const}" : const
    new_const = [enums, const].join('::')
    define_deprecated_const(deprecated_const, new_const)
  end
end

#define_deprecated_method(deprecated_method, new_method = {}, &block) ⇒ Object



30
31
32
# File 'lib/glib2/deprecatable.rb', line 30

def define_deprecated_method(deprecated_method, new_method = {}, &block)
  __define_deprecated_method__(:instance, deprecated_method, new_method, &block)
end

#define_deprecated_method_by_hash_args(deprecated_method, old_args, new_args, req_argc = 0, &block) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/glib2/deprecatable.rb', line 34

def define_deprecated_method_by_hash_args(deprecated_method, old_args, new_args, req_argc = 0, &block)
  klass = self
  alias_name = "__deprecatable_#{deprecated_method}__"
  alias_method alias_name, deprecated_method
  private alias_name

  define_method(deprecated_method) do |*margs, &mblock|
    if (margs.size == req_argc) || (margs.size == (req_argc + 1) && margs.last.is_a?(Hash))
    else
      margs = block.call(self, *margs, &mblock)
      msg = "#{caller[0]}: '#{klass}##{deprecated_method}(#{old_args})' style has been deprecated."
      warn "#{msg} Use '#{klass}##{deprecated_method}(#{new_args})' style."
    end
    __send__(alias_name, *margs, &mblock)
  end
end

#define_deprecated_signal(deprecated_signal, new_signal = {}) ⇒ Object



52
53
54
55
# File 'lib/glib2/deprecatable.rb', line 52

def define_deprecated_signal(deprecated_signal, new_signal = {})
  @@deprecated_signal[self] ||= {}
  @@deprecated_signal[self][deprecated_signal.to_s.gsub('_', '-').to_sym] = new_signal
end

#define_deprecated_singleton_method(deprecated_method, new_method = {}, &block) ⇒ Object



26
27
28
# File 'lib/glib2/deprecatable.rb', line 26

def define_deprecated_singleton_method(deprecated_method, new_method = {}, &block)
  __define_deprecated_method__(:singleton, deprecated_method, new_method, &block)
end

#define_singleton_method(name, &block) ⇒ Object



4
5
6
7
# File 'lib/glib2/deprecatable.rb', line 4

def define_singleton_method(name, &block)
  singleton_class = class << self; self; end
  singleton_class.__send__(:define_method, name, &block)
end