blather 0.1 → 0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. data/CHANGELOG +2 -0
  2. data/Manifest +36 -33
  3. data/README.rdoc +11 -17
  4. data/Rakefile +4 -3
  5. data/blather.gemspec +9 -9
  6. data/examples/drb_client.rb +7 -0
  7. data/examples/echo.rb +9 -18
  8. data/lib/blather.rb +140 -31
  9. data/lib/blather/{core/errors.rb → errors.rb} +0 -0
  10. data/lib/blather/{core/jid.rb → jid.rb} +0 -0
  11. data/lib/blather/{core/roster.rb → roster.rb} +0 -0
  12. data/lib/blather/{core/roster_item.rb → roster_item.rb} +0 -0
  13. data/lib/blather/{core/stanza.rb → stanza.rb} +6 -14
  14. data/lib/blather/stanza/error.rb +31 -0
  15. data/lib/blather/{core/stanza → stanza}/iq.rb +2 -2
  16. data/lib/blather/stanza/iq/query.rb +50 -0
  17. data/lib/blather/{core/stanza → stanza}/iq/roster.rb +3 -3
  18. data/lib/blather/{core/stanza → stanza}/message.rb +6 -2
  19. data/lib/blather/{core/stanza → stanza}/presence.rb +10 -0
  20. data/lib/blather/{core/stanza → stanza}/presence/status.rb +8 -6
  21. data/lib/blather/{core/stanza → stanza}/presence/subscription.rb +1 -1
  22. data/lib/blather/{core/stream.rb → stream.rb} +1 -1
  23. data/lib/blather/{core/stream → stream}/parser.rb +0 -5
  24. data/lib/blather/{core/stream → stream}/resource.rb +0 -0
  25. data/lib/blather/{core/stream → stream}/sasl.rb +16 -5
  26. data/lib/blather/{core/stream → stream}/session.rb +0 -0
  27. data/lib/blather/{core/stream → stream}/tls.rb +0 -0
  28. data/lib/blather/{core/sugar.rb → sugar.rb} +4 -0
  29. data/lib/blather/{core/xmpp_node.rb → xmpp_node.rb} +1 -3
  30. data/spec/blather/{core/jid_spec.rb → jid_spec.rb} +16 -1
  31. data/spec/blather/{core/roster_item_spec.rb → roster_item_spec.rb} +1 -1
  32. data/spec/blather/{core/roster_spec.rb → roster_spec.rb} +11 -1
  33. data/spec/blather/stanza/iq/query_spec.rb +34 -0
  34. data/spec/blather/stanza/iq/roster_spec.rb +7 -0
  35. data/spec/blather/stanza/iq_spec.rb +11 -0
  36. data/spec/blather/stanza/message_spec.rb +52 -0
  37. data/spec/blather/stanza/presence/status_spec.rb +102 -0
  38. data/spec/blather/stanza/presence/subscription_spec.rb +74 -0
  39. data/spec/blather/stanza/presence_spec.rb +24 -0
  40. data/spec/blather/{core/stanza_spec.rb → stanza_spec.rb} +1 -1
  41. data/spec/blather/{core/stream_spec.rb → stream_spec.rb} +208 -9
  42. data/spec/blather/{core/xmpp_node_spec.rb → xmpp_node_spec.rb} +1 -1
  43. metadata +75 -69
  44. data/examples/shell_client.rb +0 -28
  45. data/lib/blather/callback.rb +0 -24
  46. data/lib/blather/client.rb +0 -81
  47. data/lib/blather/core/stanza/iq/query.rb +0 -42
  48. data/lib/blather/extensions.rb +0 -4
  49. data/lib/blather/extensions/last_activity.rb +0 -55
  50. data/lib/blather/extensions/version.rb +0 -85
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), *%w[.. .. spec_helper])
1
+ require File.join(File.dirname(__FILE__), *%w[.. spec_helper])
2
2
 
3
3
  describe 'Blather::XMPPNode' do
4
4
  it 'generates a new node' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blather
3
3
  version: !ruby/object:Gem::Version
4
- version: "0.1"
4
+ version: "0.2"
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Smick
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-11-27 00:00:00 -08:00
12
+ date: 2008-12-19 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -23,14 +23,14 @@ dependencies:
23
23
  version: "0"
24
24
  version:
25
25
  - !ruby/object:Gem::Dependency
26
- name: libxml
26
+ name: libxml-ruby
27
27
  type: :runtime
28
28
  version_requirement:
29
29
  version_requirements: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 1.0.11
33
+ version: 0.9.2
34
34
  version:
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: echoe
@@ -52,81 +52,80 @@ extra_rdoc_files:
52
52
  - CHANGELOG
53
53
  - lib/autotest/discover.rb
54
54
  - lib/autotest/spec.rb
55
- - lib/blather/callback.rb
56
- - lib/blather/client.rb
57
- - lib/blather/core/errors.rb
58
- - lib/blather/core/jid.rb
59
- - lib/blather/core/roster.rb
60
- - lib/blather/core/roster_item.rb
61
- - lib/blather/core/stanza/iq/query.rb
62
- - lib/blather/core/stanza/iq/roster.rb
63
- - lib/blather/core/stanza/iq.rb
64
- - lib/blather/core/stanza/message.rb
65
- - lib/blather/core/stanza/presence/status.rb
66
- - lib/blather/core/stanza/presence/subscription.rb
67
- - lib/blather/core/stanza/presence.rb
68
- - lib/blather/core/stanza.rb
69
- - lib/blather/core/stream/parser.rb
70
- - lib/blather/core/stream/resource.rb
71
- - lib/blather/core/stream/sasl.rb
72
- - lib/blather/core/stream/session.rb
73
- - lib/blather/core/stream/tls.rb
74
- - lib/blather/core/stream.rb
75
- - lib/blather/core/sugar.rb
76
- - lib/blather/core/xmpp_node.rb
77
- - lib/blather/extensions/last_activity.rb
78
- - lib/blather/extensions/version.rb
79
- - lib/blather/extensions.rb
55
+ - lib/blather/errors.rb
56
+ - lib/blather/jid.rb
57
+ - lib/blather/roster.rb
58
+ - lib/blather/roster_item.rb
59
+ - lib/blather/stanza/error.rb
60
+ - lib/blather/stanza/iq/query.rb
61
+ - lib/blather/stanza/iq/roster.rb
62
+ - lib/blather/stanza/iq.rb
63
+ - lib/blather/stanza/message.rb
64
+ - lib/blather/stanza/presence/status.rb
65
+ - lib/blather/stanza/presence/subscription.rb
66
+ - lib/blather/stanza/presence.rb
67
+ - lib/blather/stanza.rb
68
+ - lib/blather/stream/parser.rb
69
+ - lib/blather/stream/resource.rb
70
+ - lib/blather/stream/sasl.rb
71
+ - lib/blather/stream/session.rb
72
+ - lib/blather/stream/tls.rb
73
+ - lib/blather/stream.rb
74
+ - lib/blather/sugar.rb
75
+ - lib/blather/xmpp_node.rb
80
76
  - lib/blather.rb
81
77
  - LICENSE
82
78
  - README.rdoc
83
79
  files:
84
80
  - CHANGELOG
81
+ - examples/drb_client.rb
85
82
  - examples/echo.rb
86
- - examples/shell_client.rb
87
83
  - lib/autotest/discover.rb
88
84
  - lib/autotest/spec.rb
89
- - lib/blather/callback.rb
90
- - lib/blather/client.rb
91
- - lib/blather/core/errors.rb
92
- - lib/blather/core/jid.rb
93
- - lib/blather/core/roster.rb
94
- - lib/blather/core/roster_item.rb
95
- - lib/blather/core/stanza/iq/query.rb
96
- - lib/blather/core/stanza/iq/roster.rb
97
- - lib/blather/core/stanza/iq.rb
98
- - lib/blather/core/stanza/message.rb
99
- - lib/blather/core/stanza/presence/status.rb
100
- - lib/blather/core/stanza/presence/subscription.rb
101
- - lib/blather/core/stanza/presence.rb
102
- - lib/blather/core/stanza.rb
103
- - lib/blather/core/stream/parser.rb
104
- - lib/blather/core/stream/resource.rb
105
- - lib/blather/core/stream/sasl.rb
106
- - lib/blather/core/stream/session.rb
107
- - lib/blather/core/stream/tls.rb
108
- - lib/blather/core/stream.rb
109
- - lib/blather/core/sugar.rb
110
- - lib/blather/core/xmpp_node.rb
111
- - lib/blather/extensions/last_activity.rb
112
- - lib/blather/extensions/version.rb
113
- - lib/blather/extensions.rb
85
+ - lib/blather/errors.rb
86
+ - lib/blather/jid.rb
87
+ - lib/blather/roster.rb
88
+ - lib/blather/roster_item.rb
89
+ - lib/blather/stanza/error.rb
90
+ - lib/blather/stanza/iq/query.rb
91
+ - lib/blather/stanza/iq/roster.rb
92
+ - lib/blather/stanza/iq.rb
93
+ - lib/blather/stanza/message.rb
94
+ - lib/blather/stanza/presence/status.rb
95
+ - lib/blather/stanza/presence/subscription.rb
96
+ - lib/blather/stanza/presence.rb
97
+ - lib/blather/stanza.rb
98
+ - lib/blather/stream/parser.rb
99
+ - lib/blather/stream/resource.rb
100
+ - lib/blather/stream/sasl.rb
101
+ - lib/blather/stream/session.rb
102
+ - lib/blather/stream/tls.rb
103
+ - lib/blather/stream.rb
104
+ - lib/blather/sugar.rb
105
+ - lib/blather/xmpp_node.rb
114
106
  - lib/blather.rb
115
107
  - LICENSE
108
+ - Manifest
116
109
  - Rakefile
117
110
  - README.rdoc
118
- - spec/blather/core/jid_spec.rb
119
- - spec/blather/core/roster_item_spec.rb
120
- - spec/blather/core/roster_spec.rb
121
- - spec/blather/core/stanza_spec.rb
122
- - spec/blather/core/stream_spec.rb
123
- - spec/blather/core/xmpp_node_spec.rb
111
+ - spec/blather/jid_spec.rb
112
+ - spec/blather/roster_item_spec.rb
113
+ - spec/blather/roster_spec.rb
114
+ - spec/blather/stanza/iq/query_spec.rb
115
+ - spec/blather/stanza/iq/roster_spec.rb
116
+ - spec/blather/stanza/iq_spec.rb
117
+ - spec/blather/stanza/message_spec.rb
118
+ - spec/blather/stanza/presence/status_spec.rb
119
+ - spec/blather/stanza/presence/subscription_spec.rb
120
+ - spec/blather/stanza/presence_spec.rb
121
+ - spec/blather/stanza_spec.rb
122
+ - spec/blather/stream_spec.rb
123
+ - spec/blather/xmpp_node_spec.rb
124
124
  - spec/build_safe.rb
125
125
  - spec/spec_helper.rb
126
- - Manifest
127
126
  - blather.gemspec
128
127
  has_rdoc: true
129
- homepage: ""
128
+ homepage: http://github.com/sprsquish/blather/tree/master
130
129
  post_install_message:
131
130
  rdoc_options:
132
131
  - --line-numbers
@@ -164,9 +163,16 @@ signing_key:
164
163
  specification_version: 2
165
164
  summary: An evented XMPP library written on EventMachine and libxml-ruby
166
165
  test_files:
167
- - spec/blather/core/jid_spec.rb
168
- - spec/blather/core/roster_item_spec.rb
169
- - spec/blather/core/roster_spec.rb
170
- - spec/blather/core/stanza_spec.rb
171
- - spec/blather/core/stream_spec.rb
172
- - spec/blather/core/xmpp_node_spec.rb
166
+ - spec/blather/jid_spec.rb
167
+ - spec/blather/roster_item_spec.rb
168
+ - spec/blather/roster_spec.rb
169
+ - spec/blather/stanza/iq/query_spec.rb
170
+ - spec/blather/stanza/iq/roster_spec.rb
171
+ - spec/blather/stanza/iq_spec.rb
172
+ - spec/blather/stanza/message_spec.rb
173
+ - spec/blather/stanza/presence/status_spec.rb
174
+ - spec/blather/stanza/presence/subscription_spec.rb
175
+ - spec/blather/stanza/presence_spec.rb
176
+ - spec/blather/stanza_spec.rb
177
+ - spec/blather/stream_spec.rb
178
+ - spec/blather/xmpp_node_spec.rb
@@ -1,28 +0,0 @@
1
- require 'lib/blather/client'
2
- include Blather
3
-
4
- class ShellClient < Client
5
- def receive_roster(roster)
6
- super
7
- if roster.type == :result
8
- start_highline
9
- end
10
- end
11
-
12
- def receive_message(msg)
13
-
14
- end
15
-
16
- def start_highline
17
- end
18
-
19
- end
20
-
21
- EM.run {
22
- shell = Shell.new
23
-
24
- #shell
25
- EM.spawn { shell.start }
26
-
27
- Blather.run 'orthie@jabber.local/Blather', 'orthie', shell
28
- }
@@ -1,24 +0,0 @@
1
- module Blather
2
-
3
- class Callback
4
- include Comparable
5
-
6
- attr_accessor :priority
7
-
8
- def initialize(priority = 0, &callback)
9
- @priority = priority
10
- @callback = callback
11
- end
12
-
13
- def call(*args)
14
- @callback.call(*args)
15
- end
16
-
17
- # Favor higher numbers
18
- def <=>(o)
19
- self.priority <=> o.priority
20
- end
21
-
22
- end #Callback
23
-
24
- end
@@ -1,81 +0,0 @@
1
- require File.join(File.dirname(__FILE__), %w[.. blather])
2
-
3
- module Blather
4
-
5
- class Client
6
- @@callbacks = {}
7
- @@status = nil
8
-
9
- attr_accessor :jid,
10
- :roster
11
-
12
- def send_data(data)
13
- @stream.send data
14
- end
15
-
16
- def status
17
- @@status
18
- end
19
-
20
- def set_status(state = nil, msg = nil, to = nil)
21
- status = Presence::Status.new state, msg
22
- status.to = to
23
- @@status = status unless to
24
-
25
- send_data status
26
- end
27
-
28
- def stream_started(stream)
29
- @stream = stream
30
- retreive_roster
31
- end
32
-
33
- def call(stanza)
34
- stanza.callback_heirarchy.each { |type| break if callback(type, stanza) }
35
- end
36
-
37
- # Default response to an Iq 'get' or 'set' is 'service-unavailable'/'cancel'
38
- def receive_iq(iq)
39
- send_data(ErrorStanza.new_from(iq, 'service-unavailable', 'cancel').reply!) if [:set, :get].include?(iq.type)
40
- end
41
-
42
- def receive_roster(node)
43
- if !@roster && node.type == :result
44
- self.roster = Roster.new(@stream, node)
45
- register_callback(:status, -128) { |_, status| roster[status.from].status = status if roster[status.from]; false }
46
- set_status
47
- elsif node.type == :set
48
- roster.process node
49
- end
50
- end
51
-
52
- def self.register_callback(type, priority = 0, &callback)
53
- @@callbacks[type] ||= []
54
- @@callbacks[type] << Callback.new(priority, &callback)
55
- @@callbacks[type].sort!
56
- end
57
-
58
- def register_callback(type, priority = 0, &callback)
59
- self.class.register_callback(type, priority = 0, &callback)
60
- end
61
-
62
- def self.status(state = nil, msg = nil)
63
- @@status = Presence::Status.new state, msg
64
- end
65
-
66
- def callback(type, stanza)
67
- complete = false
68
- (@@callbacks[type] || []).each { |callback| break if complete = callback.call(self, stanza) }
69
-
70
- method = "receive_#{type}"
71
- complete = __send__(method, stanza) if !complete && respond_to?(method)
72
- complete
73
- end
74
-
75
- def retreive_roster
76
- send_data Iq::Roster.new
77
- end
78
-
79
- end #Client
80
-
81
- end
@@ -1,42 +0,0 @@
1
- module Blather
2
- class Stanza
3
- class Iq
4
-
5
- class Query < Iq
6
- register :query, :query
7
-
8
- def self.new(type)
9
- elem = super
10
- elem.query.xmlns = self.xmlns
11
- elem
12
- end
13
-
14
- def inherit(node)
15
- query.remove!
16
- @query = nil
17
- super
18
- end
19
-
20
- def query
21
- @query ||= if q = find_first('query')
22
- q
23
- else
24
- self << q = XMPPNode.new('query')
25
- q
26
- end
27
- end
28
-
29
- def reply
30
- elem = super
31
- elem.type = :result
32
- end
33
-
34
- def reply!
35
- self.type = :result
36
- super
37
- end
38
- end #Query
39
-
40
- end #Iq
41
- end #Stanza
42
- end
@@ -1,4 +0,0 @@
1
- %w[
2
- last_activity
3
- version
4
- ].each { |r| require "extensions/#{r}" }
@@ -1,55 +0,0 @@
1
- module Blather
2
- module Extensions #:nodoc:
3
-
4
- module LastActivity #:nodoc:
5
- def self.included(base)
6
- base.class_eval do
7
- @@last_activity = Time.now
8
-
9
- alias_method :send_data_without_activity, :send_data
10
- def send_data(data)
11
- @@last_activity = Time.now
12
- send_data_without_activity data
13
- end
14
- end
15
- end
16
-
17
- def last_activity
18
- (Time.now - @@last_activity).to_i
19
- end
20
-
21
- def receive_last_activity(stanza)
22
- send_data stanza.reply!(last_activity) if stanza.type == 'get'
23
- end
24
- end #LastActivity
25
-
26
- class LastActivityStanza < Query #:nodoc:
27
- register :last_activity, nil, 'jabber:iq:last'
28
-
29
- def self.new(type = :get, seconds = nil)
30
- elem = super type
31
- elem.seconds = seconds
32
- elem
33
- end
34
-
35
- def seconds=(seconds)
36
- query.attributes.remove :seconds
37
- query['seconds'] = seconds.to_i.to_s if seconds
38
- end
39
-
40
- def seconds
41
- (query['seconds'] || 0).to_i
42
- end
43
-
44
- def reply(seconds)
45
- elem = super()
46
- elem.last_activity = seconds
47
- end
48
-
49
- def reply!(seconds)
50
- self.last_activity = seconds
51
- super()
52
- end
53
- end #LastActivityStanza
54
- end
55
- end
@@ -1,85 +0,0 @@
1
- module Blather
2
- module Extensions #:nodoc:
3
-
4
- module Version #:nodoc:
5
- def self.included(base)
6
- base.class_eval do
7
- @@version = {}
8
-
9
- def self.version(name, ver, os = nil)
10
- @@version = {:name => name, :version => ver, :os => os}
11
- end
12
-
13
- add_callback(:iq, 100) do |c, s|
14
- if s.detect { |n| n['xmlns'] == 'jabber:iq:version' }
15
- ver = VersionStanza.new('result', c.version)
16
- ver.id = s.id
17
- ver.from = c.jid
18
- ver.to = s.from
19
- c.send_data ver
20
- end
21
- end
22
- end
23
- end
24
-
25
- def version
26
- @@version
27
- end
28
- end #Version
29
-
30
- class VersionStanza < Iq #:nodoc:
31
- def self.new(type = 'result', ver = {})
32
- elem = super(type)
33
-
34
- query = XML::Node.new('query')
35
- query.xmlns = 'jabber:iq:version'
36
- elem << query
37
-
38
- elem.name = ver[:name] if ver[:name]
39
- elem.version = ver[:version] if ver[:version]
40
- elem.os = ver[:os] if ver[:os]
41
-
42
- elem
43
- end
44
-
45
- def query
46
- @query ||= self.detect { |n| n.name == 'query' }
47
- end
48
-
49
- def name=(name)
50
- query.each { |n| n.remove! or break if n.name == 'name' }
51
- query << XML::Node.new('name', name)
52
- end
53
-
54
- def name
55
- if name = query.detect { |n| n.name == 'name' }
56
- name.content
57
- end
58
- end
59
-
60
- def version=(version)
61
- query.each { |n| n.remove! or break if n.name == 'version' }
62
- query << XML::Node.new('version', version)
63
- end
64
-
65
- def version
66
- if version = query.detect { |n| n.version == 'version' }
67
- version.content
68
- end
69
- end
70
-
71
- def os=(os)
72
- query.each { |n| n.remove! or break if n.name == 'os' }
73
- query << XML::Node.new('os', os)
74
- end
75
-
76
- def os
77
- if os = query.detect { |n| n.os == 'os' }
78
- os.content
79
- end
80
- end
81
- end #VersionStanza
82
- end
83
- end
84
-
85
- Blather::Client.__send__ :include, Blather::Extensions::Version