jugglite 0.0.2.alpha → 0.0.3

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/CHANGELOG CHANGED
@@ -1,6 +1,8 @@
1
- = 0.0.3 / Not Yet Released
1
+ = 0.0.3 / 2012-11-04
2
2
 
3
- * TODO: add support for Remy's Polyfill
3
+ * support for Remy's Polyfill (which adds support for IE7+)
4
+ see https://github.com/remy/polyfills/blob/master/EventSource.js
5
+ and http://html5doctor.com/server-sent-events/
4
6
 
5
7
  = 0.0.2.alpha / 2012-11-04
6
8
 
data/lib/jugglite/app.rb CHANGED
@@ -5,7 +5,10 @@ module Jugglite
5
5
  # Let's go for plain Rack y'all
6
6
  class App
7
7
  AsyncResponse = [-1, {}, []].freeze
8
- Headers = {'Content-Type' => 'text/event-stream;charset=utf-8'}
8
+ Headers = {
9
+ 'Content-Type' => 'text/event-stream;charset=utf-8',
10
+ 'Cache-Control' => 'no-cache' # IE (through the Polyfill) will trip without this
11
+ }
9
12
 
10
13
  # Options include:
11
14
  # +path+ : the URI path to listen to ('/stream')
@@ -4,17 +4,19 @@ module Jugglite
4
4
 
5
5
  def initialize(request)
6
6
  @request = request
7
+ @longpolling = request.xhr?
7
8
  @body = DeferrableBody.new
8
9
  end
9
10
 
11
+ def longpolling?
12
+ @longpolling
13
+ end
14
+
10
15
  def write(message, options = {})
16
+ reset_timeout if longpolling?
11
17
  buffer = ""
12
- options.each do |k, v|
13
- buffer << "#{k}: #{v}\n"
14
- end
15
- message.each_line do |line|
16
- buffer << "data: #{line.strip}\n"
17
- end
18
+ options.each { |k, v| buffer << "#{k}: #{v}\n" }
19
+ message.each_line { |line| buffer << "data: #{line.strip}\n" }
18
20
  @body.write(buffer << "\n")
19
21
  end
20
22
 
@@ -38,5 +40,14 @@ module Jugglite
38
40
  def errback(&block)
39
41
  @body.errback(&block)
40
42
  end
43
+
44
+ private
45
+ def reset_timeout
46
+ # From http://html5doctor.com/server-sent-events/#using-the-polyfill
47
+ @timeout.cancel if @timeout
48
+ @timeout = EventMachine::Timer.new(0.25) do
49
+ self.close
50
+ end
51
+ end
41
52
  end
42
53
  end
@@ -1,3 +1,3 @@
1
1
  module Jugglite
2
- VERSION = "0.0.2.alpha"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -3,23 +3,23 @@ require 'net/http'
3
3
 
4
4
  # Execute a GET request for +channel+ that reads the body in chunks
5
5
  # until the +regexp+ is received or +timeout+ seconds have passed
6
- def listen_on_channel_until(channel, regexp, timeout = 5)
7
- Net::HTTP.start(@host, @port) do |http|
8
- request = Net::HTTP::Get.new("/?channel=#{@channel}")
6
+ # def listen_on_channel_until(channel, regexp, timeout = 5)
7
+ # Net::HTTP.start(@host, @port) do |http|
8
+ # request = Net::HTTP::Get.new("/?channel=#{@channel}")
9
9
 
10
- body = ""
11
- http.request(request) do |response|
12
- start_time = Time.now
13
- response.read_body do |chunk|
14
- body << chunk
15
- body.should include(": registered to channels: #{@channel}")
16
- http.finish
17
- break
18
- end
19
- break
20
- end
21
- end
22
- end
10
+ # body = ""
11
+ # http.request(request) do |response|
12
+ # start_time = Time.now
13
+ # response.read_body do |chunk|
14
+ # body << chunk
15
+ # body.should include(": registered to channels: #{@channel}")
16
+ # http.finish
17
+ # break
18
+ # end
19
+ # break
20
+ # end
21
+ # end
22
+ # end
23
23
 
24
24
  describe "Streaming and publishing" do
25
25
  before(:all) do
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jugglite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2.alpha
5
- prerelease: 6
4
+ version: 0.0.3
5
+ prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - andruby
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-04 00:00:00.000000000 Z
12
+ date: 2012-12-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thin
@@ -116,9 +116,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
116
116
  required_rubygems_version: !ruby/object:Gem::Requirement
117
117
  none: false
118
118
  requirements:
119
- - - ! '>'
119
+ - - ! '>='
120
120
  - !ruby/object:Gem::Version
121
- version: 1.3.1
121
+ version: '0'
122
122
  requirements: []
123
123
  rubyforge_project:
124
124
  rubygems_version: 1.8.23