diaspora-vines 0.1.25 → 0.1.26

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3ce3ef9b28f9b71a58588bba5547b7be71c9d93d
4
- data.tar.gz: 46863f581edbf9da56a588fb2ab005f28c13827f
3
+ metadata.gz: 69f1732a51eafbd6380760225853ba02f152146c
4
+ data.tar.gz: ee927ae9eb69d6584cede7180dc24ceae9bff465
5
5
  SHA512:
6
- metadata.gz: e136a59ff668bc14016e34cbe85a45cff9a5d5eb844d1b7a8d9d984f5db33741f1cba3790a36ed9ac63e86188f0f44531f81640beb215a91fa27af5af977548c
7
- data.tar.gz: 497a8b3b3928c39be34f1cd0cbfee2f8132168977cf48a4a8ffdb809cb28f97a08afebee8f0881ccf97bf6d4355808f0f4ef21fec443b41681dbbb62d66ca95b
6
+ metadata.gz: e520f4868fb123ccd57bf09437cf1219edc90af497dbdac5f63079afd028a275d200ac7dc83d4e12b5a6af374dc9c09b0662bead7e953e8e927c1ee01446dd60
7
+ data.tar.gz: 6170127b740aaa2b0b1eb61a708e75aa3d103561bcdc611fe21f114f2c20a61aba1707a1fc99ca2e445916afdf5fb3a110a3a33eccc6efe9fa99ac0793fb8a62
data/conf/config.rb CHANGED
@@ -12,6 +12,10 @@ Vines::Config.configure do
12
12
  # `vines init`.
13
13
  certs 'conf/certs'
14
14
 
15
+ # Set the maximum of offline messages stored per user.
16
+ # If it exceeds, old messages will be deleted.
17
+ max_offline_msgs 150
18
+
15
19
  host 'diaspora' do
16
20
  cross_domain_messages true
17
21
  accept_self_signed false
@@ -9,6 +9,8 @@ Vines::Config.configure do
9
9
 
10
10
  certs AppConfig.chat.server.certs.to_s
11
11
 
12
+ max_offline_msgs AppConfig.chat.server.max_offline_msgs.to_i
13
+
12
14
  host diaspora_domain do
13
15
  cross_domain_messages AppConfig.chat.server.cross_domain_messages
14
16
  accept_self_signed AppConfig.chat.server.accept_self_signed
data/lib/vines/config.rb CHANGED
@@ -21,6 +21,7 @@ module Vines
21
21
  end
22
22
 
23
23
  def initialize(&block)
24
+ @max_offline_msgs = 150
24
25
  @certs = File.expand_path('conf/certs')
25
26
  @vhosts, @ports, @cluster = {}, {}, nil
26
27
  @null = Storage::Null.new
@@ -33,6 +34,10 @@ module Vines
33
34
  dir ? @certs = File.expand_path(dir) : @certs
34
35
  end
35
36
 
37
+ def max_offline_msgs(count=nil)
38
+ count ? @max_offline_msgs = count : @max_offline_msgs
39
+ end
40
+
36
41
  def host(*names, &block)
37
42
  names = names.flatten.map {|name| name.downcase }
38
43
  dupes = names.uniq.size != names.size || (@vhosts.keys & names).any?
@@ -19,7 +19,7 @@ module Vines
19
19
  features(query, :disco_info, :ping, :pubsub, *pubsub)
20
20
  else
21
21
  identity(query, 'server', 'im')
22
- features = [:disco_info, :disco_items, :ping, :vcard, :version]
22
+ features = [:disco_info, :disco_items, :offline, :ping, :vcard, :version]
23
23
  features << :storage if stream.config.private_storage?(validate_to || stream.domain)
24
24
  features(query, features)
25
25
  end
@@ -24,8 +24,11 @@ module Vines
24
24
  recipients = stream.connected_resources(to)
25
25
  if recipients.empty?
26
26
  if user = storage(to.domain).find_user(to)
27
- # TODO Implement offline messaging storage
28
- raise StanzaErrors::ServiceUnavailable.new(self, 'cancel')
27
+ if Config.instance.max_offline_msgs > 0 && self[TYPE].match(/(chat|normal)/i)
28
+ storage(to.domain).save_message(stream.user.jid.bare.to_s, to.to_s, @node.text)
29
+ else
30
+ raise StanzaErrors::ServiceUnavailable.new(self, 'cancel')
31
+ end
29
32
  end
30
33
  else
31
34
  broadcast(recipients)
@@ -18,10 +18,36 @@ module Vines
18
18
  unless self['type'].nil?
19
19
  raise StanzaErrors::BadRequest.new(self, 'modify')
20
20
  end
21
+ if Config.instance.max_offline_msgs > 0
22
+ check_offline_messages(stream.last_broadcast_presence)
23
+ end
21
24
  dir = outbound? ? 'outbound' : 'inbound'
22
25
  method("#{dir}_broadcast_presence").call
23
26
  end
24
27
 
28
+ def check_offline_messages(presence)
29
+ priority = presence.xpath("//priority").text.to_i rescue nil
30
+ if priority != nil && priority >= 0
31
+ jid = stream.user.jid.to_s
32
+ storage.find_messages(jid).each do |id, m|
33
+ stamp = Time.parse(m[:created_at].to_s)
34
+ doc = Nokogiri::XML::Builder.new
35
+ doc.message(:type => "chat", :from => m[:from], :to => m[:to]) do |msg|
36
+ msg.send(:"body", m[:message])
37
+ msg.send(:"delay", "Offline Storage",
38
+ :xmlns => NAMESPACES[:delay],
39
+ :from => m[:from],
40
+ :stamp => stamp.iso8601)
41
+ end
42
+ xml = doc.to_xml :save_with => Nokogiri::XML::Node::SaveOptions::NO_DECLARATION
43
+ stream.write(xml)
44
+ # after delivering it we should
45
+ # delete the message from database
46
+ storage.destroy_message(id)
47
+ end
48
+ end
49
+ end
50
+
25
51
  def outbound?
26
52
  !inbound?
27
53
  end
@@ -77,6 +77,18 @@ module Vines
77
77
  save(file, node.to_xml)
78
78
  end
79
79
 
80
+ def find_messages(jid)
81
+ {}
82
+ end
83
+
84
+ def save_message(from, to, message)
85
+ # do nothing
86
+ end
87
+
88
+ def destroy_message(id)
89
+ # do nothing
90
+ end
91
+
80
92
  private
81
93
 
82
94
  # Resolves a relative file name into an absolute path inside the
@@ -34,6 +34,18 @@ module Vines
34
34
  def save_fragment(jid, node)
35
35
  # do nothing
36
36
  end
37
+
38
+ def find_messages(jid)
39
+ {}
40
+ end
41
+
42
+ def save_message(from, to, message)
43
+ # do nothing
44
+ end
45
+
46
+ def destroy_message(id)
47
+ # do nothing
48
+ end
37
49
  end
38
50
  end
39
51
  end
@@ -56,6 +56,8 @@ module Vines
56
56
  has_one :person, :foreign_key => :owner_id
57
57
  end
58
58
 
59
+ class ChatOfflineMessage < ActiveRecord::Base; end
60
+
59
61
  class ChatContact < ActiveRecord::Base
60
62
  belongs_to :users
61
63
  end
@@ -200,6 +202,43 @@ module Vines
200
202
  end
201
203
  with_connection :save_vcard
202
204
 
205
+ def find_messages(jid)
206
+ jid = JID.new(jid).bare.to_s
207
+ return if jid.empty?
208
+ results = Hash.new
209
+ Sql::ChatOfflineMessage.where(:to => jid).each do |r|
210
+ results[r.id] = {
211
+ :from => r.from,
212
+ :to => r.to,
213
+ :message => r.message,
214
+ :created_at => r.created_at
215
+ }
216
+ end
217
+ return results
218
+ end
219
+ with_connection :find_messages
220
+
221
+ def save_message(from, to, msg)
222
+ return if from.empty? || to.empty? || msg.empty?
223
+ com = Sql::ChatOfflineMessage
224
+ current = com.count(:to => to)
225
+ unless current < Config.instance.max_offline_msgs
226
+ com.where(:to => to)
227
+ .order(created_at: :asc)
228
+ .first
229
+ .delete
230
+ end
231
+ com.create(:from => from, :to => to, :message => msg)
232
+ end
233
+ with_connection :save_message
234
+
235
+ def destroy_message(id)
236
+ id = id.to_i rescue nil
237
+ return if id.nil?
238
+ Sql::ChatOfflineMessage.find(id).destroy
239
+ end
240
+ with_connection :destroy_message
241
+
203
242
  def find_fragment(jid, node)
204
243
  jid = JID.new(jid).bare.to_s
205
244
  return if jid.empty?
data/lib/vines/storage.rb CHANGED
@@ -212,6 +212,37 @@ module Vines
212
212
  raise 'subclass must implement'
213
213
  end
214
214
 
215
+ # Check whether offline messages are available for the user
216
+ # jid - The String or JID of the user, possibly nil. This may be
217
+ # either a bare JID or full JID. Implementations of this method
218
+ # must convert the JID to a bare JID before searching for
219
+ # offline messages.
220
+ #
221
+ # Returns hash
222
+ def find_messages(jid)
223
+ raise 'subclass must implement'
224
+ end
225
+
226
+ # Save the offline message to the database, and return when the save is complete.
227
+ #
228
+ # from - The String or JID of the user.
229
+ # to - The String or JID of the user.
230
+ # message - The message you want to store.
231
+ #
232
+ # Returns nothing.
233
+ def save_mesage(from, to, message)
234
+ raise 'subclass must implement'
235
+ end
236
+
237
+ # Delete a offline message from database.
238
+ #
239
+ # id - The identifier of the offline message
240
+ #
241
+ # Returns nothing.
242
+ def destroy_message(id)
243
+ raise 'subclass must implement'
244
+ end
245
+
215
246
  private
216
247
 
217
248
  # Determine if any of the arguments are nil or empty strings.
data/lib/vines/version.rb CHANGED
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Vines
4
4
  # vines forked version 0.4.10
5
- VERSION = '0.1.25'
5
+ VERSION = '0.1.26'
6
6
  end
data/lib/vines.rb CHANGED
@@ -15,6 +15,7 @@ module Vines
15
15
  :bind => 'urn:ietf:params:xml:ns:xmpp-bind'.freeze,
16
16
  :session => 'urn:ietf:params:xml:ns:xmpp-session'.freeze,
17
17
  :ping => 'urn:xmpp:ping'.freeze,
18
+ :delay => 'urn:xmpp:delay'.freeze,
18
19
  :pubsub => 'http://jabber.org/protocol/pubsub'.freeze,
19
20
  :pubsub_event => 'http://jabber.org/protocol/pubsub#event'.freeze,
20
21
  :pubsub_create => 'http://jabber.org/protocol/pubsub#create-nodes'.freeze,
@@ -26,6 +27,7 @@ module Vines
26
27
  :disco_items => 'http://jabber.org/protocol/disco#items'.freeze,
27
28
  :disco_info => 'http://jabber.org/protocol/disco#info'.freeze,
28
29
  :http_bind => 'http://jabber.org/protocol/httpbind'.freeze,
30
+ :offline => 'msgoffline'.freeze,
29
31
  :bosh => 'urn:xmpp:xbosh'.freeze,
30
32
  :vcard => 'vcard-temp'.freeze,
31
33
  :si => 'http://jabber.org/protocol/si'.freeze,
@@ -72,6 +74,7 @@ end
72
74
  resolv
73
75
  set
74
76
  socket
77
+ time
75
78
  uri
76
79
  yaml
77
80
 
@@ -35,6 +35,7 @@ describe Vines::Stanza::Iq::DiscoInfo do
35
35
  <identity category="server" type="im"/>
36
36
  <feature var="http://jabber.org/protocol/disco#info"/>
37
37
  <feature var="http://jabber.org/protocol/disco#items"/>
38
+ <feature var="msgoffline"/>
38
39
  <feature var="urn:xmpp:ping"/>
39
40
  <feature var="vcard-temp"/>
40
41
  <feature var="jabber:iq:version"/>
@@ -59,6 +60,7 @@ describe Vines::Stanza::Iq::DiscoInfo do
59
60
  <identity category="server" type="im"/>
60
61
  <feature var="http://jabber.org/protocol/disco#info"/>
61
62
  <feature var="http://jabber.org/protocol/disco#items"/>
63
+ <feature var="msgoffline"/>
62
64
  <feature var="urn:xmpp:ping"/>
63
65
  <feature var="vcard-temp"/>
64
66
  <feature var="jabber:iq:version"/>
@@ -72,6 +72,7 @@ describe Vines::Stanza::Message do
72
72
  let(:storage) { MiniTest::Mock.new }
73
73
 
74
74
  before do
75
+ skip # due offline message implementation
75
76
  storage.expect :find_user, hatter, [hatter.jid]
76
77
  stream.expect :storage, storage, [hatter.jid.domain]
77
78
  stream.expect :connected_resources, [], [hatter.jid]
@@ -125,6 +125,13 @@ module SqlSchema
125
125
 
126
126
  add_index "chat_fragments", ["user_id"], :name => "index_chat_fragments_on_user_id", :unique => true
127
127
 
128
+ create_table "chat_offline_messages", force: true do |t|
129
+ t.string "from", null: false
130
+ t.string "to", null: false
131
+ t.text "message", null: false
132
+ t.datetime "created_at", null: false
133
+ end
134
+
128
135
  create_table "users", :force => true do |t|
129
136
  t.string "username"
130
137
  t.text "serialized_private_key"
@@ -3,6 +3,14 @@
3
3
  require 'test_helper'
4
4
  require 'storage/sql_schema'
5
5
 
6
+ module Vines
7
+ class Config
8
+ def instance.max_offline_msgs
9
+ return 1
10
+ end
11
+ end
12
+ end
13
+
6
14
  module Diaspora
7
15
  class Application < Rails::Application
8
16
  def config.database_configuration
@@ -75,6 +83,70 @@ describe Vines::Storage::Sql do
75
83
  File.delete(db) if File.exist?(db)
76
84
  end
77
85
 
86
+ def test_save_message
87
+ fibered do
88
+ db = storage
89
+
90
+ assert_nil db.save_message("", "", "")
91
+ assert_nil db.save_message("dude@valid@jid", "dude2@valid.jid", "")
92
+ assert_nil db.save_message("dude@valid@jid", "", "test")
93
+ assert_nil db.save_message("", "dude2@valid.jid", "test")
94
+
95
+ db.save_message(@test_user[:jid], "someone@inthe.void", "test")
96
+
97
+ msgs = Vines::Storage::Sql::ChatOfflineMessage.where(:to => "someone@inthe.void")
98
+ assert_equal 1, msgs.count
99
+ assert_equal "someone@inthe.void", msgs.first.to
100
+ assert_equal @test_user[:jid], msgs.first.from
101
+ assert_equal "test", msgs.first.message
102
+
103
+ db.save_message("someone@else.void", "someone@inthe.void", "test2")
104
+
105
+ msgs = Vines::Storage::Sql::ChatOfflineMessage.where(:to => "someone@inthe.void")
106
+ assert_equal 1, msgs.count # due max limit equals one (see max_offline_msgs)
107
+ assert_equal "someone@inthe.void", msgs.first.to
108
+ assert_equal "someone@else.void", msgs.first.from
109
+ assert_equal "test2", msgs.first.message # should be latest message
110
+ end
111
+ end
112
+
113
+ def test_find_messages
114
+ fibered do
115
+ db = storage
116
+
117
+ assert_nil db.find_messages("")
118
+ assert_equal 0, db.find_messages("someone@inthe.void").keys.count
119
+
120
+ Vines::Storage::Sql::ChatOfflineMessage.new(
121
+ :from => @test_user[:jid],
122
+ :to => "someone@inthe.void",
123
+ :message => "test"
124
+ ).save
125
+
126
+ msgs = db.find_messages("someone@inthe.void")
127
+ assert_equal 1, msgs.keys.count
128
+ assert_equal "someone@inthe.void", msgs[1][:to]
129
+ assert_equal @test_user[:jid], msgs[1][:from]
130
+ assert_equal "test", msgs[1][:message]
131
+ end
132
+ end
133
+
134
+ def test_destroy_message
135
+ fibered do
136
+ db = storage
137
+ com = Vines::Storage::Sql::ChatOfflineMessage
138
+ com.new(:from => @test_user[:jid],
139
+ :to => "someone@inthe.void",
140
+ :message => "test"
141
+ ).save
142
+
143
+ db.destroy_message(1)
144
+
145
+ count = Vines::Storage::Sql::ChatOfflineMessage.count(:id => 1)
146
+ assert_equal 0, count
147
+ end
148
+ end
149
+
78
150
  def test_aspect_chat_enabled
79
151
  fibered do
80
152
  db = storage
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: diaspora-vines
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.25
4
+ version: 0.1.26
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Graham
@@ -9,146 +9,146 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-10-23 00:00:00.000000000 Z
12
+ date: 2014-12-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bcrypt
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - ~>
18
+ - - "~>"
19
19
  - !ruby/object:Gem::Version
20
20
  version: '3.1'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - ~>
25
+ - - "~>"
26
26
  - !ruby/object:Gem::Version
27
27
  version: '3.1'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: em-hiredis
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - ~>
32
+ - - "~>"
33
33
  - !ruby/object:Gem::Version
34
34
  version: 0.3.0
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - ~>
39
+ - - "~>"
40
40
  - !ruby/object:Gem::Version
41
41
  version: 0.3.0
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: eventmachine
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - ~>
46
+ - - "~>"
47
47
  - !ruby/object:Gem::Version
48
48
  version: '1.0'
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - ~>
53
+ - - "~>"
54
54
  - !ruby/object:Gem::Version
55
55
  version: '1.0'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: http_parser.rb
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
- - - ~>
60
+ - - "~>"
61
61
  - !ruby/object:Gem::Version
62
62
  version: '0.6'
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
- - - ~>
67
+ - - "~>"
68
68
  - !ruby/object:Gem::Version
69
69
  version: '0.6'
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: nokogiri
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
- - - ~>
74
+ - - "~>"
75
75
  - !ruby/object:Gem::Version
76
76
  version: '1.6'
77
77
  type: :runtime
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
- - - ~>
81
+ - - "~>"
82
82
  - !ruby/object:Gem::Version
83
83
  version: '1.6'
84
84
  - !ruby/object:Gem::Dependency
85
85
  name: activerecord
86
86
  requirement: !ruby/object:Gem::Requirement
87
87
  requirements:
88
- - - ~>
88
+ - - "~>"
89
89
  - !ruby/object:Gem::Version
90
- version: 4.1.4
90
+ version: '4.1'
91
91
  type: :runtime
92
92
  prerelease: false
93
93
  version_requirements: !ruby/object:Gem::Requirement
94
94
  requirements:
95
- - - ~>
95
+ - - "~>"
96
96
  - !ruby/object:Gem::Version
97
- version: 4.1.4
97
+ version: '4.1'
98
98
  - !ruby/object:Gem::Dependency
99
99
  name: rails
100
100
  requirement: !ruby/object:Gem::Requirement
101
101
  requirements:
102
- - - ~>
102
+ - - "~>"
103
103
  - !ruby/object:Gem::Version
104
- version: 4.1.4
104
+ version: '4.1'
105
105
  type: :development
106
106
  prerelease: false
107
107
  version_requirements: !ruby/object:Gem::Requirement
108
108
  requirements:
109
- - - ~>
109
+ - - "~>"
110
110
  - !ruby/object:Gem::Version
111
- version: 4.1.4
111
+ version: '4.1'
112
112
  - !ruby/object:Gem::Dependency
113
113
  name: sqlite3
114
114
  requirement: !ruby/object:Gem::Requirement
115
115
  requirements:
116
- - - ~>
116
+ - - "~>"
117
117
  - !ruby/object:Gem::Version
118
118
  version: 1.3.9
119
119
  type: :development
120
120
  prerelease: false
121
121
  version_requirements: !ruby/object:Gem::Requirement
122
122
  requirements:
123
- - - ~>
123
+ - - "~>"
124
124
  - !ruby/object:Gem::Version
125
125
  version: 1.3.9
126
126
  - !ruby/object:Gem::Dependency
127
127
  name: minitest
128
128
  requirement: !ruby/object:Gem::Requirement
129
129
  requirements:
130
- - - ~>
130
+ - - "~>"
131
131
  - !ruby/object:Gem::Version
132
132
  version: '5.3'
133
133
  type: :development
134
134
  prerelease: false
135
135
  version_requirements: !ruby/object:Gem::Requirement
136
136
  requirements:
137
- - - ~>
137
+ - - "~>"
138
138
  - !ruby/object:Gem::Version
139
139
  version: '5.3'
140
140
  - !ruby/object:Gem::Dependency
141
141
  name: rake
142
142
  requirement: !ruby/object:Gem::Requirement
143
143
  requirements:
144
- - - ~>
144
+ - - "~>"
145
145
  - !ruby/object:Gem::Version
146
146
  version: '10.3'
147
147
  type: :development
148
148
  prerelease: false
149
149
  version_requirements: !ruby/object:Gem::Requirement
150
150
  requirements:
151
- - - ~>
151
+ - - "~>"
152
152
  - !ruby/object:Gem::Version
153
153
  version: '10.3'
154
154
  description: Diaspora-vines is a Vines fork build for diaspora integration. DO NOT
@@ -199,7 +199,6 @@ files:
199
199
  - lib/vines/stanza/iq/disco_info.rb
200
200
  - lib/vines/stanza/iq/disco_items.rb
201
201
  - lib/vines/stanza/iq/error.rb
202
- - lib/vines/stanza/iq/offline.rb
203
202
  - lib/vines/stanza/iq/ping.rb
204
203
  - lib/vines/stanza/iq/private_storage.rb
205
204
  - lib/vines/stanza/iq/query.rb
@@ -339,73 +338,73 @@ require_paths:
339
338
  - lib
340
339
  required_ruby_version: !ruby/object:Gem::Requirement
341
340
  requirements:
342
- - - '>='
341
+ - - ">="
343
342
  - !ruby/object:Gem::Version
344
343
  version: 1.9.3
345
344
  required_rubygems_version: !ruby/object:Gem::Requirement
346
345
  requirements:
347
- - - '>='
346
+ - - ">="
348
347
  - !ruby/object:Gem::Version
349
348
  version: '0'
350
349
  requirements: []
351
350
  rubyforge_project:
352
- rubygems_version: 2.4.1
351
+ rubygems_version: 2.3.0
353
352
  signing_key:
354
353
  specification_version: 4
355
354
  summary: Diaspora-vines is a Vines fork build for diaspora integration.
356
355
  test_files:
357
- - test/cluster/publisher_test.rb
358
- - test/cluster/sessions_test.rb
359
- - test/cluster/subscriber_test.rb
356
+ - test/error_test.rb
357
+ - test/test_helper.rb
358
+ - test/storage/local_test.rb
359
+ - test/storage/mock_redis.rb
360
+ - test/storage/sql_schema.rb
361
+ - test/storage/sql_test.rb
362
+ - test/storage/null_test.rb
363
+ - test/storage/storage_tests.rb
360
364
  - test/ext/nokogiri.rb
361
- - test/kit_test.rb
362
365
  - test/contact_test.rb
363
- - test/router_test.rb
364
- - test/config/host_test.rb
365
- - test/config/pubsub_test.rb
366
- - test/jid_test.rb
367
- - test/stanza/iq/vcard_test.rb
368
- - test/stanza/iq/private_storage_test.rb
369
- - test/stanza/iq/roster_test.rb
370
- - test/stanza/iq/disco_info_test.rb
371
- - test/stanza/iq/session_test.rb
372
- - test/stanza/iq/disco_items_test.rb
373
- - test/stanza/iq/version_test.rb
374
- - test/stanza/presence/probe_test.rb
375
- - test/stanza/presence/subscribe_test.rb
376
- - test/stanza/message_test.rb
377
- - test/stanza/iq_test.rb
378
- - test/stanza/pubsub/publish_test.rb
379
- - test/stanza/pubsub/create_test.rb
380
- - test/stanza/pubsub/subscribe_test.rb
381
- - test/stanza/pubsub/unsubscribe_test.rb
382
- - test/stanza/pubsub/delete_test.rb
383
- - test/token_bucket_test.rb
384
366
  - test/store_test.rb
385
- - test/stanza_test.rb
386
- - test/error_test.rb
367
+ - test/cluster/sessions_test.rb
368
+ - test/cluster/publisher_test.rb
369
+ - test/cluster/subscriber_test.rb
370
+ - test/config_test.rb
387
371
  - test/stream/parser_test.rb
372
+ - test/stream/client/ready_test.rb
388
373
  - test/stream/client/auth_test.rb
389
374
  - test/stream/client/session_test.rb
390
- - test/stream/client/ready_test.rb
391
- - test/stream/http/auth_test.rb
392
- - test/stream/http/start_test.rb
375
+ - test/stream/sasl_test.rb
393
376
  - test/stream/http/sessions_test.rb
394
- - test/stream/http/request_test.rb
377
+ - test/stream/http/start_test.rb
395
378
  - test/stream/http/ready_test.rb
396
- - test/stream/server/outbound/auth_test.rb
397
- - test/stream/server/auth_test.rb
398
- - test/stream/server/ready_test.rb
399
- - test/stream/sasl_test.rb
400
- - test/stream/component/handshake_test.rb
379
+ - test/stream/http/auth_test.rb
380
+ - test/stream/http/request_test.rb
401
381
  - test/stream/component/start_test.rb
402
382
  - test/stream/component/ready_test.rb
383
+ - test/stream/component/handshake_test.rb
384
+ - test/stream/server/ready_test.rb
385
+ - test/stream/server/auth_test.rb
386
+ - test/stream/server/outbound/auth_test.rb
387
+ - test/token_bucket_test.rb
388
+ - test/router_test.rb
403
389
  - test/user_test.rb
404
- - test/config_test.rb
405
- - test/test_helper.rb
406
- - test/storage/storage_tests.rb
407
- - test/storage/sql_schema.rb
408
- - test/storage/null_test.rb
409
- - test/storage/sql_test.rb
410
- - test/storage/mock_redis.rb
411
- - test/storage/local_test.rb
390
+ - test/stanza/message_test.rb
391
+ - test/stanza/presence/subscribe_test.rb
392
+ - test/stanza/presence/probe_test.rb
393
+ - test/stanza/pubsub/publish_test.rb
394
+ - test/stanza/pubsub/delete_test.rb
395
+ - test/stanza/pubsub/create_test.rb
396
+ - test/stanza/pubsub/unsubscribe_test.rb
397
+ - test/stanza/pubsub/subscribe_test.rb
398
+ - test/stanza/iq_test.rb
399
+ - test/stanza/iq/roster_test.rb
400
+ - test/stanza/iq/vcard_test.rb
401
+ - test/stanza/iq/disco_info_test.rb
402
+ - test/stanza/iq/private_storage_test.rb
403
+ - test/stanza/iq/session_test.rb
404
+ - test/stanza/iq/version_test.rb
405
+ - test/stanza/iq/disco_items_test.rb
406
+ - test/jid_test.rb
407
+ - test/stanza_test.rb
408
+ - test/config/host_test.rb
409
+ - test/config/pubsub_test.rb
410
+ - test/kit_test.rb
@@ -1,54 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- module Vines
4
- class Stanza
5
- class Iq
6
- class Ping < Iq
7
- include Vines::Log
8
-
9
- NS = NAMESPACES[:disco_info]
10
- NODE = NAMESPACES[:offline]
11
-
12
- register "/iq[@id and @type='get']/ns:offline", 'ns' => NODE
13
-
14
- def process
15
- log.debug("heelo world::#{to_result.to_yaml}")
16
- #return if route_iq || !allowed?
17
- #stream.write(to_result)
18
- result = to_result.tap do |el|
19
- el << el.document.create_element('query') do |query|
20
- query.default_namespace = NS
21
- query['node'] = NODE
22
- items = [
23
- [
24
- :jid => 'romeo@montague.net',
25
- :node => '2003-02-27T22:49:17.008Z',
26
- :name => 'mercutio@shakespeare.lit/pda'
27
- ],
28
- [
29
- :jid => 'romeo@montague.net',
30
- :node => '2003-02-27T22:52:51.270Z',
31
- :name => 'juliet@capulet.com/balcony'
32
- ]
33
- ]
34
- items(query, items)
35
- end
36
- end
37
- stream.write(result)
38
- end
39
-
40
- private
41
-
42
- def items(query, *items)
43
- items.flatten.each do |item|
44
- query << query.document.create_element(
45
- 'item',
46
- 'jid' => item[:jid],
47
- 'node' => item[:node],
48
- 'name'=> item[:name])
49
- end
50
- end
51
- end
52
- end
53
- end
54
- end