weechat 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog CHANGED
@@ -1,5 +1,13 @@
1
1
  2009-12-24 Dominik Honnef <dominikho@gmx.net>
2
2
 
3
+ * lib/weechat.rb (Weechat): bumped version to 0.0.4
4
+
5
+ * lib/weechat/properties.rb (Weechat::Properties::InstanceMethods#get_infolist)
6
+ (Weechat::Properties::InstanceMethods#get_infolist_property)
7
+ (Weechat::Properties::InstanceMethods#valid_property): more specific infolist querying; performance tweaks
8
+ * lib/weechat/infolist.rb (Weechat::Infolist.parse): more specific infolist querying; performance tweaks
9
+ * lib/weechat/channel.rb (Weechat::IRC::Channel#get_infolist): more specific infolist querying; performance tweaks
10
+
3
11
  * lib/weechat.rb (Weechat): bumped version to 0.0.3
4
12
 
5
13
  * lib/weechat/buffer.rb (Weechat::Buffer.find): added method for finding buffers
data/Rakefile CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'rubygems'
2
2
  require 'rake/gempackagetask'
3
3
 
4
- VERSION = "0.0.3"
4
+ VERSION = "0.0.4"
5
5
 
6
6
  spec = Gem::Specification.new do |s|
7
7
  s.name = "weechat"
data/TODO CHANGED
@@ -90,7 +90,7 @@ hooks:
90
90
  [x] hook_process
91
91
  [ ] hook_connect
92
92
  [x] hook_print
93
- [ ] hook_signal
93
+ [x] hook_signal
94
94
  [ ] hook_signal_send
95
95
  [x] hook_config
96
96
  [ ] hook_completion
@@ -6,7 +6,7 @@ end
6
6
  require 'pp'
7
7
 
8
8
  module Weechat
9
- VERSION = "0.0.3"
9
+ VERSION = "0.0.4"
10
10
  module Helper
11
11
  def command_callback(id, buffer, args)
12
12
  Weechat::Command.find_by_id(id).call(Weechat::Buffer.new(buffer), args)
@@ -34,11 +34,8 @@ module Weechat
34
34
  end
35
35
  end
36
36
 
37
- def get_infolist
38
- list = Weechat::Infolist.parse("irc_channel", "", server.name).select{|channel|
39
- channel[:buffer] == @ptr
40
- }
41
-
37
+ def get_infolist(*fields)
38
+ list = Weechat::Infolist.parse("irc_channel", "", server.name, {:buffer => [:pointer, @ptr]}, *fields)
42
39
  list.empty? ? [{}] : list
43
40
  end
44
41
 
@@ -1,66 +1,40 @@
1
1
  module Weechat
2
2
  class Infolist
3
- # class Item
4
- # def initialize(infolist)
5
- # @ptr = Weechat.infolist_new_item(infolist.ptr)
6
- # end
7
-
8
- # def []=(name, value)
9
- # type = case value
10
- # when String
11
- # value = value.to_s
12
- # 'string'
13
- # when Numeric
14
- # 'integer'
15
- # when Weechat::Pointer
16
- # value = value.ptr
17
- # 'pointer'
18
- # when Date, Time, DateTime
19
- # # TODO implement time
20
- # else
21
- # value= value.to_s
22
- # 'string'
23
- # end
24
-
25
- # m = "infolist_new_var_#{type}"
26
- # Weechat.__send__(m, name.to_s, value)
27
- # end
28
- # end
29
-
30
- # attr_reader :ptr
31
- # def initialize
32
- # @ptr = Weechat.infolist_new
33
- # @items = Hash.new {|hash, key| hash[key] = Infolist::Item.new(self)}
34
- # end
35
-
36
- # def [](item)
37
- # @items[item]
38
- # end
39
-
40
- def self.parse(type, ptr="", arguments="")
3
+ def self.parse(type, ptr="", arguments="", requirements = {}, *fields)
41
4
  infolist_ptr = Weechat.infolist_get(type, ptr, arguments)
42
5
  ret = []
43
6
  while Weechat.infolist_next(infolist_ptr) > 0
44
- h = { }
45
- str = Weechat.infolist_fields(infolist_ptr)
46
- str.split(/,/).each do |item|
47
- type, name = item.split(/:/)
48
- h[name.to_sym] = case type
49
- when 'p'
50
- Weechat.infolist_pointer(infolist_ptr, name)
51
- when 'i'
52
- Weechat.infolist_integer(infolist_ptr, name)
53
- when 's'
54
- Weechat.infolist_string(infolist_ptr, name)
55
- when 'b'
56
- # FIXME: not exposed to script API yet.
57
- # Weechat.infolist_buffer(infolist_ptr, name)
58
- when 't'
59
- Weechat.infolist_time(infolist_ptr, name)
60
- end
61
- end
7
+ h = {}
8
+ not_matching = requirements.any? {|option, value|
9
+ type, value = value
10
+ Weechat.__send__("infolist_#{type}", infolist_ptr, option.to_s) != value
11
+ }
62
12
 
63
- ret.push h
13
+ if not_matching
14
+ next
15
+ else
16
+ str = Weechat.infolist_fields(infolist_ptr)
17
+ str.split(/,/).each do |item|
18
+ type, name = item.split(/:/)
19
+ sname = name.to_sym
20
+ next if !fields.empty? && !fields.include?(sname)
21
+ h[sname] = case type
22
+ when 'p'
23
+ Weechat.infolist_pointer(infolist_ptr, name)
24
+ when 'i'
25
+ Weechat.infolist_integer(infolist_ptr, name)
26
+ when 's'
27
+ Weechat.infolist_string(infolist_ptr, name)
28
+ when 'b'
29
+ # FIXME: not exposed to script API yet.
30
+ # Weechat.infolist_buffer(infolist_ptr, name)
31
+ when 't'
32
+ Weechat.infolist_time(infolist_ptr, name)
33
+ end
34
+ end
35
+
36
+ ret << h
37
+ end
64
38
  end
65
39
  Weechat.infolist_free(infolist_ptr)
66
40
  return ret
@@ -167,8 +167,8 @@ module Weechat
167
167
  # Returns a hash representation of the associated infolist.
168
168
  #
169
169
  # @return [Hash{Symbol => Object}] All properties in the infolist
170
- def get_infolist
171
- Weechat::Infolist.parse(self.class.type, @ptr)
170
+ def get_infolist(*fields)
171
+ Weechat::Infolist.parse(self.class.type, @ptr, {}, fields)
172
172
  end
173
173
 
174
174
  # Returns a property obtained by an infolist.
@@ -180,7 +180,7 @@ module Weechat
180
180
  # @see #get_integer_property
181
181
  def get_infolist_property(property)
182
182
  property = property.to_sym
183
- values = get_infolist.first
183
+ values = get_infolist(property).first
184
184
  raise Exception::UnknownProperty, property.to_s unless values.has_key?(property)
185
185
  values[property]
186
186
  end
@@ -268,7 +268,8 @@ module Weechat
268
268
  when :localvar
269
269
  property =~ /^localvar_.+$/
270
270
  when :infolist
271
- get_infolist.first.has_key?(property.to_sym)
271
+ sproperty = property.to_sym
272
+ get_infolist(sproperty).first.has_key?(sproperty)
272
273
  end
273
274
  end
274
275
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: weechat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dominik Honnef