firehose 0.0.5 → 0.0.6

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.
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