weechat 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog CHANGED
@@ -0,0 +1,62 @@
1
+ 2009-12-21 Dominik Honnef <dominikho@gmx.net>
2
+
3
+ * Rakefile: bumped version to 0.0.2
4
+ * lib/weechat.rb (Weechat): bumped version to 0.0.2
5
+
6
+ * lib/weechat/channel.rb (Weechat::IRC::Channel#nicks): added support for users
7
+ * lib/weechat/host.rb (Weechat::IRC::Host): added support for users
8
+ * lib/weechat/user.rb (Weechat::IRC::User): added support for users
9
+
10
+ * lib/weechat/channel.rb (Weechat::IRC::Channel#join)
11
+ (Weechat::IRC::Channel#rejoin): added support for channel
12
+ passwords
13
+ (Weechat::IRC::Channel#command, Weechat::IRC::Channel#send): added
14
+ support for sending commands/messages to channels
15
+
16
+ * lib/weechat/pointer.rb (Weechat::Pointer#initialize): fixed
17
+ pointer comparison
18
+
19
+ * lib/weechat/script/config.rb (Weechat::Script::Config#set):
20
+ fixed memory leak
21
+ * lib/weechat/properties.rb (Weechat::Properties::InstanceMethods#set_property):
22
+ fixed memory leak
23
+ * lib/weechat/option.rb (Weechat::Option): fixed memory leak
24
+ * lib/weechat/property.rb (Weechat::Property): fixed memory leak
25
+
26
+ 2009-12-18 Dominik Honnef <dominikho@gmx.net>
27
+
28
+ * lib/weechat/channel.rb (Weechat::IRC::Channel): added support
29
+ for channels
30
+ * lib/weechat/buffer.rb (Weechat::Buffer#channel)
31
+ (Weechat::Buffer#channel?): added support for channels
32
+
33
+ * lib/weechat.rb (Weechat::Helper#get_buffer): put logic of
34
+ determining buffer into own method, changed methods accordingly
35
+ (Weechat::Helper#puts_y): added support for print_y
36
+
37
+ * lib/weechat/server.rb (Weechat::IRC::Server#initialize): use a
38
+ proper exception use existing properties architecture
39
+
40
+ * lib/weechat/buffer.rb: style changes wrt exceptions
41
+ * lib/weechat/properties.rb: style changes wrt exceptions
42
+ (Weechat::Properties::InstanceMethods#valid_property): fixed check
43
+ for values that are false
44
+ (Weechat::Properties::InstanceMethods#to_h): tweak performance by
45
+ reusing infolist
46
+
47
+ * lib/weechat/rubyext/object.rb (Object#__class__): added
48
+ __class__ as an alias for class
49
+ * lib/weechat/blankslate.rb (Blankslate): use Object#__class__
50
+
51
+ * lib/weechat/blankslate.rb (Blankslate): don't undef object_id
52
+ anymore
53
+
54
+ 2009-12-14 Dominik Honnef <dominikho@gmx.net>
55
+
56
+ * lib/weechat/server.rb (Weechat::IRC::Server.servers): renamed
57
+ Server.buffers to Server.servers
58
+
59
+ 2009-12-14 Dominik Honnef <dominikho@gmx.net>
60
+ * *: initial release
61
+ * lib/weechat.rb (Weechat): bumped version to 0.0.1
62
+
data/Rakefile CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'rubygems'
2
2
  require 'rake/gempackagetask'
3
3
 
4
- VERSION = "0.0.1"
4
+ VERSION = "0.0.2"
5
5
 
6
6
  spec = Gem::Specification.new do |s|
7
7
  s.name = "weechat"
data/TODO CHANGED
@@ -79,7 +79,7 @@ display:
79
79
  [x] color
80
80
  [x] print
81
81
  [ ] print_date_tags
82
- [ ] print_y
82
+ [x] print_y
83
83
  [x] log_print
84
84
 
85
85
  hooks:
@@ -163,11 +163,11 @@ info_get
163
163
  [x] weechat_sharedir
164
164
 
165
165
  infolists:
166
- [ ] infolist_new
167
- [ ] infolist_new_var_integer
168
- [ ] infolist_new_var_string
169
- [ ] infolist_new_var_pointer
170
- [ ] infolist_new_var_time
166
+ [/] infolist_new
167
+ [/] infolist_new_var_integer
168
+ [/] infolist_new_var_string
169
+ [/] infolist_new_var_pointer
170
+ [/] infolist_new_var_time
171
171
  [x] infolist_get
172
172
  [x] infolist_next
173
173
  [-] infolist_prev
@@ -185,4 +185,4 @@ upgrade:
185
185
  [ ] upgrade_close
186
186
 
187
187
  Functionality:
188
- [ ] if a buffer is a channel, get nicks, usercount, topic, etc
188
+ [x] if a buffer is a channel, get nicks, usercount, topic, etc
@@ -6,7 +6,7 @@ end
6
6
  require 'pp'
7
7
 
8
8
  module Weechat
9
- VERSION = "0.0.1"
9
+ VERSION = "0.0.2"
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)
@@ -97,6 +97,17 @@ module Weechat
97
97
  end
98
98
 
99
99
  class << self
100
+ def get_buffer(buffer = nil)
101
+ case buffer
102
+ when nil
103
+ ""
104
+ when :current
105
+ Weechat::Buffer.current
106
+ else
107
+ buffer
108
+ end
109
+ end
110
+
100
111
  def exec(command, buffer=nil)
101
112
  Weechat.command(buffer.to_s, command)
102
113
  end
@@ -104,18 +115,17 @@ module Weechat
104
115
  alias_method :execute, :exec
105
116
 
106
117
  def puts(text, buffer = nil)
107
- buffer = case buffer
108
- when nil
109
- ""
110
- when :current
111
- Weechat::Buffer.current
112
- else
113
- buffer
114
- end
118
+ buffer = get_buffer(buffer)
115
119
  Weechat.print(buffer.to_s, text.to_s)
116
120
  nil # to mimic Kernel::puts
117
121
  end
118
122
 
123
+ def puts_y(text, line, buffer = nil)
124
+ buffer = get_buffer(buffer)
125
+ Weechat.print_y(text.to_s, line, buffer.to_s)
126
+ nil # to mimic Kernel::puts
127
+ end
128
+
119
129
  def p(object, buffer = nil)
120
130
  self.puts(object.inspect, buffer)
121
131
  end
@@ -212,6 +222,9 @@ require 'weechat/input.rb'
212
222
  require 'weechat/buffer.rb'
213
223
  require 'weechat/window.rb'
214
224
  require 'weechat/server.rb'
225
+ require 'weechat/channel.rb'
226
+ require 'weechat/user.rb'
227
+ require 'weechat/host.rb'
215
228
  require 'weechat/infolist.rb'
216
229
  require 'weechat/color.rb'
217
230
  require 'weechat/plugin.rb'
@@ -1,13 +1,3 @@
1
- class NullOutput
2
- def write(*args)
3
- end
4
- end
5
-
6
1
  class Blankslate
7
- alias_method :__class__, :class
8
-
9
- old_stderr = $stderr.dup
10
- $stderr = NullOutput.new
11
- instance_methods.each { |m| undef_method m unless m =~ /^__/ }
12
- $stderr = old_stderr
2
+ instance_methods.each { |m| undef_method m unless m =~ /^__/ || m.to_s == 'object_id' }
13
3
  end
@@ -159,11 +159,11 @@ module Weechat
159
159
  },
160
160
  [:notify] => lambda {|v|
161
161
  i = NOTIFY_LEVELS.index(v)
162
- i or raise Exception::InvalidPropertyValue.new(v.to_s)
162
+ i or raise Exception::InvalidPropertyValue, v.to_s
163
163
  },
164
164
  [:type] => lambda {|v|
165
165
  v = v.to_s
166
- raise Exception::InvalidPropertyValue.new(v) if !["formatted", "free"].include?(v)
166
+ raise Exception::InvalidPropertyValue, v if !["formatted", "free"].include?(v)
167
167
  v
168
168
  },
169
169
  }.freeze
@@ -316,7 +316,7 @@ module Weechat
316
316
  id = @callbacks.size - 1
317
317
  ptr = Weechat.buffer_new(name.to_s, "input_callback", id.to_s, "close_callback", id.to_s)
318
318
  if ptr.empty?
319
- raise Exception::DuplicateBufferName(name.to_s)
319
+ raise Exception::DuplicateBufferName, name.to_s
320
320
  else
321
321
  @callbacks[-1][:ptr] = ptr
322
322
  Buffer.new(ptr)
@@ -357,9 +357,15 @@ module Weechat
357
357
  #
358
358
  # @return [Boolean]
359
359
  def channel?
360
- # get all servers
361
- # get all channels of all servers
362
- # return true of pointer equal
360
+ self.localvar_type == "channel"
361
+ end
362
+
363
+ # Returns the channel associated with the buffer.
364
+ #
365
+ # @raise [Exception::NotAChannel]
366
+ # @return [IRC::Channel]
367
+ def channel
368
+ IRC::Channel.new(self)
363
369
  end
364
370
 
365
371
  # Send a command to the current buffer.
@@ -0,0 +1,72 @@
1
+ module Weechat
2
+ module IRC
3
+ class Channel
4
+ include Weechat::Pointer
5
+ extend Weechat::Properties
6
+
7
+ @transformations = {
8
+ }.freeze
9
+
10
+ @mappings = {
11
+ }.freeze
12
+
13
+ init_properties
14
+
15
+ attr_reader :buffer
16
+ def initialize(buffer)
17
+ @buffer = Buffer.new(buffer.to_s)
18
+ @ptr = @buffer.ptr
19
+ if not ["channel"].include?(@buffer.localvar_type)
20
+ raise Exception::NotAChannel, buffer.ptr
21
+ end
22
+ end
23
+
24
+ def get_infolist
25
+ Weechat::IRC::Server.all.map{|server|
26
+ Weechat::Infolist.parse("irc_channel", "", server.name).find{|channel|
27
+ channel[:buffer] == @ptr
28
+ }
29
+ }.compact
30
+ end
31
+
32
+ def server
33
+ IRC::Server.new(@buffer.localvar_server)
34
+ end
35
+
36
+ def part(reason="")
37
+ @buffer.command("/part #{self.name} #{reason}")
38
+ end
39
+
40
+ def join(password = "")
41
+ @buffer.command("/join #{self.name} #{password}")
42
+ end
43
+
44
+ def rejoin(password = "")
45
+ part(reason)
46
+ join(password)
47
+ end
48
+ alias_method :cycle, :rejoin
49
+
50
+ def nicks
51
+ Weechat::Infolist.parse("irc_nick", "",
52
+ "#{self.server.name},#{self.name}").map {|user|
53
+ IRC::User.new(user.merge({:channel => self}))
54
+ }
55
+ end
56
+ alias_method :users, :nicks
57
+
58
+ def command(*parts)
59
+ @buffer.command(*parts)
60
+ end
61
+ alias_method :send_command, :command
62
+ alias_method :exec, :command
63
+ alias_method :execute, :command
64
+
65
+ def send(*text)
66
+ @buffer.send(*text)
67
+ end
68
+ alias_method :privmsg, :send
69
+ alias_method :say, :send
70
+ end
71
+ end
72
+ end
@@ -27,5 +27,11 @@ module Weechat
27
27
  class WEECHAT_RC_OK < ::Exception; end
28
28
  class WEECHAT_RC_ERROR < ::Exception; end
29
29
  class WEECHAT_RC_OK_EAT < ::Exception; end
30
+
31
+ # This exception gets raised when one tries to receive the channel
32
+ # of a buffer which does not represent one.
33
+ class NotAChannel < RuntimeError; end
34
+
35
+ class UnknownServer < RuntimeError; end
30
36
  end
31
37
  end
@@ -0,0 +1,16 @@
1
+ module Weechat
2
+ module IRC
3
+ class Host
4
+ attr_reader :user
5
+ attr_reader :host
6
+ def initialize(string)
7
+ @user, @host = string.split("@")
8
+ end
9
+
10
+ def identd?
11
+ @user[0..0] != "~"
12
+ end
13
+ alias_method :ident?, :identd?
14
+ end
15
+ end
16
+ end
@@ -1,5 +1,42 @@
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
+
3
40
  def self.parse(type, ptr="", arguments="")
4
41
  infolist_ptr = Weechat.infolist_get(type, ptr, arguments)
5
42
  ret = []
@@ -4,18 +4,21 @@ module Weechat
4
4
  # blankslate... breaks things
5
5
 
6
6
 
7
- def self.options
8
- @options
9
- end
10
-
11
7
  def initialize(config, option)
12
- self.__class__.options << [config, option, self]
13
8
  @old_obj = config.__get(option)
14
- @config = config
15
- @option = option
9
+ @config = config
10
+ @option = option
16
11
  @frozen = false
17
12
  end
18
13
 
14
+ def __config__
15
+ @config
16
+ end
17
+
18
+ def __option__
19
+ @option
20
+ end
21
+
19
22
  def __freeze__
20
23
  @frozen = true
21
24
  end
@@ -12,7 +12,7 @@ module Weechat
12
12
  end
13
13
 
14
14
  def ==(other)
15
- @ptr == other.ptr
15
+ other.respond_to?(:ptr) and @ptr == other.ptr
16
16
  end
17
17
  alias_method :eql?, "=="
18
18
  alias_method :equal?, "=="
@@ -90,7 +90,7 @@ module Weechat
90
90
  # @see #get_infolist_property
91
91
  # @see #set_property
92
92
  def get_property(property)
93
- raise Exception::UnknownProperty.new(property) unless valid_property?(property)
93
+ raise Exception::UnknownProperty, property unless valid_property?(property)
94
94
  case ret = __get_property(property)
95
95
  when true, false, nil
96
96
  ret
@@ -109,7 +109,7 @@ module Weechat
109
109
  elsif valid_property?(property, :infolist)
110
110
  v = get_infolist_property(property)
111
111
  else
112
- raise Exception::UnknownProperty.new(property)
112
+ raise Exception::UnknownProperty, property
113
113
  end
114
114
 
115
115
  return self.class.apply_transformation(property, v)
@@ -125,7 +125,7 @@ module Weechat
125
125
  # @see #get_infolist_property
126
126
  def get_integer_property(property)
127
127
  property = property.to_s
128
- raise Exception::UnknownProperty.new(property) unless valid_property?(property, :integer)
128
+ raise Exception::UnknownProperty, property unless valid_property?(property, :integer)
129
129
  get_integer(property)
130
130
  end
131
131
 
@@ -149,7 +149,7 @@ module Weechat
149
149
  # @see #set_string_property
150
150
  def get_string_property(property)
151
151
  property = property.to_s
152
- raise Exception::UnknownProperty.new(property) unless valid_property?(property, :string)
152
+ raise Exception::UnknownProperty, property unless valid_property?(property, :string)
153
153
  get_string(property)
154
154
  end
155
155
 
@@ -181,7 +181,7 @@ module Weechat
181
181
  def get_infolist_property(property)
182
182
  property = property.to_sym
183
183
  values = get_infolist.first
184
- raise Exception::UnknownProperty.new(property.to_s) unless values[property]
184
+ raise Exception::UnknownProperty, property.to_s unless values.has_key?(property)
185
185
  values[property]
186
186
  end
187
187
 
@@ -207,14 +207,14 @@ module Weechat
207
207
  # @see #set
208
208
  def set_property(property, v, freeze = false)
209
209
  property = property.to_s
210
- raise Exception::UnsettableProperty.new(property) unless settable_property?(property)
210
+ raise Exception::UnsettableProperty, property unless settable_property?(property)
211
211
  v = Utilities.apply_transformation(property, v, self.class.rtransformations)
212
212
 
213
213
  set(property, v)
214
214
  if freeze
215
- Property.properties.each do |prop|
216
- if prop[0..1] == [@ptr, property]
217
- prop[2].__freeze__
215
+ ObjectSpace.each_object(Weechat::Property).each do |prop|
216
+ if prop.__weechat_obj__.ptr == @ptr and prop.__property__ == property
217
+ prop.__freeze__
218
218
  end
219
219
  end
220
220
  end
@@ -228,7 +228,7 @@ module Weechat
228
228
  # @see #set
229
229
  def set_string_property(property, v)
230
230
  property = property.to_s
231
- raise Exception::UnsettableProperty.new(property) unless settable_property?(property)
231
+ raise Exception::UnsettableProperty, property unless settable_property?(property)
232
232
  set(property, v)
233
233
  end
234
234
 
@@ -268,7 +268,7 @@ module Weechat
268
268
  when :localvar
269
269
  property =~ /^localvar_.+$/
270
270
  when :infolist
271
- get_infolist.first[property.to_sym]
271
+ get_infolist.first.has_key?(property.to_sym)
272
272
  end
273
273
  end
274
274
 
@@ -294,7 +294,7 @@ module Weechat
294
294
  end
295
295
 
296
296
  get_infolist.first.each do |property, value|
297
- prop = __get_property(property)
297
+ prop = self.class.apply_transformation(property, value)
298
298
  h[property] = prop
299
299
  end
300
300
 
@@ -3,13 +3,8 @@ module Weechat
3
3
  @properties = [] # we can't use a Hash because hashing
4
4
  # blankslate... breaks things
5
5
 
6
-
7
- def self.properties
8
- @properties
9
- end
10
6
 
11
7
  def initialize(weechat_obj, property)
12
- self.__class__.properties << [weechat_obj.ptr, property, self]
13
8
  @old_obj = weechat_obj.__get_property(property)
14
9
  @weechat_obj = weechat_obj
15
10
  @property = property
@@ -17,6 +12,14 @@ module Weechat
17
12
  @frozen = false
18
13
  end
19
14
 
15
+ def __weechat_obj__
16
+ @weechat_obj
17
+ end
18
+
19
+ def __property__
20
+ @property
21
+ end
22
+
20
23
  def __freeze__
21
24
  @frozen = true
22
25
  end
@@ -40,7 +43,7 @@ module Weechat
40
43
  @old_obj = obj
41
44
  end
42
45
  end
43
-
46
+
44
47
  ret
45
48
  end
46
49
  end
@@ -7,4 +7,6 @@ class Object
7
7
  def self.from_weechat_config(v)
8
8
  YAML.load(v)
9
9
  end
10
+
11
+ alias_method :__class__, :class
10
12
  end
@@ -119,9 +119,9 @@ module Weechat
119
119
  value = value.to_weechat_config
120
120
  Weechat.config_set_plugin(option.to_s, value)
121
121
  if freeze
122
- Option.options.each do |opt|
123
- if opt[0..1] == [self, option]
124
- opt[2].__freeze__
122
+ ObjectSpace.each_object(Weechat::Option).each do |opt|
123
+ if opt.__config__ == self and opt.__option__ == option
124
+ opt.__freeze__
125
125
  end
126
126
  end
127
127
  end
@@ -4,8 +4,10 @@ require 'date'
4
4
  module Weechat
5
5
  module IRC
6
6
  class Server
7
+ extend Weechat::Properties
8
+
7
9
  attr_reader :name
8
- PROCESSORS = {
10
+ @transformations = {
9
11
  [:buffer] => lambda {|b|
10
12
  if b.empty?
11
13
  nil
@@ -13,79 +15,76 @@ module Weechat
13
15
  Weechat::Buffer.new(b)
14
16
  end
15
17
  },
16
- [:ipv6, :ssl, :ssl_verify,
17
- :autoconnect, :autoreconnect,
18
- :autorejoin, :temp_server,
19
- :is_connected, :ssl_connected,
20
- :reconnect_join, :disable_autojoin,
21
- :is_away] => lambda {|i| i == 0 ? false : true },
22
- [:reconnect_start, :command_time,
23
- :away_time, :lag_next_check,
24
- :last_user_message] => lambda {|v| DateTime.parse(v)},
25
- }
18
+ [:ipv6, :ssl, :ssl_verify, :autoconnect, :autoreconnect,
19
+ :autorejoin, :temp_server, :is_connected, :ssl_connected,
20
+ :reconnect_join, :disable_autojoin, :is_away] => lambda {|v|
21
+ Weechat.integer_to_bool(v)
22
+ },
23
+ [:reconnect_start, :command_time, :away_time, :lag_next_check,
24
+ :last_user_message] => lambda {|v| Date.parse(v) },
25
+ [:nicks] => lambda {|v| v.split(",") }
26
+ }.freeze
26
27
 
27
- MAPPINGS = {
28
+ @mappings = {
29
+ :ipv6? => :ipv6,
30
+ :ssl? => :ssl,
28
31
  :autoconnect? => :autoconnect,
29
32
  :autoreconnect? => :autoreconnect,
30
33
  :autorejoin? => :autorejoin,
31
34
  :temp_server? => :temp_server,
32
35
  :connected? => :is_connected,
33
36
  :ssl_connected? => :ssl_connected,
34
- :reconnect_join? => :reconnect_join,
35
- }
37
+ :join_on_reconnect? => :reconnect_join,
38
+ :away? => :is_away,
39
+ }.freeze
40
+
41
+ init_properties
36
42
 
37
43
  def autojoin?
38
44
  !disable_autojoin
39
45
  end
40
46
 
47
+ attr_reader :ptr
41
48
  def initialize(name)
42
- @name = name
49
+ @ptr = @name = name.to_s
50
+ raise Exception::UnknownServer, name if get_infolist.empty?
43
51
  end
44
52
 
45
53
  class << self
46
54
  alias_method :from_name, :new
47
- end
48
55
 
49
- def self.buffers
50
- servers = []
51
- Weechat::Infolist.parse("irc_server").each do |server|
52
- servers << Server.new(server[:name])
56
+ def servers
57
+ servers = []
58
+ Weechat::Infolist.parse("irc_server").each do |server|
59
+ servers << Server.new(server[:name])
60
+ end
61
+ servers
53
62
  end
54
- servers
55
- end
56
- class << self
57
- alias_method :all, :buffers
63
+ alias_method :all, :servers
58
64
  end
59
65
 
60
- # TODO method for creating a new server
66
+ def channels
67
+ channels = []
68
+ Weechat::Infolist.parse("irc_channel", "", @name).each do |channel|
69
+ channels << IRC::Channel.new(channel[:buffer])
70
+ end
71
+ channels
72
+ end
61
73
 
62
- def data
63
- Weechat::Infolist.parse("irc_server", "", @name).first
74
+ def connect
75
+ return false if connected?
76
+ Weechat.exec("/connect #{@name}")
64
77
  end
65
78
 
66
- def respond_to?(m)
67
- if data.has_key?(m.to_sym)
68
- true
69
- else
70
- super
71
- end
79
+ def disconnect
80
+ return false if not connected?
81
+ self.buffer.exec("/disconnect #{@name}")
72
82
  end
73
83
 
74
- def method_missing(m, *args)
75
- m = MAPPINGS[m] || m
76
- properties = data
77
- if properties.has_key?(m) and args.size == 0
78
- v = properties[m]
79
- PROCESSORS.each do |key, value|
80
- if key.include?(m)
81
- v = value.call(v)
82
- break
83
- end
84
- end
85
- return v
86
- else
87
- super
88
- end
84
+ # TODO method for creating a new server
85
+
86
+ def get_infolist
87
+ Weechat::Infolist.parse("irc_server", "", @name)
89
88
  end
90
89
  end
91
90
  end
@@ -0,0 +1,64 @@
1
+ module Weechat
2
+ module IRC
3
+ class User
4
+ attr_reader :name
5
+ attr_reader :host
6
+ attr_reader :flags
7
+ attr_reader :color
8
+ attr_reader :channel
9
+ def initialize(args = {})
10
+ @name = args[:name]
11
+ @host = IRC::Host.new(args[:host])
12
+ @flags, @color, @channel = args.values_at(:flags, :color, :channel)
13
+ end
14
+
15
+ %w(chanowner? chanadmin? chanadmin2? op?
16
+ halfop? voice? away? chanuser?).each_with_index do |method, bit|
17
+ define_method(method) {(@flags & (2 ** bit)) > 0}
18
+ end
19
+ alias_method :opped?, :op?
20
+ alias_method :voiced?, :voice?
21
+
22
+ def op
23
+ @channel.exec("/op #@name")
24
+ end
25
+
26
+ def halfop
27
+ @channel.exec("/halfop #@name")
28
+ end
29
+
30
+ def voice
31
+ @channel.exec("/voice #@name")
32
+ end
33
+
34
+ def deop
35
+ @channel.exec("/deop #@name")
36
+ end
37
+
38
+ def dehalfop
39
+ @channel.exec("/dehalfop #@name")
40
+ end
41
+
42
+ def devoice
43
+ @channel.exec("/devoice #@name")
44
+ end
45
+
46
+ def kick(reason="")
47
+ @channel.exec("/kick #@name #{reason}")
48
+ end
49
+
50
+ def ban
51
+ @channel.exec("/ban #@name")
52
+ end
53
+
54
+ def unban
55
+ @channel.exec("/unban #@name")
56
+ end
57
+
58
+ def kickban(reason="")
59
+ kick(reason)
60
+ ban
61
+ end
62
+ end
63
+ end
64
+ end
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.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dominik Honnef
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-12-14 00:00:00 +01:00
12
+ date: 2009-12-21 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -50,13 +50,16 @@ files:
50
50
  - lib/weechat/line.rb
51
51
  - lib/weechat/exceptions.rb
52
52
  - lib/weechat/command.rb
53
+ - lib/weechat/channel.rb
53
54
  - lib/weechat/info.rb
54
55
  - lib/weechat/process.rb
55
56
  - lib/weechat/property.rb
56
57
  - lib/weechat/server.rb
57
58
  - lib/weechat/input.rb
58
59
  - lib/weechat/hooks.rb
60
+ - lib/weechat/host.rb
59
61
  - lib/weechat/timer.rb
62
+ - lib/weechat/user.rb
60
63
  - lib/weechat.rb
61
64
  - COPYING
62
65
  - TODO