class Rack::JSONP::Callback
Public Class Methods
new(app, callback_param = 'callback')
click to toggle source
# File lib/rack/jsonp/callback.rb, line 4 def initialize(app, callback_param = 'callback') @app = app @callback_param = callback_param end
Public Instance Methods
call(env)
click to toggle source
# File lib/rack/jsonp/callback.rb, line 9 def call(env) request = Rack::Request.new(env) callback = request.params[@callback_param] if callback env['jsonp.utils.callback'] = callback status, headers, response = @app.call(env) if headers['Content-Type'].to_s.start_with?('application/json') response = pad(callback, response) headers['Content-Length'] = response.first.bytesize.to_s headers['Content-Type'] = 'application/javascript' [200, headers, response] else [status, headers, response] end else @app.call(env) end end
Private Instance Methods
pad(callback, response)
click to toggle source
# File lib/rack/jsonp/callback.rb, line 36 def pad(callback, response) body = '' response.each do |s| body << s.to_s.gsub("\u2028", '\u2028').gsub("\u2029", '\u2029') end response.close if response.respond_to?(:close) ["/**/#{callback}(#{body})"] end