face-faye 0.8.9

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.
Files changed (73) hide show
  1. data/History.txt +304 -0
  2. data/README.rdoc +83 -0
  3. data/lib/faye-browser-min.js +2 -0
  4. data/lib/faye-browser-min.js.map +8 -0
  5. data/lib/faye-browser.js +2194 -0
  6. data/lib/faye.rb +122 -0
  7. data/lib/faye/adapters/rack_adapter.rb +216 -0
  8. data/lib/faye/adapters/static_server.rb +56 -0
  9. data/lib/faye/engines/connection.rb +60 -0
  10. data/lib/faye/engines/memory.rb +112 -0
  11. data/lib/faye/engines/proxy.rb +121 -0
  12. data/lib/faye/error.rb +49 -0
  13. data/lib/faye/mixins/logging.rb +47 -0
  14. data/lib/faye/mixins/publisher.rb +30 -0
  15. data/lib/faye/mixins/timeouts.rb +22 -0
  16. data/lib/faye/protocol/channel.rb +124 -0
  17. data/lib/faye/protocol/client.rb +376 -0
  18. data/lib/faye/protocol/extensible.rb +43 -0
  19. data/lib/faye/protocol/grammar.rb +58 -0
  20. data/lib/faye/protocol/publication.rb +5 -0
  21. data/lib/faye/protocol/server.rb +293 -0
  22. data/lib/faye/protocol/socket.rb +23 -0
  23. data/lib/faye/protocol/subscription.rb +24 -0
  24. data/lib/faye/transport/http.rb +76 -0
  25. data/lib/faye/transport/local.rb +22 -0
  26. data/lib/faye/transport/transport.rb +116 -0
  27. data/lib/faye/transport/web_socket.rb +92 -0
  28. data/lib/faye/util/namespace.rb +20 -0
  29. data/spec/browser.html +45 -0
  30. data/spec/encoding_helper.rb +7 -0
  31. data/spec/install.sh +78 -0
  32. data/spec/javascript/channel_spec.js +15 -0
  33. data/spec/javascript/client_spec.js +729 -0
  34. data/spec/javascript/engine/memory_spec.js +7 -0
  35. data/spec/javascript/engine_spec.js +417 -0
  36. data/spec/javascript/faye_spec.js +34 -0
  37. data/spec/javascript/grammar_spec.js +66 -0
  38. data/spec/javascript/node_adapter_spec.js +307 -0
  39. data/spec/javascript/publisher_spec.js +27 -0
  40. data/spec/javascript/server/connect_spec.js +168 -0
  41. data/spec/javascript/server/disconnect_spec.js +121 -0
  42. data/spec/javascript/server/extensions_spec.js +60 -0
  43. data/spec/javascript/server/handshake_spec.js +145 -0
  44. data/spec/javascript/server/integration_spec.js +131 -0
  45. data/spec/javascript/server/publish_spec.js +85 -0
  46. data/spec/javascript/server/subscribe_spec.js +247 -0
  47. data/spec/javascript/server/unsubscribe_spec.js +245 -0
  48. data/spec/javascript/server_spec.js +121 -0
  49. data/spec/javascript/transport_spec.js +135 -0
  50. data/spec/node.js +55 -0
  51. data/spec/phantom.js +17 -0
  52. data/spec/ruby/channel_spec.rb +17 -0
  53. data/spec/ruby/client_spec.rb +741 -0
  54. data/spec/ruby/engine/memory_spec.rb +7 -0
  55. data/spec/ruby/engine_examples.rb +427 -0
  56. data/spec/ruby/faye_spec.rb +30 -0
  57. data/spec/ruby/grammar_spec.rb +68 -0
  58. data/spec/ruby/publisher_spec.rb +27 -0
  59. data/spec/ruby/rack_adapter_spec.rb +236 -0
  60. data/spec/ruby/server/connect_spec.rb +170 -0
  61. data/spec/ruby/server/disconnect_spec.rb +120 -0
  62. data/spec/ruby/server/extensions_spec.rb +68 -0
  63. data/spec/ruby/server/handshake_spec.rb +143 -0
  64. data/spec/ruby/server/integration_spec.rb +133 -0
  65. data/spec/ruby/server/publish_spec.rb +81 -0
  66. data/spec/ruby/server/subscribe_spec.rb +247 -0
  67. data/spec/ruby/server/unsubscribe_spec.rb +247 -0
  68. data/spec/ruby/server_spec.rb +121 -0
  69. data/spec/ruby/transport_spec.rb +136 -0
  70. data/spec/spec_helper.rb +11 -0
  71. data/spec/testswarm +42 -0
  72. data/spec/thin_proxy.rb +37 -0
  73. metadata +441 -0
@@ -0,0 +1,121 @@
1
+ require "spec_helper"
2
+
3
+ describe Faye::Server do
4
+ let(:engine) { mock "engine" }
5
+ let(:server) { Faye::Server.new }
6
+
7
+ before do
8
+ Faye::Engine.stub(:get).and_return engine
9
+ end
10
+
11
+ describe :process do
12
+ let(:handshake) {{"channel" => "/meta/handshake", "data" => "handshake" }}
13
+ let(:connect) {{"channel" => "/meta/connect", "data" => "connect" }}
14
+ let(:disconnect) {{"channel" => "/meta/disconnect", "data" => "disconnect" }}
15
+ let(:subscribe) {{"channel" => "/meta/subscribe", "data" => "subscribe" }}
16
+ let(:unsubscribe) {{"channel" => "/meta/unsubscribe", "data" => "unsubscribe"}}
17
+ let(:publish) {{"channel" => "/some/channel", "data" => "publish" }}
18
+
19
+ before do
20
+ engine.stub(:interval).and_return(0)
21
+ engine.stub(:timeout).and_return(60)
22
+ end
23
+
24
+ it "returns an empty response for no messages" do
25
+ response = nil
26
+ server.process([], false) { |r| response = r }
27
+ response.should == []
28
+ end
29
+
30
+ it "ignores invalid messages" do
31
+ response = nil
32
+ server.process([{}, {"channel" => "invalid"}], false) { |r| response = r }
33
+ response.should == [
34
+ { "successful" => false,
35
+ "error" => "405::Invalid channel"
36
+ },
37
+ { "channel" => "invalid",
38
+ "successful" => false,
39
+ "error" => "405:invalid:Invalid channel"
40
+ }
41
+ ]
42
+ end
43
+
44
+ it "rejects unknown meta channels" do
45
+ response = nil
46
+ server.process([{"channel" => "/meta/p"}], false) { |r| response = r }
47
+ response.should == [
48
+ { "channel" => "/meta/p",
49
+ "successful" => false,
50
+ "error" => "403:/meta/p:Forbidden channel"
51
+ }
52
+ ]
53
+ end
54
+
55
+ it "routes single messages to appropriate handlers" do
56
+ server.should_receive(:handshake).with(handshake, false)
57
+ server.process(handshake, false) {}
58
+ end
59
+
60
+ it "routes a list of messages to appropriate handlers" do
61
+ server.should_receive(:handshake).with(handshake, false)
62
+ server.should_receive(:connect).with(connect, false)
63
+ server.should_receive(:disconnect).with(disconnect, false)
64
+ server.should_receive(:subscribe).with(subscribe, false)
65
+ server.should_receive(:unsubscribe).with(unsubscribe, false)
66
+
67
+ engine.should_not_receive(:publish).with(handshake)
68
+ engine.should_not_receive(:publish).with(connect)
69
+ engine.should_not_receive(:publish).with(disconnect)
70
+ engine.should_not_receive(:publish).with(subscribe)
71
+ engine.should_not_receive(:publish).with(unsubscribe)
72
+ engine.should_receive(:publish).with(publish)
73
+
74
+ server.process([handshake, connect, disconnect, subscribe, unsubscribe, publish], false)
75
+ end
76
+
77
+ describe "handshaking" do
78
+ before do
79
+ response = {"channel" => "/meta/handshake", "successful" => true}
80
+ server.should_receive(:handshake).with(handshake, false).and_yield(response)
81
+ end
82
+
83
+ it "returns the handshake response with advice" do
84
+ server.process(handshake, false) do |response|
85
+ response.should == [
86
+ { "channel" => "/meta/handshake",
87
+ "successful" => true,
88
+ "advice" => {"reconnect" => "retry", "interval" => 0, "timeout" => 60000}
89
+ }
90
+ ]
91
+ end
92
+ end
93
+ end
94
+
95
+ describe "connecting for messages" do
96
+ let(:messages) { [{"channel" => "/a"}, {"channel" => "/b"}] }
97
+
98
+ before do
99
+ server.should_receive(:connect).with(connect, false).and_yield(messages)
100
+ end
101
+
102
+ it "returns the new messages" do
103
+ server.process(connect, false) { |r| r.should == messages }
104
+ end
105
+ end
106
+ end
107
+
108
+ describe :flush_connection do
109
+ let(:message) {{"clientId" => "fakeclientid"}}
110
+
111
+ it "flushes the connection when given one message" do
112
+ engine.should_receive(:flush).with("fakeclientid")
113
+ server.flush_connection(message)
114
+ end
115
+
116
+ it "flushes the connection when given a list of messages" do
117
+ engine.should_receive(:flush).with("fakeclientid")
118
+ server.flush_connection([message])
119
+ end
120
+ end
121
+ end
@@ -0,0 +1,136 @@
1
+ require "spec_helper"
2
+
3
+ describe Faye::Transport do
4
+ before do
5
+ Faye.ensure_reactor_running!
6
+ end
7
+
8
+ let :client do
9
+ mock("client", :endpoint => "http://example.com/", :endpoints => {}, :transports => {})
10
+ end
11
+
12
+ describe :get do
13
+ before do
14
+ Faye::Transport::Local.stub(:usable?).and_yield(false)
15
+ Faye::Transport::Http.stub(:usable?).and_yield(false)
16
+ end
17
+
18
+ def get_transport(connection_types)
19
+ transport = nil
20
+ Faye::Transport.get(client, connection_types, []) { |t| transport = t }
21
+ transport
22
+ end
23
+
24
+ let(:transport) { get_transport ["long-polling", "in-process"] }
25
+ let(:local_transport) { get_transport ["in-process"] }
26
+ let(:http_transport) { get_transport ["long-polling"] }
27
+
28
+ describe "when no transport is usable" do
29
+ it "raises an exception" do
30
+ lambda { transport }.should raise_error
31
+ end
32
+ end
33
+
34
+ describe "when a less preferred transport is usable" do
35
+ before do
36
+ Faye::Transport::Http.stub(:usable?).and_yield(true)
37
+ end
38
+
39
+ it "returns a transport of the usable type" do
40
+ transport.should be_kind_of(Faye::Transport::Http)
41
+ end
42
+
43
+ it "rasies an exception of the usable type is not requested" do
44
+ lambda { local_transport }.should raise_error
45
+ end
46
+
47
+ it "allows the usable type to be specifically selected" do
48
+ http_transport.should be_kind_of(Faye::Transport::Http)
49
+ end
50
+ end
51
+
52
+ describe "when all transports are usable" do
53
+ before do
54
+ Faye::Transport::Local.stub(:usable?).and_yield(true)
55
+ Faye::Transport::Http.stub(:usable?).and_yield(true)
56
+ end
57
+
58
+ it "returns the most preferred type" do
59
+ transport.should be_kind_of(Faye::Transport::Local)
60
+ end
61
+
62
+ it "allows types to be specifically selected" do
63
+ local_transport.should be_kind_of(Faye::Transport::Local)
64
+ http_transport.should be_kind_of(Faye::Transport::Http)
65
+ end
66
+ end
67
+ end
68
+
69
+ describe :send do
70
+ include EM::RSpec::FakeClock
71
+ before { clock.stub }
72
+ after { clock.reset }
73
+
74
+ before do
75
+ client.stub(:client_id).and_return("abc123")
76
+ end
77
+
78
+ describe "for batching transports" do
79
+ before do
80
+ transport_klass = Class.new(Faye::Transport) do
81
+ def batching?
82
+ true
83
+ end
84
+ end
85
+ @transport = transport_klass.new(client, "")
86
+ end
87
+
88
+ it "does not make an immediate request" do
89
+ @transport.should_not_receive(:request)
90
+ @transport.send({"batch" => "me"}, 60)
91
+ end
92
+
93
+ it "queues the message to be sent after a timeout" do
94
+ @transport.should_receive(:request).with([{"batch" => "me"}], 60)
95
+ @transport.send({"batch" => "me"}, 60)
96
+ clock.tick(0.01)
97
+ end
98
+
99
+ it "allows multiple messages to be batched together" do
100
+ @transport.should_receive(:request).with([{"id" => 1}, {"id" => 2}], 60)
101
+ @transport.send({"id" => 1}, 60)
102
+ @transport.send({"id" => 2}, 60)
103
+ clock.tick(0.01)
104
+ end
105
+
106
+ it "adds advice to connect messages sent with others" do
107
+ @transport.should_receive(:request).with([{"channel" => "/meta/connect", "advice" => {"timeout" => 0}}, {}], 60)
108
+ @transport.send({"channel" => "/meta/connect"}, 60)
109
+ @transport.send({}, 60)
110
+ clock.tick(0.01)
111
+ end
112
+
113
+ it "adds no advice to connect messages sent alone" do
114
+ @transport.should_receive(:request).with([{"channel" => "/meta/connect"}], 60)
115
+ @transport.send({"channel" => "/meta/connect"}, 60)
116
+ clock.tick(0.01)
117
+ end
118
+ end
119
+
120
+ describe "for non-batching transports" do
121
+ before do
122
+ transport_klass = Class.new(Faye::Transport) do
123
+ def batching?
124
+ false
125
+ end
126
+ end
127
+ @transport = transport_klass.new(client, "")
128
+ end
129
+
130
+ it "makes a request immediately" do
131
+ @transport.should_receive(:request).with([{"no" => "batch"}], 60)
132
+ @transport.send({"no" => "batch"}, 60)
133
+ end
134
+ end
135
+ end
136
+ end
@@ -0,0 +1,11 @@
1
+ require 'bundler/setup'
2
+ dir = File.expand_path(File.dirname(__FILE__))
3
+ require dir + '/../lib/faye'
4
+ require dir + '/../vendor/em-rspec/lib/em-rspec'
5
+ require 'rack/test'
6
+
7
+ Faye.logger = lambda { |*| }
8
+
9
+ require 'encoding_helper'
10
+ require 'ruby/engine_examples'
11
+
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "rubygems"
4
+ require "bundler/setup"
5
+ require "testswarm/client"
6
+
7
+ server = ENV["TESTSWARM_SERVER"]
8
+ key = ENV["TESTSWARM_KEY"]
9
+ root = ENV["TESTSWARM_ROOT"]
10
+ bundle = ENV["BUNDLE_DIRECTORY"]
11
+
12
+ client = TestSwarm::Client.new(server)
13
+ project = client.project("faye", :auth => key)
14
+
15
+ job = TestSwarm::Job.create(
16
+ :rcs => {
17
+ :type => "git",
18
+ :url => "git://github.com/faye/faye.git",
19
+ :branch => "master"
20
+ },
21
+ :directory => File.join(root, "changeset", project.name),
22
+ :diff => ["javascript", "spec/javascript"],
23
+ :build => [
24
+ "mkdir -p vendor",
25
+ "ln -s #{bundle} vendor/bundle",
26
+ "bundle install --path vendor/bundle",
27
+ "npm install",
28
+ "rm -rf build",
29
+ "bundle exec jake"
30
+ ],
31
+ :inject => "spec/browser.html"
32
+ )
33
+
34
+ exit unless job.new?
35
+
36
+ path = "#{client.url}/changeset/#{project.name}/#{job.revision}"
37
+ job.add_suite "Faye tests", "#{path}/spec/browser.html"
38
+
39
+ project.submit_job "Faye Commit #{job.revision}", job,
40
+ :browsers => "all",
41
+ :max => 5
42
+
@@ -0,0 +1,37 @@
1
+ require 'rack/proxy'
2
+
3
+ # This only exists so we can use Rack::Test to test the
4
+ # RackAdapter class, which assumes it's running on Thin
5
+
6
+ class ThinProxy < Rack::Proxy
7
+ HOST = 'localhost'
8
+ PORT = '8282'
9
+
10
+ def initialize(rack_app)
11
+ Thin::Logging.silent = true
12
+ handler = Rack::Handler.get('thin')
13
+
14
+ EM.stop if EM.reactor_running?
15
+ Thread.pass while EM.reactor_running?
16
+
17
+ Thread.new {
18
+ handler.run(rack_app, :Host => HOST, :Port => PORT) do |server|
19
+ @server = server
20
+ end
21
+ }
22
+ Thread.pass until EM.reactor_running?
23
+ end
24
+
25
+ def stop
26
+ EM.stop
27
+ @server.stop
28
+ Thread.pass while EM.reactor_running?
29
+ end
30
+
31
+ def rewrite_env(env)
32
+ env['HTTP_HOST'] = HOST
33
+ env['SERVER_PORT'] = PORT
34
+ env[Faye::RackAdapter::HTTP_X_NO_CONTENT_LENGTH] = '1'
35
+ env
36
+ end
37
+ end
metadata ADDED
@@ -0,0 +1,441 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: face-faye
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.8.9
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - James Coglan
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-03-01 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: cookiejar
16
+ version_requirements: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: 0.3.0
21
+ none: false
22
+ requirement: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 0.3.0
27
+ none: false
28
+ prerelease: false
29
+ type: :runtime
30
+ - !ruby/object:Gem::Dependency
31
+ name: em-http-request
32
+ version_requirements: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 0.3.0
37
+ none: false
38
+ requirement: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 0.3.0
43
+ none: false
44
+ prerelease: false
45
+ type: :runtime
46
+ - !ruby/object:Gem::Dependency
47
+ name: eventmachine
48
+ version_requirements: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 0.12.0
53
+ none: false
54
+ requirement: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: 0.12.0
59
+ none: false
60
+ prerelease: false
61
+ type: :runtime
62
+ - !ruby/object:Gem::Dependency
63
+ name: faye-websocket
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 0.4.0
69
+ none: false
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 0.4.0
75
+ none: false
76
+ prerelease: false
77
+ type: :runtime
78
+ - !ruby/object:Gem::Dependency
79
+ name: rack
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: 1.0.0
85
+ none: false
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: 1.0.0
91
+ none: false
92
+ prerelease: false
93
+ type: :runtime
94
+ - !ruby/object:Gem::Dependency
95
+ name: multi_json
96
+ version_requirements: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: !binary |-
101
+ MA==
102
+ none: false
103
+ requirement: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ version: !binary |-
108
+ MA==
109
+ none: false
110
+ prerelease: false
111
+ type: :runtime
112
+ - !ruby/object:Gem::Dependency
113
+ name: compass
114
+ version_requirements: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - "~>"
117
+ - !ruby/object:Gem::Version
118
+ version: 0.10.0
119
+ none: false
120
+ requirement: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 0.10.0
125
+ none: false
126
+ prerelease: false
127
+ type: :development
128
+ - !ruby/object:Gem::Dependency
129
+ name: haml
130
+ version_requirements: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - "~>"
133
+ - !ruby/object:Gem::Version
134
+ version: 3.1.0
135
+ none: false
136
+ requirement: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - "~>"
139
+ - !ruby/object:Gem::Version
140
+ version: 3.1.0
141
+ none: false
142
+ prerelease: false
143
+ type: :development
144
+ - !ruby/object:Gem::Dependency
145
+ name: jake
146
+ version_requirements: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ version: 1.1.1
151
+ none: false
152
+ requirement: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - ">="
155
+ - !ruby/object:Gem::Version
156
+ version: 1.1.1
157
+ none: false
158
+ prerelease: false
159
+ type: :development
160
+ - !ruby/object:Gem::Dependency
161
+ name: rake
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: !binary |-
167
+ MA==
168
+ none: false
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: !binary |-
174
+ MA==
175
+ none: false
176
+ prerelease: false
177
+ type: :development
178
+ - !ruby/object:Gem::Dependency
179
+ name: rspec
180
+ version_requirements: !ruby/object:Gem::Requirement
181
+ requirements:
182
+ - - ">="
183
+ - !ruby/object:Gem::Version
184
+ version: !binary |-
185
+ MA==
186
+ none: false
187
+ requirement: !ruby/object:Gem::Requirement
188
+ requirements:
189
+ - - ">="
190
+ - !ruby/object:Gem::Version
191
+ version: !binary |-
192
+ MA==
193
+ none: false
194
+ prerelease: false
195
+ type: :development
196
+ - !ruby/object:Gem::Dependency
197
+ name: rack-proxy
198
+ version_requirements: !ruby/object:Gem::Requirement
199
+ requirements:
200
+ - - ">="
201
+ - !ruby/object:Gem::Version
202
+ version: !binary |-
203
+ MA==
204
+ none: false
205
+ requirement: !ruby/object:Gem::Requirement
206
+ requirements:
207
+ - - ">="
208
+ - !ruby/object:Gem::Version
209
+ version: !binary |-
210
+ MA==
211
+ none: false
212
+ prerelease: false
213
+ type: :development
214
+ - !ruby/object:Gem::Dependency
215
+ name: rack-test
216
+ version_requirements: !ruby/object:Gem::Requirement
217
+ requirements:
218
+ - - ">="
219
+ - !ruby/object:Gem::Version
220
+ version: !binary |-
221
+ MA==
222
+ none: false
223
+ requirement: !ruby/object:Gem::Requirement
224
+ requirements:
225
+ - - ">="
226
+ - !ruby/object:Gem::Version
227
+ version: !binary |-
228
+ MA==
229
+ none: false
230
+ prerelease: false
231
+ type: :development
232
+ - !ruby/object:Gem::Dependency
233
+ name: rainbows
234
+ version_requirements: !ruby/object:Gem::Requirement
235
+ requirements:
236
+ - - ">="
237
+ - !ruby/object:Gem::Version
238
+ version: 1.0.0
239
+ none: false
240
+ requirement: !ruby/object:Gem::Requirement
241
+ requirements:
242
+ - - ">="
243
+ - !ruby/object:Gem::Version
244
+ version: 1.0.0
245
+ none: false
246
+ prerelease: false
247
+ type: :development
248
+ - !ruby/object:Gem::Dependency
249
+ name: RedCloth
250
+ version_requirements: !ruby/object:Gem::Requirement
251
+ requirements:
252
+ - - "~>"
253
+ - !ruby/object:Gem::Version
254
+ version: 3.0.0
255
+ none: false
256
+ requirement: !ruby/object:Gem::Requirement
257
+ requirements:
258
+ - - "~>"
259
+ - !ruby/object:Gem::Version
260
+ version: 3.0.0
261
+ none: false
262
+ prerelease: false
263
+ type: :development
264
+ - !ruby/object:Gem::Dependency
265
+ name: sinatra
266
+ version_requirements: !ruby/object:Gem::Requirement
267
+ requirements:
268
+ - - ">="
269
+ - !ruby/object:Gem::Version
270
+ version: !binary |-
271
+ MA==
272
+ none: false
273
+ requirement: !ruby/object:Gem::Requirement
274
+ requirements:
275
+ - - ">="
276
+ - !ruby/object:Gem::Version
277
+ version: !binary |-
278
+ MA==
279
+ none: false
280
+ prerelease: false
281
+ type: :development
282
+ - !ruby/object:Gem::Dependency
283
+ name: staticmatic
284
+ version_requirements: !ruby/object:Gem::Requirement
285
+ requirements:
286
+ - - ">="
287
+ - !ruby/object:Gem::Version
288
+ version: !binary |-
289
+ MA==
290
+ none: false
291
+ requirement: !ruby/object:Gem::Requirement
292
+ requirements:
293
+ - - ">="
294
+ - !ruby/object:Gem::Version
295
+ version: !binary |-
296
+ MA==
297
+ none: false
298
+ prerelease: false
299
+ type: :development
300
+ - !ruby/object:Gem::Dependency
301
+ name: testswarm-client
302
+ version_requirements: !ruby/object:Gem::Requirement
303
+ requirements:
304
+ - - ">="
305
+ - !ruby/object:Gem::Version
306
+ version: !binary |-
307
+ MA==
308
+ none: false
309
+ requirement: !ruby/object:Gem::Requirement
310
+ requirements:
311
+ - - ">="
312
+ - !ruby/object:Gem::Version
313
+ version: !binary |-
314
+ MA==
315
+ none: false
316
+ prerelease: false
317
+ type: :development
318
+ - !ruby/object:Gem::Dependency
319
+ name: thin
320
+ version_requirements: !ruby/object:Gem::Requirement
321
+ requirements:
322
+ - - ">="
323
+ - !ruby/object:Gem::Version
324
+ version: 1.2.0
325
+ none: false
326
+ requirement: !ruby/object:Gem::Requirement
327
+ requirements:
328
+ - - ">="
329
+ - !ruby/object:Gem::Version
330
+ version: 1.2.0
331
+ none: false
332
+ prerelease: false
333
+ type: :development
334
+ description:
335
+ email: jcoglan@gmail.com
336
+ executables: []
337
+ extensions: []
338
+ extra_rdoc_files:
339
+ - README.rdoc
340
+ files:
341
+ - History.txt
342
+ - README.rdoc
343
+ - lib/faye-browser.js
344
+ - lib/faye-browser-min.js
345
+ - lib/faye-browser-min.js.map
346
+ - spec/browser.html
347
+ - spec/encoding_helper.rb
348
+ - spec/install.sh
349
+ - spec/node.js
350
+ - spec/phantom.js
351
+ - spec/spec_helper.rb
352
+ - spec/testswarm
353
+ - spec/thin_proxy.rb
354
+ - spec/javascript/channel_spec.js
355
+ - spec/javascript/client_spec.js
356
+ - spec/javascript/engine_spec.js
357
+ - spec/javascript/faye_spec.js
358
+ - spec/javascript/grammar_spec.js
359
+ - spec/javascript/node_adapter_spec.js
360
+ - spec/javascript/publisher_spec.js
361
+ - spec/javascript/server_spec.js
362
+ - spec/javascript/transport_spec.js
363
+ - spec/javascript/engine/memory_spec.js
364
+ - spec/javascript/server/connect_spec.js
365
+ - spec/javascript/server/disconnect_spec.js
366
+ - spec/javascript/server/extensions_spec.js
367
+ - spec/javascript/server/handshake_spec.js
368
+ - spec/javascript/server/integration_spec.js
369
+ - spec/javascript/server/publish_spec.js
370
+ - spec/javascript/server/subscribe_spec.js
371
+ - spec/javascript/server/unsubscribe_spec.js
372
+ - spec/ruby/channel_spec.rb
373
+ - spec/ruby/client_spec.rb
374
+ - spec/ruby/engine_examples.rb
375
+ - spec/ruby/faye_spec.rb
376
+ - spec/ruby/grammar_spec.rb
377
+ - spec/ruby/publisher_spec.rb
378
+ - spec/ruby/rack_adapter_spec.rb
379
+ - spec/ruby/server_spec.rb
380
+ - spec/ruby/transport_spec.rb
381
+ - spec/ruby/engine/memory_spec.rb
382
+ - spec/ruby/server/connect_spec.rb
383
+ - spec/ruby/server/disconnect_spec.rb
384
+ - spec/ruby/server/extensions_spec.rb
385
+ - spec/ruby/server/handshake_spec.rb
386
+ - spec/ruby/server/integration_spec.rb
387
+ - spec/ruby/server/publish_spec.rb
388
+ - spec/ruby/server/subscribe_spec.rb
389
+ - spec/ruby/server/unsubscribe_spec.rb
390
+ - lib/faye.rb
391
+ - lib/faye/error.rb
392
+ - lib/faye/adapters/rack_adapter.rb
393
+ - lib/faye/adapters/static_server.rb
394
+ - lib/faye/engines/connection.rb
395
+ - lib/faye/engines/memory.rb
396
+ - lib/faye/engines/proxy.rb
397
+ - lib/faye/mixins/logging.rb
398
+ - lib/faye/mixins/publisher.rb
399
+ - lib/faye/mixins/timeouts.rb
400
+ - lib/faye/protocol/channel.rb
401
+ - lib/faye/protocol/client.rb
402
+ - lib/faye/protocol/extensible.rb
403
+ - lib/faye/protocol/grammar.rb
404
+ - lib/faye/protocol/publication.rb
405
+ - lib/faye/protocol/server.rb
406
+ - lib/faye/protocol/socket.rb
407
+ - lib/faye/protocol/subscription.rb
408
+ - lib/faye/transport/http.rb
409
+ - lib/faye/transport/local.rb
410
+ - lib/faye/transport/transport.rb
411
+ - lib/faye/transport/web_socket.rb
412
+ - lib/faye/util/namespace.rb
413
+ homepage: http://faye.jcoglan.com
414
+ licenses: []
415
+ post_install_message:
416
+ rdoc_options:
417
+ - "--main"
418
+ - README.rdoc
419
+ require_paths:
420
+ - lib
421
+ required_ruby_version: !ruby/object:Gem::Requirement
422
+ requirements:
423
+ - - ">="
424
+ - !ruby/object:Gem::Version
425
+ version: !binary |-
426
+ MA==
427
+ none: false
428
+ required_rubygems_version: !ruby/object:Gem::Requirement
429
+ requirements:
430
+ - - ">="
431
+ - !ruby/object:Gem::Version
432
+ version: !binary |-
433
+ MA==
434
+ none: false
435
+ requirements: []
436
+ rubyforge_project:
437
+ rubygems_version: 1.8.24
438
+ signing_key:
439
+ specification_version: 3
440
+ summary: Simple pub/sub messaging for the web
441
+ test_files: []