Class: Faye::RackAdapter
- Inherits:
-
Object
- Object
- Faye::RackAdapter
- Extended by:
- Forwardable
- Includes:
- Logging
- Defined in:
- lib/faye/adapters/rack_adapter.rb
Constant Summary collapse
- ASYNC_RESPONSE =
[-1, {}, []].freeze
- DEFAULT_ENDPOINT =
'/bayeux'
- SCRIPT_PATH =
'faye-browser-min.js'
- TYPE_JSON =
{'Content-Type' => 'application/json; charset=utf-8'}
- TYPE_SCRIPT =
{'Content-Type' => 'text/javascript; charset=utf-8'}
- TYPE_TEXT =
{'Content-Type' => 'text/plain; charset=utf-8'}
- VALID_JSONP_CALLBACK =
/^[a-z_\$][a-z0-9_\$]*(\.[a-z_\$][a-z0-9_\$]*)*$/i
- HTTP_X_NO_CONTENT_LENGTH =
This header is passed by Rack::Proxy during testing. Rack::Proxy seems to set content-length for you, and setting it in here really slows the tests down. Better suggestions welcome.
'HTTP_X_NO_CONTENT_LENGTH'
Constants included from Logging
Instance Method Summary collapse
- #add_extension(extension) ⇒ Object
- #add_websocket_extension(extension) ⇒ Object
- #call(env) ⇒ Object
- #close ⇒ Object
- #get_client ⇒ Object
-
#initialize(app = nil, options = nil, &block) ⇒ RackAdapter
constructor
A new instance of RackAdapter.
- #listen(*args) ⇒ Object
- #remove_extension(extension) ⇒ Object
Constructor Details
#initialize(app = nil, options = nil, &block) ⇒ RackAdapter
Returns a new instance of RackAdapter.
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/faye/adapters/rack_adapter.rb', line 25 def initialize(app = nil, = nil, &block) @app = app if app.respond_to?(:call) @options = [app, ].grep(Hash).first || {} ::WebSocket::Driver.(@options, [:engine, :mount, :ping, :timeout, :extensions, :websocket_extensions]) @endpoint = @options[:mount] || DEFAULT_ENDPOINT @extensions = [] @endpoint_re = Regexp.new('^' + @endpoint.gsub(/\/$/, '') + '(/[^/]*)*(\\.[^\\.]+)?$') @server = Server.new(@options) @static = StaticServer.new(ROOT, /\.(?:js|map)$/) @static.map(File.basename(@endpoint) + '.js', SCRIPT_PATH) @static.map('client.js', SCRIPT_PATH) if extensions = @options[:extensions] [*extensions].each { |extension| add_extension(extension) } end if websocket_extensions = @options[:websocket_extensions] [*websocket_extensions].each { |ext| add_websocket_extension(ext) } end block.call(self) if block end |
Instance Method Details
#add_extension(extension) ⇒ Object
55 56 57 |
# File 'lib/faye/adapters/rack_adapter.rb', line 55 def add_extension(extension) @server.add_extension(extension) end |
#add_websocket_extension(extension) ⇒ Object
63 64 65 |
# File 'lib/faye/adapters/rack_adapter.rb', line 63 def add_websocket_extension(extension) @extensions << extension end |
#call(env) ⇒ Object
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/faye/adapters/rack_adapter.rb', line 75 def call(env) Faye.ensure_reactor_running! request = Rack::Request.new(env) unless request.path_info =~ @endpoint_re env['faye.client'] = get_client return @app ? @app.call(env) : [404, TYPE_TEXT, ["Sure you're not looking for #{@endpoint} ?"]] end return @static.call(env) if @static =~ request.path_info # http://groups.google.com/group/faye-users/browse_thread/thread/4a01bb7d25d3636a if env['REQUEST_METHOD'] == 'OPTIONS' or env['HTTP_ACCESS_CONTROL_REQUEST_METHOD'] == 'POST' return end return handle_websocket(request) if Faye::WebSocket.websocket?(env) return handle_eventsource(request) if Faye::EventSource.eventsource?(env) handle_request(request) end |
#close ⇒ Object
67 68 69 |
# File 'lib/faye/adapters/rack_adapter.rb', line 67 def close @server.close end |
#get_client ⇒ Object
71 72 73 |
# File 'lib/faye/adapters/rack_adapter.rb', line 71 def get_client @client ||= Client.new(@server) end |
#listen(*args) ⇒ Object
51 52 53 |
# File 'lib/faye/adapters/rack_adapter.rb', line 51 def listen(*args) raise 'The listen() method is deprecated - see https://github.com/faye/faye-websocket-ruby#running-your-socket-application for information on running your Faye server' end |
#remove_extension(extension) ⇒ Object
59 60 61 |
# File 'lib/faye/adapters/rack_adapter.rb', line 59 def remove_extension(extension) @server.remove_extension(extension) end |