sockjs 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. data/LICENCE +19 -0
  2. data/README.textile +118 -0
  3. data/lib/meta-state.rb +151 -0
  4. data/lib/rack/sockjs.rb +173 -0
  5. data/lib/sockjs.rb +59 -0
  6. data/lib/sockjs/callbacks.rb +19 -0
  7. data/lib/sockjs/connection.rb +45 -0
  8. data/lib/sockjs/delayed-response-body.rb +99 -0
  9. data/lib/sockjs/duck-punch-rack-mount.rb +12 -0
  10. data/lib/sockjs/duck-punch-thin-response.rb +15 -0
  11. data/lib/sockjs/examples/protocol_conformance_test.rb +73 -0
  12. data/lib/sockjs/faye.rb +15 -0
  13. data/lib/sockjs/protocol.rb +97 -0
  14. data/lib/sockjs/servers/request.rb +136 -0
  15. data/lib/sockjs/servers/response.rb +169 -0
  16. data/lib/sockjs/session.rb +388 -0
  17. data/lib/sockjs/transport.rb +354 -0
  18. data/lib/sockjs/transports/eventsource.rb +30 -0
  19. data/lib/sockjs/transports/htmlfile.rb +69 -0
  20. data/lib/sockjs/transports/iframe.rb +68 -0
  21. data/lib/sockjs/transports/info.rb +48 -0
  22. data/lib/sockjs/transports/jsonp.rb +84 -0
  23. data/lib/sockjs/transports/websocket.rb +166 -0
  24. data/lib/sockjs/transports/welcome_screen.rb +17 -0
  25. data/lib/sockjs/transports/xhr.rb +75 -0
  26. data/lib/sockjs/version.rb +13 -0
  27. data/spec/sockjs/protocol_spec.rb +49 -0
  28. data/spec/sockjs/session_spec.rb +51 -0
  29. data/spec/sockjs/transport_spec.rb +73 -0
  30. data/spec/sockjs/transports/eventsource_spec.rb +56 -0
  31. data/spec/sockjs/transports/htmlfile_spec.rb +72 -0
  32. data/spec/sockjs/transports/iframe_spec.rb +66 -0
  33. data/spec/sockjs/transports/jsonp_spec.rb +252 -0
  34. data/spec/sockjs/transports/websocket_spec.rb +101 -0
  35. data/spec/sockjs/transports/welcome_screen_spec.rb +36 -0
  36. data/spec/sockjs/transports/xhr_spec.rb +314 -0
  37. data/spec/sockjs/version_spec.rb +18 -0
  38. data/spec/sockjs_spec.rb +8 -0
  39. data/spec/spec_helper.rb +121 -0
  40. data/spec/support/async-test.rb +42 -0
  41. metadata +171 -0
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env bundle exec rspec
2
+ # encoding: utf-8
3
+
4
+ require "spec_helper"
5
+ require "sockjs/version"
6
+
7
+ describe SockJS do
8
+ it "should define VERSION" do
9
+ constants = described_class.constants.map(&:to_sym)
10
+ constants.should include(:GEM_VERSION)
11
+ SockJS::GEM_VERSION.should be_an_instance_of(String)
12
+ end
13
+
14
+ it "should define PROTOCOL_VERSION" do
15
+ constants = described_class.constants.map(&:to_sym)
16
+ constants.should include(:PROTOCOL_VERSION)
17
+ end
18
+ end
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bundle exec rspec
2
+ # encoding: utf-8
3
+
4
+ require "spec_helper"
5
+ require "sockjs"
6
+
7
+ describe SockJS do
8
+ end
@@ -0,0 +1,121 @@
1
+ # encoding: utf-8
2
+
3
+ require 'support/async-test.rb'
4
+ require 'support/shared-contexts'
5
+ require 'stringio'
6
+ require 'thin'
7
+ require 'sockjs'
8
+ require 'sockjs/servers/request'
9
+ require 'sockjs/servers/response'
10
+ require 'sockjs/session'
11
+
12
+ require 'sockjs/examples/protocol_conformance_test'
13
+ require 'sockjs/version'
14
+
15
+ module TransportSpecMacros
16
+ def transport_handler_eql(path, method)
17
+ describe SockJS::Transport do
18
+ describe "transports[#{path}]" do
19
+ let :route_set do
20
+ mock("Route Set")
21
+ end
22
+
23
+ let :connection do
24
+ mock("Connection")
25
+ end
26
+
27
+ let :options do
28
+ {}
29
+ end
30
+
31
+ let :path_matcher do
32
+
33
+ end
34
+
35
+ it "should have a #{described_class} at #{method}" do
36
+ route_set.should_receive(:add_route).with(instance_of(described_class), hash_including(:path_info, :request_method => method), {})
37
+ described_class.add_route(route_set, connection, options)
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+
44
+ class FakeRequest < SockJS::Request
45
+ attr_reader :chunks
46
+ attr_writer :data
47
+ attr_accessor :path_info, :query_string, :if_none_match, :content_type
48
+
49
+ def initialize(env = Hash.new)
50
+ self.env.merge!(env)
51
+ @query_string = {}
52
+ @chunks = []
53
+ end
54
+
55
+ def session_key=(value)
56
+ @env['rack.routing_args'] ||= {}
57
+ @env['rack.routing_args'][:session_key] = value
58
+ end
59
+
60
+ def env
61
+ @env ||= {
62
+ "async.callback" => Proc.new do |status, headers, body|
63
+ # This is so we can test it.
64
+ # Block passed to body.each will be used
65
+ # as the @body_callback in DelayedResponseBody.
66
+ body.each do |chunk|
67
+ next if chunk == "0\r\n\r\n"
68
+ @chunks << chunk.split("\r\n").last
69
+ end
70
+ end,
71
+
72
+ "async.close" => EventMachine::DefaultDeferrable.new
73
+ }
74
+ end
75
+
76
+ def session_id
77
+ "session-id"
78
+ end
79
+
80
+ def origin
81
+ "*"
82
+ end
83
+
84
+ def fresh?(etag)
85
+ @if_none_match == etag
86
+ end
87
+
88
+ def data
89
+ StringIO.new(@data || "")
90
+ end
91
+ end
92
+
93
+ class FakeSession < SockJS::Session
94
+ def set_timer
95
+ end
96
+
97
+ def reset_timer
98
+ end
99
+ end
100
+
101
+ class SockJS::Response
102
+ def chunks
103
+ @request.chunks
104
+ end
105
+ end
106
+
107
+ RSpec.configure do |config|
108
+ config.backtrace_clean_patterns.delete(/gems/)
109
+ config.extend(TransportSpecMacros)
110
+ config.before do
111
+ class SockJS::Transport
112
+ def session_class
113
+ FakeSession
114
+ end
115
+ end
116
+ end
117
+
118
+ config.after do
119
+ SockJS::no_debug!
120
+ end
121
+ end
@@ -0,0 +1,42 @@
1
+ require 'thin'
2
+ require 'eventmachine'
3
+
4
+ module Thin
5
+ module Async
6
+ class Test
7
+ VERSION = '1.0.0'
8
+
9
+ class Callback
10
+ attr_reader :status, :headers, :body
11
+
12
+ def call args
13
+ @status, @headers, deferred_body = args
14
+ @body = ""
15
+ deferred_body.each {|s| @body << s }
16
+
17
+ deferred_body.callback { EM.stop }
18
+ end
19
+ end
20
+
21
+ def initialize(app, options={})
22
+ @app = app
23
+ end
24
+
25
+ def call(env)
26
+ callback = Callback.new
27
+ env.merge! 'async.callback' => callback
28
+
29
+ result = @app.call(env)
30
+
31
+ unless result.first == -1
32
+ EM.next_tick do
33
+ EM.stop
34
+ return result
35
+ end
36
+ end
37
+
38
+ [callback.status, callback.headers, callback.body]
39
+ end
40
+ end
41
+ end
42
+ end
metadata ADDED
@@ -0,0 +1,171 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sockjs
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Judson Lester
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-12-16 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rack
16
+ requirement: &76745750 !ruby/object:Gem::Requirement
17
+ none: true
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *76745750
25
+ - !ruby/object:Gem::Dependency
26
+ name: thin
27
+ requirement: &76744510 !ruby/object:Gem::Requirement
28
+ none: true
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *76744510
36
+ - !ruby/object:Gem::Dependency
37
+ name: json
38
+ requirement: &76743770 !ruby/object:Gem::Requirement
39
+ none: true
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *76743770
47
+ - !ruby/object:Gem::Dependency
48
+ name: faye-websocket
49
+ requirement: &76742940 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 0.4.3
55
+ segments:
56
+ - 0
57
+ - 4
58
+ - 3
59
+ type: :runtime
60
+ prerelease: false
61
+ version_requirements: *76742940
62
+ - !ruby/object:Gem::Dependency
63
+ name: regin
64
+ requirement: &76741840 !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 0.3.8
70
+ segments:
71
+ - 0
72
+ - 3
73
+ - 8
74
+ type: :runtime
75
+ prerelease: false
76
+ version_requirements: *76741840
77
+ - !ruby/object:Gem::Dependency
78
+ name: rack-mount
79
+ requirement: &76761770 !ruby/object:Gem::Requirement
80
+ none: false
81
+ requirements:
82
+ - - ~>
83
+ - !ruby/object:Gem::Version
84
+ version: 0.8.3
85
+ segments:
86
+ - 0
87
+ - 8
88
+ - 3
89
+ type: :runtime
90
+ prerelease: false
91
+ version_requirements: *76761770
92
+ description: ! ' SockJS is a WebSocket emulation library. It means that you use
93
+ the WebSocket API, only instead of WebSocket class you instantiate SockJS class.
94
+ In absence of WebSocket, some of the fallback transports will be used. This code
95
+ is compatible with SockJS protocol 0.2.1.
96
+
97
+ '
98
+ email: nyarly@gmail.com
99
+ executables: []
100
+ extensions: []
101
+ extra_rdoc_files:
102
+ - README.textile
103
+ files:
104
+ - LICENCE
105
+ - README.textile
106
+ - lib/meta-state.rb
107
+ - lib/rack/sockjs.rb
108
+ - lib/sockjs.rb
109
+ - lib/sockjs/delayed-response-body.rb
110
+ - lib/sockjs/duck-punch-rack-mount.rb
111
+ - lib/sockjs/duck-punch-thin-response.rb
112
+ - lib/sockjs/callbacks.rb
113
+ - lib/sockjs/connection.rb
114
+ - lib/sockjs/examples/protocol_conformance_test.rb
115
+ - lib/sockjs/faye.rb
116
+ - lib/sockjs/protocol.rb
117
+ - lib/sockjs/servers/request.rb
118
+ - lib/sockjs/servers/response.rb
119
+ - lib/sockjs/session.rb
120
+ - lib/sockjs/transport.rb
121
+ - lib/sockjs/transports/eventsource.rb
122
+ - lib/sockjs/transports/htmlfile.rb
123
+ - lib/sockjs/transports/iframe.rb
124
+ - lib/sockjs/transports/info.rb
125
+ - lib/sockjs/transports/jsonp.rb
126
+ - lib/sockjs/transports/websocket.rb
127
+ - lib/sockjs/transports/welcome_screen.rb
128
+ - lib/sockjs/transports/xhr.rb
129
+ - lib/sockjs/version.rb
130
+ - spec/sockjs/protocol_spec.rb
131
+ - spec/sockjs/session_spec.rb
132
+ - spec/sockjs/transport_spec.rb
133
+ - spec/sockjs/transports/eventsource_spec.rb
134
+ - spec/sockjs/transports/htmlfile_spec.rb
135
+ - spec/sockjs/transports/iframe_spec.rb
136
+ - spec/sockjs/transports/jsonp_spec.rb
137
+ - spec/sockjs/transports/websocket_spec.rb
138
+ - spec/sockjs/transports/welcome_screen_spec.rb
139
+ - spec/sockjs/transports/xhr_spec.rb
140
+ - spec/sockjs/version_spec.rb
141
+ - spec/sockjs_spec.rb
142
+ - spec/spec_helper.rb
143
+ - spec/support/async-test.rb
144
+ homepage: https://github.com/nyarly/sockjs-ruby
145
+ licenses: []
146
+ post_install_message:
147
+ rdoc_options: []
148
+ require_paths:
149
+ - lib
150
+ required_ruby_version: !ruby/object:Gem::Requirement
151
+ none: false
152
+ requirements:
153
+ - - ~>
154
+ - !ruby/object:Gem::Version
155
+ version: '1.9'
156
+ required_rubygems_version: !ruby/object:Gem::Requirement
157
+ none: false
158
+ requirements:
159
+ - - ! '>='
160
+ - !ruby/object:Gem::Version
161
+ version: '0'
162
+ segments:
163
+ - 0
164
+ hash: -1068506783
165
+ requirements: []
166
+ rubyforge_project: sockjs
167
+ rubygems_version: 1.8.15
168
+ signing_key:
169
+ specification_version: 3
170
+ summary: Ruby server for SockJS
171
+ test_files: []