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'}
- 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
- #call(env) ⇒ Object
- #close ⇒ Object
- #get_client ⇒ Object
-
#initialize(app = nil, options = nil) ⇒ RackAdapter
constructor
A new instance of RackAdapter.
- #listen(*args) ⇒ Object
- #remove_extension(extension) ⇒ Object
Constructor Details
#initialize(app = nil, options = nil) ⇒ RackAdapter
Returns a new instance of RackAdapter.
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/faye/adapters/rack_adapter.rb', line 23 def initialize(app = nil, = nil) @app = app if app.respond_to?(:call) @options = [app, ].grep(Hash).first || {} @endpoint = @options[:mount] || DEFAULT_ENDPOINT @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) return unless extensions = @options[:extensions] [*extensions].each { |extension| add_extension(extension) } end |
Instance Method Details
#add_extension(extension) ⇒ Object
43 44 45 |
# File 'lib/faye/adapters/rack_adapter.rb', line 43 def add_extension(extension) @server.add_extension(extension) end |
#call(env) ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/faye/adapters/rack_adapter.rb', line 59 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
51 52 53 |
# File 'lib/faye/adapters/rack_adapter.rb', line 51 def close @server.close end |
#get_client ⇒ Object
55 56 57 |
# File 'lib/faye/adapters/rack_adapter.rb', line 55 def get_client @client ||= Client.new(@server) end |
#listen(*args) ⇒ Object
39 40 41 |
# File 'lib/faye/adapters/rack_adapter.rb', line 39 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
47 48 49 |
# File 'lib/faye/adapters/rack_adapter.rb', line 47 def remove_extension(extension) @server.remove_extension(extension) end |