Class: Weechat::Infolist

Inherits:
Object show all
Defined in:
lib/weechat/infolist.rb

Class Method Summary collapse

Class Method Details

.parse(type, ptr = "", arguments = "", requirements = {}, *fields) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/weechat/infolist.rb', line 3

def self.parse(type, ptr="", arguments="", requirements = {}, *fields)
  infolist_ptr = Weechat.infolist_get(type, ptr, arguments)
  ret = []
  while Weechat.infolist_next(infolist_ptr) > 0
    h = {}
    not_matching = requirements.any? {|option, value|
      type, value = value
      Weechat.__send__("infolist_#{type}", infolist_ptr, option.to_s) != value
    }

    if not_matching
      next
    else
      str = Weechat.infolist_fields(infolist_ptr)
      str.split(/,/).each do |item|
        type, name = item.split(/:/)
        sname = name.to_sym
        next if !fields.empty? && !fields.include?(sname)
        h[sname] = case type
                         when 'p'
                           Weechat.infolist_pointer(infolist_ptr, name)
                         when 'i'
                           Weechat.infolist_integer(infolist_ptr, name)
                         when 's'
                           Weechat.infolist_string(infolist_ptr, name)
                         when 'b'
                           # FIXME: not exposed to script API yet.
                           # Weechat.infolist_buffer(infolist_ptr, name)
                         when 't'
                           Weechat.infolist_time(infolist_ptr, name)
                         end
      end

      ret << h
    end
  end
  Weechat.infolist_free(infolist_ptr)
  return ret
end