ruggby 0.3.2.1 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.rdoc +2 -0
- data/Manifest +6 -1
- data/README.md +13 -0
- data/Rakefile +1 -1
- data/init.rb +1 -0
- data/lib/ruggby.rb +31 -27
- data/lib/ruggby/action/change_status.rb +3 -3
- data/lib/ruggby/action/check_uin_status.rb +25 -0
- data/lib/ruggby/action/create_message.rb +3 -3
- data/lib/ruggby/action/login.rb +6 -6
- data/lib/ruggby/action/mark.rb +1 -1
- data/lib/ruggby/action/new_message.rb +4 -4
- data/lib/ruggby/action/new_status.rb +29 -0
- data/lib/ruggby/action/ping.rb +1 -1
- data/lib/ruggby/action/read.rb +4 -1
- data/lib/ruggby/callback.rb +4 -0
- data/lib/ruggby/client.rb +18 -12
- data/lib/ruggby/converter.rb +24 -17
- data/lib/ruggby/logger.rb +20 -12
- data/lib/ruggby/packet/factory.rb +5 -1
- data/lib/ruggby/packet/incoming/base.rb +2 -1
- data/lib/ruggby/packet/incoming/message.rb +3 -3
- data/lib/ruggby/packet/incoming/status.rb +35 -0
- data/lib/ruggby/packet/incoming/welcome.rb +1 -1
- data/lib/ruggby/packet/outgoing/base.rb +3 -2
- data/lib/ruggby/packet/outgoing/change_status.rb +6 -6
- data/lib/ruggby/packet/outgoing/check_uin_status.rb +43 -0
- data/lib/ruggby/packet/outgoing/login.rb +19 -19
- data/lib/ruggby/packet/outgoing/message.rb +1 -1
- data/lib/ruggby/socket.rb +6 -5
- data/lib/ruggby/string_encoder.rb +1 -1
- data/lib/ruggby/version.rb +1 -1
- data/ruggby.gemspec +9 -8
- metadata +34 -23
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 80171c0ba9069ce373bab30b0163f849cd9bff96
|
4
|
+
data.tar.gz: 47ca496e0a459e95cac0626a00265d40900f637b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ed4dd9b23bb589f3034fafd95fc4f2209104ecf4c71a5c204315ce24cec67f5e6184dde4b2c5dfa3da6c6b46f8a299d83f7cfd25a5593f756c0920598ae5f880
|
7
|
+
data.tar.gz: 748a24a0ec15c6040c0513bbdce4bf648edd287f1d4657b05b93c3bfe56d1eb9324478a786587d767d118f0566f016ad9c3481f2c9b3409b1d07adeba8b8a038
|
data/CHANGELOG.rdoc
CHANGED
data/Manifest
CHANGED
@@ -1,16 +1,19 @@
|
|
1
1
|
CHANGELOG.rdoc
|
2
2
|
Gemfile
|
3
3
|
MIT-LICENSE
|
4
|
+
Manifest
|
4
5
|
README.md
|
5
6
|
Rakefile
|
6
7
|
init.rb
|
7
8
|
lib/ruggby.rb
|
8
9
|
lib/ruggby/action/base.rb
|
9
10
|
lib/ruggby/action/change_status.rb
|
11
|
+
lib/ruggby/action/check_uin_status.rb
|
10
12
|
lib/ruggby/action/create_message.rb
|
11
13
|
lib/ruggby/action/login.rb
|
12
14
|
lib/ruggby/action/mark.rb
|
13
15
|
lib/ruggby/action/new_message.rb
|
16
|
+
lib/ruggby/action/new_status.rb
|
14
17
|
lib/ruggby/action/ping.rb
|
15
18
|
lib/ruggby/action/read.rb
|
16
19
|
lib/ruggby/callback.rb
|
@@ -21,9 +24,11 @@ lib/ruggby/packet/factory.rb
|
|
21
24
|
lib/ruggby/packet/incoming/base.rb
|
22
25
|
lib/ruggby/packet/incoming/login_status.rb
|
23
26
|
lib/ruggby/packet/incoming/message.rb
|
27
|
+
lib/ruggby/packet/incoming/status.rb
|
24
28
|
lib/ruggby/packet/incoming/welcome.rb
|
25
29
|
lib/ruggby/packet/outgoing/base.rb
|
26
30
|
lib/ruggby/packet/outgoing/change_status.rb
|
31
|
+
lib/ruggby/packet/outgoing/check_uin_status.rb
|
27
32
|
lib/ruggby/packet/outgoing/login.rb
|
28
33
|
lib/ruggby/packet/outgoing/mark.rb
|
29
34
|
lib/ruggby/packet/outgoing/message.rb
|
@@ -33,6 +38,6 @@ lib/ruggby/socket.rb
|
|
33
38
|
lib/ruggby/string_encoder.rb
|
34
39
|
lib/ruggby/threader.rb
|
35
40
|
lib/ruggby/version.rb
|
41
|
+
ruggby.gemspec
|
36
42
|
spec/callback_spec.rb
|
37
43
|
spec/spec_helper.rb
|
38
|
-
Manifest
|
data/README.md
CHANGED
@@ -130,6 +130,7 @@ RuGGby supports events, so you can assign your own events on demand. Events list
|
|
130
130
|
* :login - event triggered after login
|
131
131
|
* :create_message - event triggered after message has been send
|
132
132
|
* :change_status - event triggered after our status/description change
|
133
|
+
* :status_changed - event triggered after someone on buddy list change status
|
133
134
|
|
134
135
|
Each event block is triggered with parameters:
|
135
136
|
|
@@ -140,6 +141,7 @@ Each event block is triggered with parameters:
|
|
140
141
|
* :login - no parameters
|
141
142
|
* :create_message(uin, message)
|
142
143
|
* :change_status(status, description)
|
144
|
+
* :check_uin_status(uin)
|
143
145
|
|
144
146
|
In order to assign an action to an event, pass a block into events hash:
|
145
147
|
|
@@ -166,6 +168,17 @@ end
|
|
166
168
|
|
167
169
|
The *:new_message* event is triggered in a separate thread so the socket read process is still going. The above code will (after login!) return a message to it's sender.
|
168
170
|
|
171
|
+
To add a friend to a buddy list to listening his status you can:
|
172
|
+
|
173
|
+
```ruby
|
174
|
+
gg.check_uin_status(uin) # to listen buddy initial status, move this line after 'on_status_changed'
|
175
|
+
|
176
|
+
gg.on_status_changed do |uin,status|
|
177
|
+
print "Friend #{uin} changed status to #{status}"
|
178
|
+
end
|
179
|
+
|
180
|
+
```
|
181
|
+
|
169
182
|
## TODO
|
170
183
|
|
171
184
|
* Tests (currently there is no :()
|
data/Rakefile
CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
|
|
2
2
|
require 'rake'
|
3
3
|
require 'echoe'
|
4
4
|
|
5
|
-
Echoe.new('ruggby', '0.3.
|
5
|
+
Echoe.new('ruggby', '0.3.3') do |p|
|
6
6
|
p.description = 'Gadu Gadu protocol client implementation in Ruby language'
|
7
7
|
p.url = 'https://github.com/mensfeld/ruGGby'
|
8
8
|
p.author = 'Maciej Mensfeld'
|
data/init.rb
CHANGED
data/lib/ruggby.rb
CHANGED
@@ -19,54 +19,58 @@ $:.unshift File.dirname(__FILE__)
|
|
19
19
|
|
20
20
|
module RuGGby
|
21
21
|
|
22
|
-
autoload :Version, 'ruggby/version
|
22
|
+
autoload :Version, 'ruggby/version'
|
23
23
|
|
24
24
|
module Packet
|
25
25
|
# Factory used to build incoming packets out of raw socket messages
|
26
|
-
autoload :Factory, 'ruggby/packet/factory
|
26
|
+
autoload :Factory, 'ruggby/packet/factory'
|
27
27
|
|
28
28
|
# Incoming packets used to wrap the raw socket messages send by GG server
|
29
29
|
module Incoming
|
30
30
|
path = 'ruggby/packet/incoming'
|
31
|
-
autoload :Base,
|
32
|
-
autoload :LoginStatus, "#{path}/login_status
|
33
|
-
autoload :Message,
|
34
|
-
autoload :
|
31
|
+
autoload :Base, "#{path}/base"
|
32
|
+
autoload :LoginStatus, "#{path}/login_status"
|
33
|
+
autoload :Message, "#{path}/message"
|
34
|
+
autoload :Status, "#{path}/status"
|
35
|
+
autoload :Welcome, "#{path}/welcome"
|
35
36
|
end
|
36
37
|
|
37
38
|
# Outgoing packets send to GG server
|
38
39
|
module Outgoing
|
39
40
|
path = 'ruggby/packet/outgoing'
|
40
|
-
autoload :Base,
|
41
|
-
autoload :Login,
|
42
|
-
autoload :Mark,
|
43
|
-
autoload :Message,
|
44
|
-
autoload :Ping,
|
45
|
-
autoload :ChangeStatus, "#{path}/change_status
|
41
|
+
autoload :Base, "#{path}/base"
|
42
|
+
autoload :Login, "#{path}/login"
|
43
|
+
autoload :Mark, "#{path}/mark"
|
44
|
+
autoload :Message, "#{path}/message"
|
45
|
+
autoload :Ping, "#{path}/ping"
|
46
|
+
autoload :ChangeStatus, "#{path}/change_status"
|
47
|
+
autoload :CheckUinStatus, "#{path}/check_uin_status"
|
46
48
|
end
|
47
49
|
end
|
48
50
|
|
49
51
|
# Available actions (we can hookup to all of them)
|
50
52
|
module Action
|
51
53
|
path = 'ruggby/action'
|
52
|
-
autoload :Base,
|
53
|
-
autoload :CreateMessage, "#{path}/create_message
|
54
|
-
autoload :Login,
|
55
|
-
autoload :Mark,
|
56
|
-
autoload :NewMessage,
|
57
|
-
autoload :
|
58
|
-
autoload :
|
59
|
-
autoload :
|
54
|
+
autoload :Base, "#{path}/base"
|
55
|
+
autoload :CreateMessage, "#{path}/create_message"
|
56
|
+
autoload :Login, "#{path}/login"
|
57
|
+
autoload :Mark, "#{path}/mark"
|
58
|
+
autoload :NewMessage, "#{path}/new_message"
|
59
|
+
autoload :NewStatus, "#{path}/new_status"
|
60
|
+
autoload :Ping, "#{path}/ping"
|
61
|
+
autoload :Read, "#{path}/read"
|
62
|
+
autoload :ChangeStatus, "#{path}/change_status"
|
63
|
+
autoload :CheckUinStatus, "#{path}/check_uin_status"
|
60
64
|
end
|
61
65
|
|
62
66
|
# Other stuff that is needed
|
63
|
-
autoload :Socket,
|
64
|
-
autoload :Logger,
|
65
|
-
autoload :Callback,
|
66
|
-
autoload :Converter,
|
67
|
-
autoload :Password,
|
68
|
-
autoload :Threader,
|
67
|
+
autoload :Socket, 'ruggby/socket'
|
68
|
+
autoload :Logger, 'ruggby/logger'
|
69
|
+
autoload :Callback, 'ruggby/callback'
|
70
|
+
autoload :Converter, 'ruggby/converter'
|
71
|
+
autoload :Password, 'ruggby/password'
|
72
|
+
autoload :Threader, 'ruggby/threader'
|
69
73
|
autoload :StringEncoder, 'ruggby/string_encoder'
|
70
|
-
autoload :Client,
|
74
|
+
autoload :Client, 'ruggby/client'
|
71
75
|
|
72
76
|
end
|
@@ -8,9 +8,9 @@ module RuGGby
|
|
8
8
|
attr_reader :status, :description
|
9
9
|
|
10
10
|
def initialize(client, status, description)
|
11
|
-
@client
|
12
|
-
@block
|
13
|
-
@status
|
11
|
+
@client = client
|
12
|
+
@block = client.actions[:change_status]
|
13
|
+
@status = status
|
14
14
|
@description = description
|
15
15
|
end
|
16
16
|
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module RuGGby
|
2
|
+
|
3
|
+
module Action
|
4
|
+
|
5
|
+
class CheckUinStatus < Base
|
6
|
+
|
7
|
+
def initialize(client, uin)
|
8
|
+
@client = client
|
9
|
+
@uin = uin
|
10
|
+
end
|
11
|
+
|
12
|
+
def run!
|
13
|
+
@client.logger.debug('RuGGby::Action::CheckUinStatus')
|
14
|
+
|
15
|
+
msg = Packet::Outgoing::CheckUinStatus.new(@uin)
|
16
|
+
@client.socket.write(msg)
|
17
|
+
|
18
|
+
@block.call(@uin) if @block
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -6,9 +6,9 @@ module RuGGby
|
|
6
6
|
class CreateMessage < Base
|
7
7
|
|
8
8
|
def initialize(client, uin, message)
|
9
|
-
@client
|
10
|
-
@block
|
11
|
-
@uin
|
9
|
+
@client = client
|
10
|
+
@block = client.actions[:create_message]
|
11
|
+
@uin = uin
|
12
12
|
@message = message
|
13
13
|
end
|
14
14
|
|
data/lib/ruggby/action/login.rb
CHANGED
@@ -7,7 +7,7 @@ module RuGGby
|
|
7
7
|
|
8
8
|
def initialize(client)
|
9
9
|
@client = client
|
10
|
-
@block
|
10
|
+
@block = client.actions[:login]
|
11
11
|
end
|
12
12
|
|
13
13
|
def run!
|
@@ -16,10 +16,10 @@ module RuGGby
|
|
16
16
|
welcome = RuGGby::Packet::Factory.new(@client.socket).build
|
17
17
|
|
18
18
|
login = Packet::Outgoing::Login.new(
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
19
|
+
:uin => @client.login,
|
20
|
+
:hash => Password.hash(@client.password, welcome.seed),
|
21
|
+
:status => @client.status,
|
22
|
+
:description => @client.description
|
23
23
|
)
|
24
24
|
|
25
25
|
@client.logger.debug('RuGGby::Action::Login sending Login packet')
|
@@ -28,7 +28,7 @@ module RuGGby
|
|
28
28
|
login_status = RuGGby::Packet::Factory.new(@client.socket).build
|
29
29
|
|
30
30
|
@client.logger.debug("RuGGby::Action::Login #{login_status.class}")
|
31
|
-
|
31
|
+
|
32
32
|
@client.logged = login_status.successful?
|
33
33
|
@block.call if @block
|
34
34
|
end
|
data/lib/ruggby/action/mark.rb
CHANGED
@@ -8,11 +8,11 @@ module RuGGby
|
|
8
8
|
attr_reader :uin, :message
|
9
9
|
|
10
10
|
def initialize(client, data)
|
11
|
-
@client
|
12
|
-
@block
|
13
|
-
@uin
|
11
|
+
@client = client
|
12
|
+
@block = client.actions[:new_message]
|
13
|
+
@uin = data[0]
|
14
14
|
@created_at = Time.at(data[2])
|
15
|
-
@message
|
15
|
+
@message = StringEncoder.complex(data[4])
|
16
16
|
end
|
17
17
|
|
18
18
|
def run!
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module RuGGby
|
2
|
+
|
3
|
+
module Action
|
4
|
+
|
5
|
+
# Action invoken when new message occures
|
6
|
+
class NewStatus < Base
|
7
|
+
|
8
|
+
attr_reader :uin, :status
|
9
|
+
|
10
|
+
def initialize(client, data)
|
11
|
+
@client = client
|
12
|
+
@block = client.actions[:status_changed]
|
13
|
+
@uin = data[0]
|
14
|
+
@status = data[1]
|
15
|
+
end
|
16
|
+
|
17
|
+
def run!
|
18
|
+
if @uin && @status
|
19
|
+
@client.logger.debug('RuGGby::Action::NewStatus')
|
20
|
+
@status = RuGGby::Converter::FROM_STATUS[@status]
|
21
|
+
@block.call(@uin, @status) if @block
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
data/lib/ruggby/action/ping.rb
CHANGED
data/lib/ruggby/action/read.rb
CHANGED
@@ -10,7 +10,7 @@ module RuGGby
|
|
10
10
|
|
11
11
|
def initialize(client)
|
12
12
|
@client = client
|
13
|
-
@block
|
13
|
+
@block = client.actions[:read]
|
14
14
|
end
|
15
15
|
|
16
16
|
# Start a thread that reads data and if there is any data - try to create
|
@@ -30,6 +30,9 @@ module RuGGby
|
|
30
30
|
when :new_message then
|
31
31
|
action = RuGGby::Action::NewMessage.new(@client, el.data)
|
32
32
|
Threader.run(@client, action)
|
33
|
+
when :status_changed then
|
34
|
+
action = RuGGby::Action::NewStatus.new(@client, el.data)
|
35
|
+
Threader.run(@client, action)
|
33
36
|
end
|
34
37
|
|
35
38
|
@block.call(el) if @block
|
data/lib/ruggby/callback.rb
CHANGED
data/lib/ruggby/client.rb
CHANGED
@@ -10,20 +10,20 @@ module RuGGby
|
|
10
10
|
attr_accessor :log_level
|
11
11
|
end
|
12
12
|
|
13
|
-
@logger
|
13
|
+
@logger ||= RuGGby::Logger
|
14
14
|
@log_level ||= :debug
|
15
15
|
|
16
16
|
attr_reader :socket, :password
|
17
17
|
attr_writer :logged
|
18
|
-
attr_accessor :loops, :actions, :threads, :reconnect, :status,
|
19
|
-
|
18
|
+
attr_accessor :loops, :actions, :threads, :reconnect, :status,
|
19
|
+
:description, :login, :logger
|
20
20
|
|
21
21
|
def initialize()
|
22
|
-
@loops
|
22
|
+
@loops = {}
|
23
23
|
@actions = {}
|
24
24
|
@threads = []
|
25
|
-
@logged
|
26
|
-
@logger
|
25
|
+
@logged = false
|
26
|
+
@logger = self.class.logger.new(self.class.log_level)
|
27
27
|
|
28
28
|
@logger.debug('RuGGby::Client initialized')
|
29
29
|
end
|
@@ -31,9 +31,9 @@ module RuGGby
|
|
31
31
|
def login!(gg_nr, password, params = {})
|
32
32
|
@logger.debug('RuGGby::Client login in')
|
33
33
|
|
34
|
-
@login
|
35
|
-
@password
|
36
|
-
@status
|
34
|
+
@login = gg_nr
|
35
|
+
@password = password
|
36
|
+
@status = params[:status] || :available
|
37
37
|
@description = params[:description]
|
38
38
|
|
39
39
|
if logged?
|
@@ -59,7 +59,7 @@ module RuGGby
|
|
59
59
|
RuGGby::Action::Ping.new(self).run!
|
60
60
|
RuGGby::Action::Read.new(self).run!
|
61
61
|
end
|
62
|
-
|
62
|
+
|
63
63
|
@logged
|
64
64
|
end
|
65
65
|
|
@@ -70,8 +70,8 @@ module RuGGby
|
|
70
70
|
def logout!
|
71
71
|
@logger.debug('RuGGby::Client logout')
|
72
72
|
|
73
|
-
@threads.each { |t| t.exit
|
74
|
-
@loops.each
|
73
|
+
@threads.each { |t| t.exit }
|
74
|
+
@loops.each { |k, v| v.exit }
|
75
75
|
@socket.close
|
76
76
|
@logged = false
|
77
77
|
end
|
@@ -90,6 +90,12 @@ module RuGGby
|
|
90
90
|
@loops[:ping].join
|
91
91
|
end
|
92
92
|
|
93
|
+
def check_uin_status(uin)
|
94
|
+
@logger.debug('RuGGby::Client checking buddy')
|
95
|
+
|
96
|
+
RuGGby::Action::CheckUinStatus.new(self, uin).run!
|
97
|
+
end
|
98
|
+
|
93
99
|
end
|
94
100
|
|
95
101
|
end
|
data/lib/ruggby/converter.rb
CHANGED
@@ -5,35 +5,42 @@ module RuGGby
|
|
5
5
|
|
6
6
|
# Available actions
|
7
7
|
ACTION = {
|
8
|
-
|
8
|
+
Packet::Incoming::Message::TYPE => :new_message,
|
9
|
+
Packet::Incoming::Status::TYPE => :status_changed
|
9
10
|
}
|
10
11
|
|
11
12
|
# Available statuses (sent by GG server)
|
12
13
|
STATUS = {
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
14
|
+
0x02 => :available,
|
15
|
+
0x04 => :available,
|
16
|
+
0x03 => :busy,
|
17
|
+
0x05 => :busy,
|
18
|
+
0x14 => :invisible,
|
19
|
+
0x16 => :invisible,
|
20
|
+
0x01 => :not_available,
|
21
|
+
0x15 => :not_available
|
21
22
|
}
|
22
23
|
|
23
24
|
# Statuses that we can use
|
24
25
|
TO_STATUS = {
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
26
|
+
:available => 0x02,
|
27
|
+
:busy => 0x03,
|
28
|
+
:invisible => 0x14,
|
29
|
+
:not_available => 0x01
|
30
|
+
}
|
31
|
+
|
32
|
+
FROM_STATUS = {
|
33
|
+
0x02 => :available,
|
34
|
+
0x03 => :busy,
|
35
|
+
0x01 => :not_available
|
29
36
|
}
|
30
37
|
|
31
38
|
# Statuses that are available but we also need to provide a description
|
32
39
|
TO_STATUS_DESCRIPTION = {
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
40
|
+
:available => 0x04,
|
41
|
+
:busy => 0x05,
|
42
|
+
:invisible => 0x16,
|
43
|
+
:not_available => 0x15
|
37
44
|
}
|
38
45
|
|
39
46
|
def self.status(status)
|
data/lib/ruggby/logger.rb
CHANGED
@@ -2,16 +2,16 @@ module RuGGby
|
|
2
2
|
|
3
3
|
class Logger
|
4
4
|
|
5
|
-
DEBUG
|
6
|
-
INFO
|
7
|
-
ERROR
|
8
|
-
FATAL
|
5
|
+
DEBUG = 0
|
6
|
+
INFO = 1
|
7
|
+
ERROR = 2
|
8
|
+
FATAL = 3
|
9
9
|
|
10
10
|
LEVEL_MAP = {
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
11
|
+
:debug => DEBUG,
|
12
|
+
:info => INFO,
|
13
|
+
:error => ERROR,
|
14
|
+
:fatal => FATAL
|
15
15
|
}
|
16
16
|
|
17
17
|
# Available log levels
|
@@ -24,19 +24,27 @@ module RuGGby
|
|
24
24
|
|
25
25
|
# Returns +true+ iff the current level allows for the printing of
|
26
26
|
# +DEBUG+ messages.
|
27
|
-
def debug?;
|
27
|
+
def debug?;
|
28
|
+
@level <= DEBUG;
|
29
|
+
end
|
28
30
|
|
29
31
|
# Returns +true+ iff the current level allows for the printing of
|
30
32
|
# +INFO+ messages.
|
31
|
-
def info?;
|
33
|
+
def info?;
|
34
|
+
@level <= INFO;
|
35
|
+
end
|
32
36
|
|
33
37
|
# Returns +true+ iff the current level allows for the printing of
|
34
38
|
# +ERROR+ messages.
|
35
|
-
def error?;
|
39
|
+
def error?;
|
40
|
+
@level <= ERROR;
|
41
|
+
end
|
36
42
|
|
37
43
|
# Returns +true+ iff the current level allows for the printing of
|
38
44
|
# +FATAL+ messages.
|
39
|
-
def fatal?;
|
45
|
+
def fatal?;
|
46
|
+
@level <= FATAL;
|
47
|
+
end
|
40
48
|
|
41
49
|
def debug(msg)
|
42
50
|
handle_message(msg, :debug)
|
@@ -25,6 +25,10 @@ module RuGGby
|
|
25
25
|
Packet::Incoming::LoginStatus.new(true)
|
26
26
|
when Packet::Incoming::Message::TYPE then
|
27
27
|
Packet::Incoming::Message.new(@data)
|
28
|
+
when Packet::Incoming::Status::TYPE then
|
29
|
+
Packet::Incoming::Status.new(@data)
|
30
|
+
when Packet::Incoming::Status::TYPE_2 then
|
31
|
+
Packet::Incoming::Status.new(@data)
|
28
32
|
when nil
|
29
33
|
Packet::Incoming::LoginStatus.new(false)
|
30
34
|
else
|
@@ -35,5 +39,5 @@ module RuGGby
|
|
35
39
|
end
|
36
40
|
|
37
41
|
end
|
38
|
-
|
42
|
+
|
39
43
|
end
|
@@ -8,16 +8,16 @@ module RuGGby
|
|
8
8
|
# Message packet contains not formatted data (not parsed, etc) so
|
9
9
|
class Message < RuGGby::Packet::Incoming::Base
|
10
10
|
|
11
|
-
TYPE
|
11
|
+
TYPE = 0x002e
|
12
12
|
PATTERN = 'LLLLa*'
|
13
13
|
|
14
14
|
attr_reader :uin, :message, :data, :created_at
|
15
15
|
|
16
16
|
def initialize(data)
|
17
17
|
super
|
18
|
-
@uin
|
18
|
+
@uin = @data[0]
|
19
19
|
@created_at = @data[2]
|
20
|
-
@message
|
20
|
+
@message = @data[4]
|
21
21
|
end
|
22
22
|
|
23
23
|
private
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module RuGGby
|
2
|
+
|
3
|
+
module Packet
|
4
|
+
|
5
|
+
module Incoming
|
6
|
+
|
7
|
+
# Packet containing and incoming message
|
8
|
+
# Message packet contains not formatted data (not parsed, etc) so
|
9
|
+
class Status < RuGGby::Packet::Incoming::Base
|
10
|
+
|
11
|
+
TYPE = 0x0036
|
12
|
+
TYPE_2 = 0x0037
|
13
|
+
PATTERN = 'LLa*'
|
14
|
+
|
15
|
+
attr_reader :uin, :status
|
16
|
+
|
17
|
+
def initialize(data)
|
18
|
+
super
|
19
|
+
@uin = @data[0]
|
20
|
+
@status = @data[1]
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def pattern
|
26
|
+
PATTERN
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
@@ -22,7 +22,8 @@ module RuGGby
|
|
22
22
|
|
23
23
|
end
|
24
24
|
|
25
|
-
class NotImplemented < Exception;
|
25
|
+
class NotImplemented < Exception;
|
26
|
+
end
|
26
27
|
|
27
28
|
def initialize(params = {})
|
28
29
|
params.each do |key, value|
|
@@ -61,7 +62,7 @@ module RuGGby
|
|
61
62
|
end
|
62
63
|
|
63
64
|
end
|
64
|
-
|
65
|
+
|
65
66
|
end
|
66
67
|
|
67
68
|
end
|
@@ -10,8 +10,8 @@ module RuGGby
|
|
10
10
|
# => description
|
11
11
|
class ChangeStatus < RuGGby::Packet::Outgoing::Base
|
12
12
|
|
13
|
-
TYPE
|
14
|
-
PATTERN
|
13
|
+
TYPE = 0x0038
|
14
|
+
PATTERN = 'LLL'
|
15
15
|
|
16
16
|
attr_accessor :status, :description
|
17
17
|
|
@@ -29,10 +29,10 @@ module RuGGby
|
|
29
29
|
|
30
30
|
def body
|
31
31
|
[
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
32
|
+
@status, # L
|
33
|
+
0, # L
|
34
|
+
@description.length, # L
|
35
|
+
@description # a
|
36
36
|
]
|
37
37
|
end
|
38
38
|
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module RuGGby
|
2
|
+
|
3
|
+
module Packet
|
4
|
+
|
5
|
+
module Outgoing
|
6
|
+
|
7
|
+
# Out going check uin status class
|
8
|
+
# When we want to check if someone is available or not we need to provide
|
9
|
+
# a GG number
|
10
|
+
class CheckUinStatus < RuGGby::Packet::Outgoing::Base
|
11
|
+
|
12
|
+
TYPE = 0x000d
|
13
|
+
PATTERN = 'LC'
|
14
|
+
|
15
|
+
attr_accessor :uin
|
16
|
+
|
17
|
+
# uin => GG nr
|
18
|
+
def initialize(uin)
|
19
|
+
# Type uin (gg number) to integer, just to be sure
|
20
|
+
@uin = uin.to_i
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def body
|
26
|
+
[@uin, 0x03]
|
27
|
+
end
|
28
|
+
|
29
|
+
def pattern
|
30
|
+
PATTERN
|
31
|
+
end
|
32
|
+
|
33
|
+
def type
|
34
|
+
TYPE
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -13,8 +13,8 @@ module RuGGby
|
|
13
13
|
# => :status
|
14
14
|
class Login < RuGGby::Packet::Outgoing::Base
|
15
15
|
|
16
|
-
TYPE
|
17
|
-
PATTERN
|
16
|
+
TYPE = 0x0031
|
17
|
+
PATTERN = 'La2Ca64LLLLSLSCCLa35L'
|
18
18
|
GG_VERSION = 'Gadu-Gadu Client build 10.0.0.10450'
|
19
19
|
|
20
20
|
attr_accessor :uin, :hash, :status, :description
|
@@ -34,23 +34,23 @@ module RuGGby
|
|
34
34
|
|
35
35
|
def body
|
36
36
|
[
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
37
|
+
@uin.to_i, # L
|
38
|
+
'pl', # a2
|
39
|
+
0x02, # C
|
40
|
+
@hash, # a64
|
41
|
+
@status, # L
|
42
|
+
0, # L
|
43
|
+
0x00000007, # L
|
44
|
+
0, # L
|
45
|
+
0, # S
|
46
|
+
0, # L
|
47
|
+
0, # S
|
48
|
+
64, # C
|
49
|
+
0x64, # C
|
50
|
+
GG_VERSION.length, # L
|
51
|
+
GG_VERSION, #a35
|
52
|
+
@description.length, #L,
|
53
|
+
@description # Nothing?
|
54
54
|
]
|
55
55
|
end
|
56
56
|
|
data/lib/ruggby/socket.rb
CHANGED
@@ -8,9 +8,10 @@ module RuGGby
|
|
8
8
|
# GG version that we send to the URL
|
9
9
|
VERSION = '10.0.0.7669'
|
10
10
|
# URL with 'real' server address
|
11
|
-
URL
|
11
|
+
URL = 'http://appmsg.gadu-gadu.pl'
|
12
12
|
|
13
|
-
class NotOperating < Exception;
|
13
|
+
class NotOperating < Exception;
|
14
|
+
end
|
14
15
|
|
15
16
|
attr_reader :host, :port
|
16
17
|
|
@@ -42,7 +43,7 @@ module RuGGby
|
|
42
43
|
|
43
44
|
# Create a TCPSocket
|
44
45
|
def socket
|
45
|
-
@socket ||= ::TCPSocket.new(@host
|
46
|
+
@socket ||= ::TCPSocket.new(@host, @port)
|
46
47
|
end
|
47
48
|
|
48
49
|
# Get connection params
|
@@ -51,8 +52,8 @@ module RuGGby
|
|
51
52
|
{:host => gg_info[0], :port => gg_info[1]}
|
52
53
|
end
|
53
54
|
|
54
|
-
#
|
55
|
-
#
|
55
|
+
# Build the whole GG address
|
56
|
+
# It is needed to obtain the "real" server IP address
|
56
57
|
def self.build_url(gg_nr)
|
57
58
|
@build_url ||= "#{URL}/appsvc/appmsg_ver8.asp?fmnumber=#{gg_nr}&version=#{VERSION}&lastmsg=0"
|
58
59
|
end
|
data/lib/ruggby/version.rb
CHANGED
data/ruggby.gemspec
CHANGED
@@ -1,25 +1,26 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
# stub: ruggby 0.3.3 ruby lib
|
2
3
|
|
3
4
|
Gem::Specification.new do |s|
|
4
5
|
s.name = "ruggby"
|
5
|
-
s.version = "0.3.
|
6
|
+
s.version = "0.3.3"
|
6
7
|
|
7
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
9
|
+
s.require_paths = ["lib"]
|
8
10
|
s.authors = ["Maciej Mensfeld"]
|
9
|
-
s.date = "
|
11
|
+
s.date = "2014-08-13"
|
10
12
|
s.description = "Gadu Gadu protocol client implementation in Ruby language"
|
11
13
|
s.email = "maciej@mensfeld.pl"
|
12
|
-
s.extra_rdoc_files = ["CHANGELOG.rdoc", "README.md", "lib/ruggby.rb", "lib/ruggby/action/base.rb", "lib/ruggby/action/change_status.rb", "lib/ruggby/action/create_message.rb", "lib/ruggby/action/login.rb", "lib/ruggby/action/mark.rb", "lib/ruggby/action/new_message.rb", "lib/ruggby/action/ping.rb", "lib/ruggby/action/read.rb", "lib/ruggby/callback.rb", "lib/ruggby/client.rb", "lib/ruggby/converter.rb", "lib/ruggby/logger.rb", "lib/ruggby/packet/factory.rb", "lib/ruggby/packet/incoming/base.rb", "lib/ruggby/packet/incoming/login_status.rb", "lib/ruggby/packet/incoming/message.rb", "lib/ruggby/packet/incoming/welcome.rb", "lib/ruggby/packet/outgoing/base.rb", "lib/ruggby/packet/outgoing/change_status.rb", "lib/ruggby/packet/outgoing/login.rb", "lib/ruggby/packet/outgoing/mark.rb", "lib/ruggby/packet/outgoing/message.rb", "lib/ruggby/packet/outgoing/ping.rb", "lib/ruggby/password.rb", "lib/ruggby/socket.rb", "lib/ruggby/string_encoder.rb", "lib/ruggby/threader.rb", "lib/ruggby/version.rb"]
|
13
|
-
s.files = ["CHANGELOG.rdoc", "Gemfile", "MIT-LICENSE", "README.md", "Rakefile", "init.rb", "lib/ruggby.rb", "lib/ruggby/action/base.rb", "lib/ruggby/action/change_status.rb", "lib/ruggby/action/create_message.rb", "lib/ruggby/action/login.rb", "lib/ruggby/action/mark.rb", "lib/ruggby/action/new_message.rb", "lib/ruggby/action/ping.rb", "lib/ruggby/action/read.rb", "lib/ruggby/callback.rb", "lib/ruggby/client.rb", "lib/ruggby/converter.rb", "lib/ruggby/logger.rb", "lib/ruggby/packet/factory.rb", "lib/ruggby/packet/incoming/base.rb", "lib/ruggby/packet/incoming/login_status.rb", "lib/ruggby/packet/incoming/message.rb", "lib/ruggby/packet/incoming/welcome.rb", "lib/ruggby/packet/outgoing/base.rb", "lib/ruggby/packet/outgoing/change_status.rb", "lib/ruggby/packet/outgoing/login.rb", "lib/ruggby/packet/outgoing/mark.rb", "lib/ruggby/packet/outgoing/message.rb", "lib/ruggby/packet/outgoing/ping.rb", "lib/ruggby/password.rb", "lib/ruggby/socket.rb", "lib/ruggby/string_encoder.rb", "lib/ruggby/threader.rb", "lib/ruggby/version.rb", "spec/callback_spec.rb", "spec/spec_helper.rb"
|
14
|
+
s.extra_rdoc_files = ["CHANGELOG.rdoc", "README.md", "lib/ruggby.rb", "lib/ruggby/action/base.rb", "lib/ruggby/action/change_status.rb", "lib/ruggby/action/check_uin_status.rb", "lib/ruggby/action/create_message.rb", "lib/ruggby/action/login.rb", "lib/ruggby/action/mark.rb", "lib/ruggby/action/new_message.rb", "lib/ruggby/action/new_status.rb", "lib/ruggby/action/ping.rb", "lib/ruggby/action/read.rb", "lib/ruggby/callback.rb", "lib/ruggby/client.rb", "lib/ruggby/converter.rb", "lib/ruggby/logger.rb", "lib/ruggby/packet/factory.rb", "lib/ruggby/packet/incoming/base.rb", "lib/ruggby/packet/incoming/login_status.rb", "lib/ruggby/packet/incoming/message.rb", "lib/ruggby/packet/incoming/status.rb", "lib/ruggby/packet/incoming/welcome.rb", "lib/ruggby/packet/outgoing/base.rb", "lib/ruggby/packet/outgoing/change_status.rb", "lib/ruggby/packet/outgoing/check_uin_status.rb", "lib/ruggby/packet/outgoing/login.rb", "lib/ruggby/packet/outgoing/mark.rb", "lib/ruggby/packet/outgoing/message.rb", "lib/ruggby/packet/outgoing/ping.rb", "lib/ruggby/password.rb", "lib/ruggby/socket.rb", "lib/ruggby/string_encoder.rb", "lib/ruggby/threader.rb", "lib/ruggby/version.rb"]
|
15
|
+
s.files = ["CHANGELOG.rdoc", "Gemfile", "MIT-LICENSE", "Manifest", "README.md", "Rakefile", "init.rb", "lib/ruggby.rb", "lib/ruggby/action/base.rb", "lib/ruggby/action/change_status.rb", "lib/ruggby/action/check_uin_status.rb", "lib/ruggby/action/create_message.rb", "lib/ruggby/action/login.rb", "lib/ruggby/action/mark.rb", "lib/ruggby/action/new_message.rb", "lib/ruggby/action/new_status.rb", "lib/ruggby/action/ping.rb", "lib/ruggby/action/read.rb", "lib/ruggby/callback.rb", "lib/ruggby/client.rb", "lib/ruggby/converter.rb", "lib/ruggby/logger.rb", "lib/ruggby/packet/factory.rb", "lib/ruggby/packet/incoming/base.rb", "lib/ruggby/packet/incoming/login_status.rb", "lib/ruggby/packet/incoming/message.rb", "lib/ruggby/packet/incoming/status.rb", "lib/ruggby/packet/incoming/welcome.rb", "lib/ruggby/packet/outgoing/base.rb", "lib/ruggby/packet/outgoing/change_status.rb", "lib/ruggby/packet/outgoing/check_uin_status.rb", "lib/ruggby/packet/outgoing/login.rb", "lib/ruggby/packet/outgoing/mark.rb", "lib/ruggby/packet/outgoing/message.rb", "lib/ruggby/packet/outgoing/ping.rb", "lib/ruggby/password.rb", "lib/ruggby/socket.rb", "lib/ruggby/string_encoder.rb", "lib/ruggby/threader.rb", "lib/ruggby/version.rb", "ruggby.gemspec", "spec/callback_spec.rb", "spec/spec_helper.rb"]
|
14
16
|
s.homepage = "https://github.com/mensfeld/ruGGby"
|
15
|
-
s.rdoc_options = ["--line-numbers", "--
|
16
|
-
s.require_paths = ["lib"]
|
17
|
+
s.rdoc_options = ["--line-numbers", "--title", "Ruggby", "--main", "README.md"]
|
17
18
|
s.rubyforge_project = "ruggby"
|
18
|
-
s.rubygems_version = "
|
19
|
+
s.rubygems_version = "2.2.2"
|
19
20
|
s.summary = "Gadu Gadu protocol client implementation in Ruby language"
|
20
21
|
|
21
22
|
if s.respond_to? :specification_version then
|
22
|
-
s.specification_version =
|
23
|
+
s.specification_version = 4
|
23
24
|
|
24
25
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
25
26
|
s.add_development_dependency(%q<rspec>, [">= 2.0.0"])
|
metadata
CHANGED
@@ -1,38 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruggby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
5
|
-
prerelease:
|
4
|
+
version: 0.3.3
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Maciej Mensfeld
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-08-13 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rspec
|
16
|
-
requirement:
|
17
|
-
none: false
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ">="
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: 2.0.0
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
|
-
version_requirements:
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.0.0
|
25
27
|
- !ruby/object:Gem::Dependency
|
26
28
|
name: mocha
|
27
|
-
requirement:
|
28
|
-
none: false
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
29
30
|
requirements:
|
30
|
-
- -
|
31
|
+
- - ">="
|
31
32
|
- !ruby/object:Gem::Version
|
32
33
|
version: '0'
|
33
34
|
type: :development
|
34
35
|
prerelease: false
|
35
|
-
version_requirements:
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
36
41
|
description: Gadu Gadu protocol client implementation in Ruby language
|
37
42
|
email: maciej@mensfeld.pl
|
38
43
|
executables: []
|
@@ -43,10 +48,12 @@ extra_rdoc_files:
|
|
43
48
|
- lib/ruggby.rb
|
44
49
|
- lib/ruggby/action/base.rb
|
45
50
|
- lib/ruggby/action/change_status.rb
|
51
|
+
- lib/ruggby/action/check_uin_status.rb
|
46
52
|
- lib/ruggby/action/create_message.rb
|
47
53
|
- lib/ruggby/action/login.rb
|
48
54
|
- lib/ruggby/action/mark.rb
|
49
55
|
- lib/ruggby/action/new_message.rb
|
56
|
+
- lib/ruggby/action/new_status.rb
|
50
57
|
- lib/ruggby/action/ping.rb
|
51
58
|
- lib/ruggby/action/read.rb
|
52
59
|
- lib/ruggby/callback.rb
|
@@ -57,9 +64,11 @@ extra_rdoc_files:
|
|
57
64
|
- lib/ruggby/packet/incoming/base.rb
|
58
65
|
- lib/ruggby/packet/incoming/login_status.rb
|
59
66
|
- lib/ruggby/packet/incoming/message.rb
|
67
|
+
- lib/ruggby/packet/incoming/status.rb
|
60
68
|
- lib/ruggby/packet/incoming/welcome.rb
|
61
69
|
- lib/ruggby/packet/outgoing/base.rb
|
62
70
|
- lib/ruggby/packet/outgoing/change_status.rb
|
71
|
+
- lib/ruggby/packet/outgoing/check_uin_status.rb
|
63
72
|
- lib/ruggby/packet/outgoing/login.rb
|
64
73
|
- lib/ruggby/packet/outgoing/mark.rb
|
65
74
|
- lib/ruggby/packet/outgoing/message.rb
|
@@ -73,16 +82,19 @@ files:
|
|
73
82
|
- CHANGELOG.rdoc
|
74
83
|
- Gemfile
|
75
84
|
- MIT-LICENSE
|
85
|
+
- Manifest
|
76
86
|
- README.md
|
77
87
|
- Rakefile
|
78
88
|
- init.rb
|
79
89
|
- lib/ruggby.rb
|
80
90
|
- lib/ruggby/action/base.rb
|
81
91
|
- lib/ruggby/action/change_status.rb
|
92
|
+
- lib/ruggby/action/check_uin_status.rb
|
82
93
|
- lib/ruggby/action/create_message.rb
|
83
94
|
- lib/ruggby/action/login.rb
|
84
95
|
- lib/ruggby/action/mark.rb
|
85
96
|
- lib/ruggby/action/new_message.rb
|
97
|
+
- lib/ruggby/action/new_status.rb
|
86
98
|
- lib/ruggby/action/ping.rb
|
87
99
|
- lib/ruggby/action/read.rb
|
88
100
|
- lib/ruggby/callback.rb
|
@@ -93,9 +105,11 @@ files:
|
|
93
105
|
- lib/ruggby/packet/incoming/base.rb
|
94
106
|
- lib/ruggby/packet/incoming/login_status.rb
|
95
107
|
- lib/ruggby/packet/incoming/message.rb
|
108
|
+
- lib/ruggby/packet/incoming/status.rb
|
96
109
|
- lib/ruggby/packet/incoming/welcome.rb
|
97
110
|
- lib/ruggby/packet/outgoing/base.rb
|
98
111
|
- lib/ruggby/packet/outgoing/change_status.rb
|
112
|
+
- lib/ruggby/packet/outgoing/check_uin_status.rb
|
99
113
|
- lib/ruggby/packet/outgoing/login.rb
|
100
114
|
- lib/ruggby/packet/outgoing/mark.rb
|
101
115
|
- lib/ruggby/packet/outgoing/message.rb
|
@@ -105,38 +119,35 @@ files:
|
|
105
119
|
- lib/ruggby/string_encoder.rb
|
106
120
|
- lib/ruggby/threader.rb
|
107
121
|
- lib/ruggby/version.rb
|
122
|
+
- ruggby.gemspec
|
108
123
|
- spec/callback_spec.rb
|
109
124
|
- spec/spec_helper.rb
|
110
|
-
- Manifest
|
111
|
-
- ruggby.gemspec
|
112
125
|
homepage: https://github.com/mensfeld/ruGGby
|
113
126
|
licenses: []
|
127
|
+
metadata: {}
|
114
128
|
post_install_message:
|
115
129
|
rdoc_options:
|
116
|
-
- --line-numbers
|
117
|
-
- --
|
118
|
-
- --title
|
130
|
+
- "--line-numbers"
|
131
|
+
- "--title"
|
119
132
|
- Ruggby
|
120
|
-
- --main
|
133
|
+
- "--main"
|
121
134
|
- README.md
|
122
135
|
require_paths:
|
123
136
|
- lib
|
124
137
|
required_ruby_version: !ruby/object:Gem::Requirement
|
125
|
-
none: false
|
126
138
|
requirements:
|
127
|
-
- -
|
139
|
+
- - ">="
|
128
140
|
- !ruby/object:Gem::Version
|
129
141
|
version: '0'
|
130
142
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
131
|
-
none: false
|
132
143
|
requirements:
|
133
|
-
- -
|
144
|
+
- - ">="
|
134
145
|
- !ruby/object:Gem::Version
|
135
146
|
version: '1.2'
|
136
147
|
requirements: []
|
137
148
|
rubyforge_project: ruggby
|
138
|
-
rubygems_version:
|
149
|
+
rubygems_version: 2.2.2
|
139
150
|
signing_key:
|
140
|
-
specification_version:
|
151
|
+
specification_version: 4
|
141
152
|
summary: Gadu Gadu protocol client implementation in Ruby language
|
142
153
|
test_files: []
|