Sha256: e74d338379972315d32d4076edd34a3593ab1ebd299cd42fb177ace7c7858829

Contents?: true

Size: 1.2 KB

Versions: 12

Compression:

Stored size: 1.2 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

12 entries across 12 versions & 5 rubygems

Version Path
rack-contrib-1.0.0 lib/rack/contrib/jsonp.rb
devver-rack-contrib-0.9.7 lib/rack/contrib/jsonp.rb
devver-rack-contrib-0.9.6 lib/rack/contrib/jsonp.rb
devver-rack-contrib-0.9.5 lib/rack/contrib/jsonp.rb
devver-rack-contrib-0.9.4 lib/rack/contrib/jsonp.rb
devver-rack-contrib-0.9.3 lib/rack/contrib/jsonp.rb
rack-contrib_stringbot-0.9.3 lib/rack/contrib/jsonp.rb
tricycle-rack-contrib-0.9.7 lib/rack/contrib/jsonp.rb
tricycle-rack-contrib-0.9.6 lib/rack/contrib/jsonp.rb
tricycle-rack-contrib-0.9.5 lib/rack/contrib/jsonp.rb
tricycle-rack-contrib-0.9.0 lib/rack/contrib/jsonp.rb
rack-contrib-with-working-jsonp-0.9.2.1 lib/rack/contrib/jsonp.rb