blather 0.4.15 → 0.4.16

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. data/.autotest +13 -0
  2. data/.gitignore +18 -0
  3. data/CHANGELOG +150 -0
  4. data/Gemfile +4 -0
  5. data/Rakefile +32 -0
  6. data/TODO.md +2 -0
  7. data/blather.gemspec +49 -0
  8. data/lib/blather.rb +3 -0
  9. data/lib/blather/client/client.rb +139 -1
  10. data/lib/blather/client/dsl.rb +16 -0
  11. data/lib/blather/core_ext/active_support.rb +1 -1
  12. data/lib/blather/core_ext/ipaddr.rb +19 -0
  13. data/lib/blather/file_transfer/s5b.rb +8 -0
  14. data/lib/blather/roster_item.rb +5 -2
  15. data/lib/blather/stanza/disco.rb +7 -0
  16. data/lib/blather/stanza/disco/disco_info.rb +13 -19
  17. data/lib/blather/stanza/disco/disco_items.rb +5 -11
  18. data/lib/blather/stanza/presence.rb +15 -5
  19. data/lib/blather/stanza/presence/c.rb +103 -0
  20. data/lib/blather/stanza/x.rb +2 -4
  21. data/lib/blather/version.rb +3 -0
  22. data/lib/blather/xmpp_node.rb +8 -0
  23. data/spec/blather/client/client_spec.rb +87 -1
  24. data/spec/blather/client/dsl/pubsub_spec.rb +2 -2
  25. data/spec/blather/client/dsl_spec.rb +85 -5
  26. data/spec/blather/core_ext/nokogiri_spec.rb +1 -1
  27. data/spec/blather/errors/sasl_error_spec.rb +1 -1
  28. data/spec/blather/errors/stanza_error_spec.rb +2 -2
  29. data/spec/blather/errors/stream_error_spec.rb +2 -2
  30. data/spec/blather/errors_spec.rb +1 -1
  31. data/spec/blather/file_transfer_spec.rb +2 -2
  32. data/spec/blather/jid_spec.rb +1 -1
  33. data/spec/blather/roster_item_spec.rb +1 -1
  34. data/spec/blather/roster_spec.rb +1 -1
  35. data/spec/blather/stanza/discos/disco_info_spec.rb +1 -11
  36. data/spec/blather/stanza/discos/disco_items_spec.rb +1 -6
  37. data/spec/blather/stanza/iq/command_spec.rb +3 -3
  38. data/spec/blather/stanza/iq/ibb_spec.rb +2 -2
  39. data/spec/blather/stanza/iq/query_spec.rb +1 -1
  40. data/spec/blather/stanza/iq/roster_spec.rb +1 -1
  41. data/spec/blather/stanza/iq/s5b_spec.rb +2 -2
  42. data/spec/blather/stanza/iq/si_spec.rb +2 -2
  43. data/spec/blather/stanza/iq/vcard_spec.rb +3 -3
  44. data/spec/blather/stanza/iq_spec.rb +1 -1
  45. data/spec/blather/stanza/message_spec.rb +2 -2
  46. data/spec/blather/stanza/presence/c_spec.rb +46 -0
  47. data/spec/blather/stanza/presence/status_spec.rb +1 -1
  48. data/spec/blather/stanza/presence/subscription_spec.rb +1 -1
  49. data/spec/blather/stanza/presence_spec.rb +1 -1
  50. data/spec/blather/stanza/pubsub/affiliations_spec.rb +2 -2
  51. data/spec/blather/stanza/pubsub/create_spec.rb +3 -3
  52. data/spec/blather/stanza/pubsub/event_spec.rb +2 -2
  53. data/spec/blather/stanza/pubsub/items_spec.rb +2 -2
  54. data/spec/blather/stanza/pubsub/publish_spec.rb +2 -2
  55. data/spec/blather/stanza/pubsub/retract_spec.rb +2 -2
  56. data/spec/blather/stanza/pubsub/subscribe_spec.rb +2 -2
  57. data/spec/blather/stanza/pubsub/subscription_spec.rb +3 -3
  58. data/spec/blather/stanza/pubsub/subscriptions_spec.rb +2 -2
  59. data/spec/blather/stanza/pubsub/unsubscribe_spec.rb +2 -2
  60. data/spec/blather/stanza/pubsub_owner/delete_spec.rb +2 -2
  61. data/spec/blather/stanza/pubsub_owner/purge_spec.rb +3 -3
  62. data/spec/blather/stanza/pubsub_owner_spec.rb +2 -2
  63. data/spec/blather/stanza/pubsub_spec.rb +2 -8
  64. data/spec/blather/stanza/x_spec.rb +1 -6
  65. data/spec/blather/stanza_spec.rb +1 -1
  66. data/spec/blather/stream/client_spec.rb +3 -3
  67. data/spec/blather/stream/component_spec.rb +1 -1
  68. data/spec/blather/stream/parser_spec.rb +1 -1
  69. data/spec/blather/xmpp_node_spec.rb +1 -1
  70. data/spec/spec_helper.rb +5 -12
  71. data/yard/templates/default/class/html/handlers.erb +18 -0
  72. data/yard/templates/default/class/setup.rb +10 -0
  73. data/yard/templates/default/class/text/handlers.erb +1 -0
  74. metadata +123 -13
  75. data/lib/test.rb +0 -55
@@ -1,5 +1,5 @@
1
- require File.expand_path "../../../../spec_helper", __FILE__
2
- require File.expand_path "../../../../fixtures/pubsub", __FILE__
1
+ require 'spec_helper'
2
+ require 'fixtures/pubsub'
3
3
  require 'blather/client/dsl'
4
4
 
5
5
  describe Blather::DSL::PubSub do
@@ -1,9 +1,12 @@
1
- require File.expand_path "../../../spec_helper", __FILE__
1
+ require 'spec_helper'
2
2
  require 'blather/client/dsl'
3
3
 
4
4
  describe Blather::DSL do
5
5
  before do
6
- @client = mock()
6
+ @client = Blather::Client.new
7
+ @stream = mock()
8
+ @stream.stubs(:send)
9
+ @client.post_init @stream, Blather::JID.new('n@d/r')
7
10
  @dsl = Class.new { include Blather::DSL }.new
8
11
  Blather::Client.stubs(:new).returns(@client)
9
12
  end
@@ -95,7 +98,7 @@ describe Blather::DSL do
95
98
  it 'provides a "say" helper' do
96
99
  to, msg = 'me@me.com', 'hello!'
97
100
  Blather::Stanza::Message.stubs(:next_id).returns 0
98
- @client.expects(:write).with { |n| n.to_s.must_equal Blather::Stanza::Message.new(to, msg).to_s }
101
+ @client.expects(:write).with Blather::Stanza::Message.new(to, msg)
99
102
  @dsl.say to, msg
100
103
  end
101
104
 
@@ -111,7 +114,7 @@ describe Blather::DSL do
111
114
  expected_stanza = Blather::Stanza::Disco::DiscoItems.new
112
115
  expected_stanza.to = who
113
116
  expected_stanza.node = where
114
- @client.expects(:write).with { |n| n.to_s.must_equal expected_stanza.to_s }
117
+ @client.expects(:write).with expected_stanza
115
118
  @dsl.discover what, who, where
116
119
  end
117
120
 
@@ -122,10 +125,87 @@ describe Blather::DSL do
122
125
  expected_stanza = Blather::Stanza::Disco::DiscoInfo.new
123
126
  expected_stanza.to = who
124
127
  expected_stanza.node = where
125
- @client.expects(:write).with { |n| n.to_s.must_equal expected_stanza.to_s }
128
+ @client.expects(:write).with expected_stanza
126
129
  @dsl.discover what, who, where
127
130
  end
128
131
 
132
+ it 'provides a caps set helper' do
133
+ @dsl.must_respond_to :set_caps
134
+ node = 'http://code.google.com/p/exodus'
135
+ identities = [Blather::Stanza::Iq::DiscoInfo::Identity.new({:name => 'Exodus 0.9.1', :type => 'pc', :category => 'client'})]
136
+ features = %w{
137
+ http://jabber.org/protocol/caps
138
+ http://jabber.org/protocol/disco#info
139
+ http://jabber.org/protocol/disco#items
140
+ http://jabber.org/protocol/muc
141
+ }
142
+ @dsl.set_caps node, identities, features
143
+ @client.caps.node.must_equal "#{node}##{@client.caps.ver}"
144
+ @client.caps.identities.must_equal identities
145
+ @client.caps.features.map{ |f| f.var }.must_equal features
146
+ end
147
+
148
+ it 'provides a caps send helper' do
149
+ @dsl.must_respond_to :send_caps
150
+ @client.caps.node = 'http://code.google.com/p/exodus'
151
+ @client.caps.identities = [Blather::Stanza::Iq::DiscoInfo::Identity.new({:name => 'Exodus 0.9.1', :type => 'pc', :category => 'client'})]
152
+ @client.caps.features = %w{
153
+ http://jabber.org/protocol/caps
154
+ http://jabber.org/protocol/disco#info
155
+ http://jabber.org/protocol/disco#items
156
+ http://jabber.org/protocol/muc
157
+ }
158
+ expected_stanza = Blather::Stanza.import(parse_stanza(<<-XML).root)
159
+ <presence>
160
+ <c xmlns="http://jabber.org/protocol/caps" hash="sha-1"
161
+ node="http://code.google.com/p/exodus"
162
+ ver="QgayPKawpkPSDYmwT/WM94uAlu0="
163
+ />
164
+ </presence>
165
+ XML
166
+ @client.expects(:write).with expected_stanza
167
+ @client.expects(:register_handler).with(:disco_info, :type => :get, :node => "http://code.google.com/p/exodus#QgayPKawpkPSDYmwT/WM94uAlu0=")
168
+ @dsl.send_caps
169
+ end
170
+
171
+ it 'responds with correct disco stanza after sending caps and receiving query' do
172
+ @client.caps.node = 'http://code.google.com/p/exodus'
173
+ @client.caps.identities = [Blather::Stanza::Iq::DiscoInfo::Identity.new({:name => 'Exodus 0.9.1', :type => 'pc', :category => 'client'})]
174
+ @client.caps.features = %w{
175
+ http://jabber.org/protocol/caps
176
+ http://jabber.org/protocol/disco#info
177
+ http://jabber.org/protocol/disco#items
178
+ http://jabber.org/protocol/muc
179
+ }
180
+ stanza = <<-XML
181
+ <iq from='juliet@capulet.lit/chamber'
182
+ id='disco1'
183
+ to='romeo@montague.lit/orchard'
184
+ type='get'>
185
+ <query xmlns='http://jabber.org/protocol/disco#info'
186
+ node='http://code.google.com/p/exodus#QgayPKawpkPSDYmwT/WM94uAlu0='/>
187
+ </iq>
188
+ XML
189
+ @stanza = Blather::Stanza.import(parse_stanza(stanza).root)
190
+
191
+ expected_stanza = Blather::Stanza.import(parse_stanza(<<-XML).root)
192
+ <iq type="result" id="disco1" to="juliet@capulet.lit/chamber">
193
+ <query xmlns="http://jabber.org/protocol/disco#info" node="http://code.google.com/p/exodus#QgayPKawpkPSDYmwT/WM94uAlu0=">
194
+ <identity name="Exodus 0.9.1" category="client" type="pc"/>
195
+ <feature var="http://jabber.org/protocol/caps"/>
196
+ <feature var="http://jabber.org/protocol/disco#info"/>
197
+ <feature var="http://jabber.org/protocol/disco#items"/>
198
+ <feature var="http://jabber.org/protocol/muc"/>
199
+ </query>
200
+ </iq>
201
+ XML
202
+ @dsl.send_caps
203
+ # client writes a Client::Cap object but it's the same as a DiscoInfo
204
+ # this is a hack to pass the same-class check in XMPPNode#eql?
205
+ @client.expects(:write).with { |n| Blather::Stanza.import(n) == expected_stanza }
206
+ @client.receive_data @stanza
207
+ end
208
+
129
209
  Blather::Stanza.handler_list.each do |handler_method|
130
210
  it "provides a helper method for #{handler_method}" do
131
211
  guards = [:chat?, {:body => 'exit'}]
@@ -1,4 +1,4 @@
1
- require File.expand_path "../../../spec_helper", __FILE__
1
+ require 'spec_helper'
2
2
 
3
3
  describe 'Nokogiri::XML::Node' do
4
4
  before { @doc = Nokogiri::XML::Document.new }
@@ -1,4 +1,4 @@
1
- require File.expand_path "../../../spec_helper", __FILE__
1
+ require 'spec_helper'
2
2
 
3
3
  def sasl_error_node(err_name = 'aborted')
4
4
  node = Blather::XMPPNode.new 'failure'
@@ -1,11 +1,11 @@
1
- require File.expand_path "../../../spec_helper", __FILE__
1
+ require 'spec_helper'
2
2
 
3
3
  def stanza_error_node(type = 'cancel', error = 'internal-server-error', msg = nil)
4
4
  node = Blather::Stanza::Message.new 'error@jabber.local', 'test message', :error
5
5
 
6
6
  node << (error_node = Blather::XMPPNode.new('error'))
7
7
  error_node['type'] = type.to_s
8
-
8
+
9
9
  error_node << (err = Blather::XMPPNode.new(error, error_node.document))
10
10
  err.namespace = 'urn:ietf:params:xml:ns:xmpp-stanzas'
11
11
 
@@ -1,9 +1,9 @@
1
- require File.expand_path "../../../spec_helper", __FILE__
1
+ require 'spec_helper'
2
2
 
3
3
  def stream_error_node(error = 'internal-server-error', msg = nil)
4
4
  node = Blather::XMPPNode.new('error')
5
5
  node.namespace = {'stream' => Blather::Stream::STREAM_NS}
6
-
6
+
7
7
  node << (err = Blather::XMPPNode.new(error, node.document))
8
8
  err.namespace = 'urn:ietf:params:xml:ns:xmpp-streams'
9
9
 
@@ -1,4 +1,4 @@
1
- require File.expand_path "../../spec_helper", __FILE__
1
+ require 'spec_helper'
2
2
 
3
3
  describe Blather::BlatherError do
4
4
  it 'is handled by :error' do
@@ -1,4 +1,4 @@
1
- require File.expand_path "../../spec_helper", __FILE__
1
+ require 'spec_helper'
2
2
  require 'blather/client/dsl'
3
3
 
4
4
  module MockFileReceiver
@@ -97,4 +97,4 @@ describe Blather::FileTransfer do
97
97
  transfer = Blather::FileTransfer.new(@client, iq)
98
98
  transfer.decline
99
99
  end
100
- end
100
+ end
@@ -1,4 +1,4 @@
1
- require File.expand_path "../../spec_helper", __FILE__
1
+ require 'spec_helper'
2
2
 
3
3
  describe Blather::JID do
4
4
  it 'does nothing if creaded from Blather::JID' do
@@ -1,4 +1,4 @@
1
- require File.expand_path "../../spec_helper", __FILE__
1
+ require 'spec_helper'
2
2
 
3
3
  describe Blather::RosterItem do
4
4
  it 'can be initialized with Blather::JID' do
@@ -1,4 +1,4 @@
1
- require File.expand_path "../../spec_helper", __FILE__
1
+ require 'spec_helper'
2
2
 
3
3
  describe Blather::Roster do
4
4
  before do
@@ -1,4 +1,4 @@
1
- require File.expand_path "../../../../spec_helper", __FILE__
1
+ require 'spec_helper'
2
2
 
3
3
  def disco_info_xml
4
4
  <<-XML
@@ -219,11 +219,6 @@ describe Blather::Stanza::Iq::DiscoInfo::Identity do
219
219
  n.xml_lang.must_equal 'de'
220
220
  end
221
221
 
222
- it 'raises an error if equality is sent a non DiscoInfo::Identity object' do
223
- a = Blather::Stanza::Iq::DiscoInfo::Identity.new(*%w[name type cat])
224
- lambda { a == 'foo' }.must_raise RuntimeError
225
- end
226
-
227
222
  it 'can determine equality' do
228
223
  a = Blather::Stanza::Iq::DiscoInfo::Identity.new(*%w[name type cat])
229
224
  a.must_equal Blather::Stanza::Iq::DiscoInfo::Identity.new(*%w[name type cat])
@@ -245,11 +240,6 @@ describe Blather::Stanza::Iq::DiscoInfo::Feature do
245
240
  n.var.must_equal 'foo'
246
241
  end
247
242
 
248
- it 'raises an error if equality is sent a non DiscoInfo::Feature object' do
249
- a = Blather::Stanza::Iq::DiscoInfo::Feature.new('var')
250
- lambda { a == 'foo' }.must_raise RuntimeError
251
- end
252
-
253
243
  it 'can determine equality' do
254
244
  a = Blather::Stanza::Iq::DiscoInfo::Feature.new('var')
255
245
  a.must_equal Blather::Stanza::Iq::DiscoInfo::Feature.new('var')
@@ -1,4 +1,4 @@
1
- require File.expand_path "../../../../spec_helper", __FILE__
1
+ require 'spec_helper'
2
2
 
3
3
  def disco_items_xml
4
4
  <<-XML
@@ -146,11 +146,6 @@ describe Blather::Stanza::Iq::DiscoItems::Item do
146
146
  n.name.must_equal 'Books by and about Shakespeare'
147
147
  end
148
148
 
149
- it 'raises an error when compared against a non DiscoItems::Item' do
150
- a = Blather::Stanza::Iq::DiscoItems::Item.new('foo@bar/baz')
151
- lambda { a == 'test' }.must_raise RuntimeError
152
- end
153
-
154
149
  it 'can determine equality' do
155
150
  a = Blather::Stanza::Iq::DiscoItems::Item.new('foo@bar/baz')
156
151
  a.must_equal Blather::Stanza::Iq::DiscoItems::Item.new('foo@bar/baz')
@@ -1,4 +1,4 @@
1
- require File.expand_path "../../../../spec_helper", __FILE__
1
+ require 'spec_helper'
2
2
 
3
3
  def command_xml
4
4
  <<-XML
@@ -90,7 +90,7 @@ describe Blather::Stanza::Iq::Command do
90
90
  c.action.must_equal :execute
91
91
  c.reply.action.must_equal nil
92
92
  end
93
-
93
+
94
94
  it 'removes action on reply!' do
95
95
  c = Blather::XMPPNode.import parse_stanza(command_xml).root
96
96
  c.action.must_equal :execute
@@ -203,4 +203,4 @@ describe Blather::Stanza::Iq::Command do
203
203
  r.command.xpath('ns:x', :ns => Blather::Stanza::X.registered_ns).wont_be_empty
204
204
  r.xpath('ns:x', :ns => Blather::Stanza::X.registered_ns).must_be_empty
205
205
  end
206
- end
206
+ end
@@ -1,4 +1,4 @@
1
- require File.expand_path "../../../../spec_helper", __FILE__
1
+ require 'spec_helper'
2
2
 
3
3
  def ibb_open_xml
4
4
  <<-XML
@@ -133,4 +133,4 @@ describe Blather::Stanza::Iq::Ibb::Close do
133
133
  reply = node.reply
134
134
  reply.close.must_be_nil
135
135
  end
136
- end
136
+ end
@@ -1,4 +1,4 @@
1
- require File.expand_path "../../../../spec_helper", __FILE__
1
+ require 'spec_helper'
2
2
 
3
3
  describe Blather::Stanza::Iq::Query do
4
4
  it 'registers itself' do
@@ -1,4 +1,4 @@
1
- require File.expand_path "../../../../spec_helper", __FILE__
1
+ require 'spec_helper'
2
2
 
3
3
  def roster_xml
4
4
  <<-XML
@@ -1,4 +1,4 @@
1
- require File.expand_path "../../../../spec_helper", __FILE__
1
+ require 'spec_helper'
2
2
 
3
3
  def s5b_open_xml
4
4
  <<-XML
@@ -57,4 +57,4 @@ describe Blather::Stanza::Iq::S5b do
57
57
  node.streamhost_used = 'used@example.com/foo'
58
58
  node.streamhost_used.jid.to_s.must_equal 'used@example.com/foo'
59
59
  end
60
- end
60
+ end
@@ -1,4 +1,4 @@
1
- require File.expand_path "../../../../spec_helper", __FILE__
1
+ require 'spec_helper'
2
2
 
3
3
  def si_xml
4
4
  <<-XML
@@ -98,4 +98,4 @@ describe Blather::Stanza::Iq::Si::Si::File do
98
98
  file.desc = 'This is a test. If this were a real file...'
99
99
  file.desc.must_equal 'This is a test. If this were a real file...'
100
100
  end
101
- end
101
+ end
@@ -1,4 +1,4 @@
1
- require File.expand_path "../../../../spec_helper", __FILE__
1
+ require 'spec_helper'
2
2
 
3
3
  def vcard_xml
4
4
  <<-XML
@@ -44,7 +44,7 @@ describe Blather::Stanza::Iq::Vcard do
44
44
  new_vcard["NICKNAME"] = 'Mercutio'
45
45
 
46
46
  query.vcard = new_vcard
47
-
47
+
48
48
  query.xpath('ns:vCard', :ns => 'vcard-temp').size.must_equal 1
49
49
  query.find_first('ns:vCard/ns:NICKNAME', :ns => 'vcard-temp').content.must_equal 'Mercutio'
50
50
  end
@@ -93,4 +93,4 @@ describe Blather::Stanza::Iq::Vcard::Vcard do
93
93
  query.vcard['NICKNAME'] = 'Mercutio'
94
94
  query.vcard['NICKNAME'].must_equal 'Mercutio'
95
95
  end
96
- end
96
+ end
@@ -1,4 +1,4 @@
1
- require File.expand_path "../../../spec_helper", __FILE__
1
+ require 'spec_helper'
2
2
 
3
3
  describe Blather::Stanza::Iq do
4
4
  it 'registers itself' do
@@ -1,4 +1,4 @@
1
- require File.expand_path "../../../spec_helper", __FILE__
1
+ require 'spec_helper'
2
2
 
3
3
  def ichat_message_xml
4
4
  <<-XML
@@ -245,4 +245,4 @@ describe Blather::Stanza::Message do
245
245
  r.form
246
246
  r.xpath('ns:x', :ns => Blather::Stanza::X.registered_ns).wont_be_empty
247
247
  end
248
- end
248
+ end
@@ -0,0 +1,46 @@
1
+ require 'spec_helper'
2
+
3
+ def c_xml
4
+ <<-XML
5
+ <presence from='bard@shakespeare.lit/globe'>
6
+ <c xmlns='http://jabber.org/protocol/caps'
7
+ hash='sha-1'
8
+ node='http://www.chatopus.com'
9
+ ver='zHyEOgxTrkpSdGcQKH8EFPLsriY='/>
10
+ </presence>
11
+ XML
12
+ end
13
+
14
+ describe 'Blather::Stanza::Presence::C' do
15
+ it 'registers itself' do
16
+ Blather::XMPPNode.class_from_registration(:c, 'http://jabber.org/protocol/caps' ).must_equal Blather::Stanza::Presence::C
17
+ end
18
+
19
+ it 'must be importable' do
20
+ c = Blather::XMPPNode.import(parse_stanza(c_xml).root).must_be_instance_of Blather::Stanza::Presence::C
21
+ end
22
+
23
+ it 'ensures hash is one of Blather::Stanza::Presence::C::VALID_HASH_TYPES' do
24
+ lambda { Blather::Stanza::Presence::C.new nil, nil, :invalid_type_name }.must_raise(Blather::ArgumentError)
25
+
26
+ Blather::Stanza::Presence::C::VALID_HASH_TYPES.each do |valid_hash|
27
+ c = Blather::Stanza::Presence::C.new nil, nil, valid_hash
28
+ c.hash.must_equal valid_hash.to_sym
29
+ end
30
+ end
31
+
32
+ it 'can set a hash on creation' do
33
+ c = Blather::Stanza::Presence::C.new nil, nil, :md5
34
+ c.hash.must_equal :md5
35
+ end
36
+
37
+ it 'can set a node on creation' do
38
+ c = Blather::Stanza::Presence::C.new 'http://www.chatopus.com'
39
+ c.node.must_equal 'http://www.chatopus.com'
40
+ end
41
+
42
+ it 'can set a ver on creation' do
43
+ c = Blather::Stanza::Presence::C.new nil, 'zHyEOgxTrkpSdGcQKH8EFPLsriY='
44
+ c.ver.must_equal 'zHyEOgxTrkpSdGcQKH8EFPLsriY='
45
+ end
46
+ end
@@ -1,4 +1,4 @@
1
- require File.expand_path "../../../../spec_helper", __FILE__
1
+ require 'spec_helper'
2
2
 
3
3
  describe Blather::Stanza::Presence::Status do
4
4
  it 'registers itself' do
@@ -1,4 +1,4 @@
1
- require File.expand_path "../../../../spec_helper", __FILE__
1
+ require 'spec_helper'
2
2
 
3
3
  describe Blather::Stanza::Presence::Subscription do
4
4
  it 'registers itself' do
@@ -1,4 +1,4 @@
1
- require File.expand_path "../../../spec_helper", __FILE__
1
+ require 'spec_helper'
2
2
 
3
3
  describe Blather::Stanza::Presence do
4
4
  it 'registers itself' do