Sha256: 18de94711be0ee1150c7c276d856cb95d67f1acd6c25105520cf5a13f5533f69
Contents?: true
Size: 1.21 KB
Versions: 3
Compression:
Stored size: 1.21 KB
Contents
module Rack # A Rack middleware for providing JSON-P support. # # Full credit to Flinn Mueller (http://actsasflinn.com/) for this contribution. # class JSONP def initialize(app) @app = app end # Proxies the request to the application, stripping out the JSON-P callback # method and padding the response with the appropriate callback format. # # Changes nothing if no <tt>callback</tt> param is specified. # def call(env) status, headers, response = @app.call(env) request = Rack::Request.new(env) if request.params.include?('callback') response = pad(request.params.delete('callback'), response) headers['Content-Length'] = response.length.to_s end [status, headers, [response]] end # Pads the response with the appropriate callback format according to the # JSON-P spec/requirements. # # The Rack response spec indicates that it should be enumerable. The method # of combining all of the data into a single string makes sense since JSON # is returned as a full string. # def pad(callback, response, body = "") response.each{ |s| body << s.to_s } "#{callback}(#{body})" end end end
Version data entries
3 entries across 3 versions & 3 rubygems
Version | Path |
---|---|
rack-rack-contrib-0.9.2 | lib/rack/contrib/jsonp.rb |
tricycle-rack-contrib-0.9.3 | lib/rack/contrib/jsonp.rb |
rack-contrib-0.9.2 | lib/rack/contrib/jsonp.rb |