face-faye 0.8.9

Sign up to get free protection for your applications and to get access to all the features.
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: []