firehose 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,5 +1,4 @@
1
1
  source "http://rubygems.org"
2
2
 
3
- gem 'goliath', :git => 'git://github.com/postrank-labs/goliath.git'
4
3
  # Specify your gem's dependencies in firehose.gemspec
5
4
  gemspec
@@ -19,7 +19,6 @@ Gem::Specification.new do |s|
19
19
  s.require_paths = ["lib"]
20
20
 
21
21
  # specify any dependencies here; for example:
22
- # s.add_runtime_dependency "goliath", "=> 0.9.4"
23
22
  s.add_runtime_dependency "eventmachine", ">= 1.0.0.beta"
24
23
  s.add_runtime_dependency "amqp", ">= 0.9.4"
25
24
  s.add_runtime_dependency "thin"
@@ -30,7 +29,6 @@ Gem::Specification.new do |s|
30
29
  s.add_development_dependency "rack-test"
31
30
  s.add_development_dependency "guard-rspec"
32
31
  s.add_development_dependency "guard-bundler"
33
- s.add_development_dependency "thin"
34
32
  # em-http dropped support for WS as of version 1.0+ (https://github.com/igrigorik/em-http-request/issues/164)
35
33
  s.add_development_dependency "em-http-request", "~> 0.3.0"
36
34
  s.add_development_dependency "guard-coffeescript"
@@ -5,7 +5,6 @@ require 'amqp'
5
5
  module Firehose
6
6
  autoload :Subscription, 'firehose/subscription'
7
7
  autoload :Publisher, 'firehose/publisher'
8
- autoload :Goliath, 'firehose/goliath'
9
8
  autoload :Rack, 'firehose/rack'
10
9
  autoload :CLI, 'firehose/cli'
11
10
 
@@ -1,4 +1,4 @@
1
1
  module Firehose
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  CODENAME = "Trickle"
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: firehose
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -14,7 +14,7 @@ date: 2012-04-16 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: eventmachine
17
- requirement: &70096762306280 !ruby/object:Gem::Requirement
17
+ requirement: &70252551384180 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: 1.0.0.beta
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70096762306280
25
+ version_requirements: *70252551384180
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: amqp
28
- requirement: &70096762305560 !ruby/object:Gem::Requirement
28
+ requirement: &70252551383460 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: 0.9.4
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *70096762305560
36
+ version_requirements: *70252551383460
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: thin
39
- requirement: &70096762305160 !ruby/object:Gem::Requirement
39
+ requirement: &70252551382280 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: '0'
45
45
  type: :runtime
46
46
  prerelease: false
47
- version_requirements: *70096762305160
47
+ version_requirements: *70252551382280
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: thor
50
- requirement: &70096762304600 !ruby/object:Gem::Requirement
50
+ requirement: &70252551381540 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: '0'
56
56
  type: :runtime
57
57
  prerelease: false
58
- version_requirements: *70096762304600
58
+ version_requirements: *70252551381540
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: websocket-rack
61
- requirement: &70096762304060 !ruby/object:Gem::Requirement
61
+ requirement: &70252551380900 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ! '>='
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: '0'
67
67
  type: :runtime
68
68
  prerelease: false
69
- version_requirements: *70096762304060
69
+ version_requirements: *70252551380900
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: rspec
72
- requirement: &70096762294340 !ruby/object:Gem::Requirement
72
+ requirement: &70252551379840 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ! '>='
@@ -77,10 +77,10 @@ dependencies:
77
77
  version: '0'
78
78
  type: :development
79
79
  prerelease: false
80
- version_requirements: *70096762294340
80
+ version_requirements: *70252551379840
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: rack-test
83
- requirement: &70096762293700 !ruby/object:Gem::Requirement
83
+ requirement: &70252551378580 !ruby/object:Gem::Requirement
84
84
  none: false
85
85
  requirements:
86
86
  - - ! '>='
@@ -88,10 +88,10 @@ dependencies:
88
88
  version: '0'
89
89
  type: :development
90
90
  prerelease: false
91
- version_requirements: *70096762293700
91
+ version_requirements: *70252551378580
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: guard-rspec
94
- requirement: &70096762292860 !ruby/object:Gem::Requirement
94
+ requirement: &70252551377980 !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements:
97
97
  - - ! '>='
@@ -99,10 +99,10 @@ dependencies:
99
99
  version: '0'
100
100
  type: :development
101
101
  prerelease: false
102
- version_requirements: *70096762292860
102
+ version_requirements: *70252551377980
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: guard-bundler
105
- requirement: &70096762291880 !ruby/object:Gem::Requirement
105
+ requirement: &70252551377360 !ruby/object:Gem::Requirement
106
106
  none: false
107
107
  requirements:
108
108
  - - ! '>='
@@ -110,21 +110,10 @@ dependencies:
110
110
  version: '0'
111
111
  type: :development
112
112
  prerelease: false
113
- version_requirements: *70096762291880
114
- - !ruby/object:Gem::Dependency
115
- name: thin
116
- requirement: &70096762290940 !ruby/object:Gem::Requirement
117
- none: false
118
- requirements:
119
- - - ! '>='
120
- - !ruby/object:Gem::Version
121
- version: '0'
122
- type: :development
123
- prerelease: false
124
- version_requirements: *70096762290940
113
+ version_requirements: *70252551377360
125
114
  - !ruby/object:Gem::Dependency
126
115
  name: em-http-request
127
- requirement: &70096762289780 !ruby/object:Gem::Requirement
116
+ requirement: &70252551376760 !ruby/object:Gem::Requirement
128
117
  none: false
129
118
  requirements:
130
119
  - - ~>
@@ -132,10 +121,10 @@ dependencies:
132
121
  version: 0.3.0
133
122
  type: :development
134
123
  prerelease: false
135
- version_requirements: *70096762289780
124
+ version_requirements: *70252551376760
136
125
  - !ruby/object:Gem::Dependency
137
126
  name: guard-coffeescript
138
- requirement: &70096762288920 !ruby/object:Gem::Requirement
127
+ requirement: &70252551376320 !ruby/object:Gem::Requirement
139
128
  none: false
140
129
  requirements:
141
130
  - - ! '>='
@@ -143,7 +132,7 @@ dependencies:
143
132
  version: '0'
144
133
  type: :development
145
134
  prerelease: false
146
- version_requirements: *70096762288920
135
+ version_requirements: *70252551376320
147
136
  description: Firehose is a realtime web application toolkit for building realtime
148
137
  Ruby web applications.
149
138
  email:
@@ -175,7 +164,6 @@ files:
175
164
  - lib/assets/javascripts/firehose/web_socket.js.coffee
176
165
  - lib/firehose.rb
177
166
  - lib/firehose/cli.rb
178
- - lib/firehose/goliath.rb
179
167
  - lib/firehose/http_publisher.rb
180
168
  - lib/firehose/publisher.rb
181
169
  - lib/firehose/rack.rb
@@ -183,7 +171,6 @@ files:
183
171
  - lib/firehose/thin.rb
184
172
  - lib/firehose/version.rb
185
173
  - spec/integrations/amqp_resources_spec.rb
186
- - spec/integrations/goliath_spec.rb
187
174
  - spec/integrations/thin_spec.rb
188
175
  - spec/spec_helper.rb
189
176
  homepage: http://github.com/polleverywhere/firehose
@@ -212,6 +199,5 @@ specification_version: 3
212
199
  summary: Build realtime Ruby web applications
213
200
  test_files:
214
201
  - spec/integrations/amqp_resources_spec.rb
215
- - spec/integrations/goliath_spec.rb
216
202
  - spec/integrations/thin_spec.rb
217
203
  - spec/spec_helper.rb
@@ -1,69 +0,0 @@
1
- require 'goliath'
2
- require 'goliath/websocket'
3
-
4
- module Firehose
5
- module Goliath
6
- class WebSocket < ::Goliath::WebSocket
7
- use ::Goliath::Rack::Params
8
-
9
- def on_open(env)
10
- # TODO Fix the Firehose::App app to not need '/ws' in front of the socket.
11
- path = env['REQUEST_PATH'].gsub(/^\/ws/, '') # Name of the queue in AMQP we'll be pulling from.
12
- cid = params[:cid]
13
-
14
- @subscription = Firehose::Subscription.new(cid)
15
- @subscription.subscribe path do |payload|
16
- env.stream_send(payload)
17
- end
18
- end
19
-
20
- def on_close(env)
21
- @subscription.unsubscribe if @subscription
22
- end
23
- end
24
-
25
- class LongPolling < ::Goliath::API
26
- use ::Goliath::Rack::Params
27
-
28
- def response(env)
29
- method = env['REQUEST_METHOD'] # We use this to figure out if we're producing or consuming.
30
- path = env['REQUEST_PATH'] # Name of the queue in AMQP we'll be pulling from.
31
- cid = params[:cid]
32
-
33
- case method
34
- # GET is how clients subscribe to the queue. When a messages comes in, we flush out a response,
35
- # close down the requeust, and the client then reconnects.
36
- when 'GET'
37
- subscription = Firehose::Subscription.new(cid)
38
- subscription.subscribe path do |payload|
39
- subscription.unsubscribe
40
- env.chunked_stream_send(payload)
41
- env.chunked_stream_close
42
- end
43
- chunked_streaming_response(200, 'Content-Type' => 'text/plain')
44
- # PUT is how we throw messages on to the fan-out queue.
45
- when 'PUT'
46
- body = env['rack.input'].read
47
- p [:put, path, body]
48
- Firehose::Publisher.new.publish(path, body)
49
-
50
- [202, {}, []]
51
- else
52
- [501, {}, ["#{method} not supported."]]
53
- end
54
- end
55
-
56
- private
57
- def self.connection
58
- @connection ||= AMQP.connect
59
- end
60
- end
61
-
62
- class App < ::Goliath::API
63
- # TODO Figure out how to route this on schema (ws) or HTTP_UGPRADE header... it
64
- # all uses HTTP router under the covers, so it should be doable.
65
- map '/ws/*', WebSocket
66
- map '/*', LongPolling
67
- end
68
- end
69
- end
@@ -1,55 +0,0 @@
1
- require 'spec_helper'
2
- require 'goliath'
3
- require 'em-http'
4
-
5
- describe Firehose::Goliath do
6
- let(:app) { Firehose::Goliath::App.new }
7
- let(:messages) { (1..1000).map(&:to_s) }
8
- let(:channel) { "/firehose/integration/#{Time.now.to_i}" }
9
- let(:uri) { URI.parse('http://127.0.0.1:9876') }
10
- let(:url) { "#{uri}#{channel}" }
11
- let(:cid) { "client-#{Time.now.to_i}" }
12
-
13
- it "should pub-sub" do
14
- outgoing, received = messages.dup, []
15
-
16
- Goliath.env = :production
17
- server = Goliath::Server.new
18
- server.address = uri.host
19
- server.port = uri.port
20
- server.api = app
21
- server.app = Goliath::Rack::Builder.build(Firehose::Goliath::App, server.api)
22
- server.logger = Log4r::Logger.new('goliath')
23
-
24
- server.start do
25
- EM.add_timer(30) { EM.stop } # Stop the server no matter what happens.
26
-
27
- publish = Proc.new do
28
- http = EM::HttpRequest.new(url).put(:body => outgoing.pop)
29
- http.errback { EM.stop }
30
- http.callback { publish.call unless outgoing.empty? }
31
- end
32
-
33
- subscribe = Proc.new do
34
- http = EM::HttpRequest.new(url).get(:query => {'cid' => cid})
35
- http.errback { EM.stop }
36
- http.callback do
37
- received << http.response
38
- if received.size < messages.size
39
- subscribe.call
40
- else
41
- EM.stop
42
- end
43
- end
44
- end
45
-
46
- # Start the subscriber.
47
- subscribe.call
48
-
49
- # Wait a sec to let our subscribe setup.
50
- EM.add_timer(1){ publish.call }
51
- end
52
-
53
- received.should =~ messages
54
- end
55
- end