class Rack::Corsair

Constants

VERSION

Public Class Methods

new(app, &block) click to toggle source
# File lib/corsair.rb, line 3
def initialize(app, &block)
  @app = app
  @origin = "*"
  @resources = []
  block.call(self) if block_given?
end

Public Instance Methods

allow_origin(origin) click to toggle source
# File lib/corsair.rb, line 21
def allow_origin(origin)
  @origin = origin
end
allow_resource(resource) click to toggle source
# File lib/corsair.rb, line 25
def allow_resource(resource)
  @resources << resource.to_s
end
call(env) click to toggle source
# File lib/corsair.rb, line 10
def call(env)
  req = Rack::Request.new(env)
  status, headers, response = @app.call(env)

  if resource_allowed?(req)
    [status, headers.merge(cors_headers), response]
  else
    [status, headers, response]
  end
end

Private Instance Methods

cors_headers() click to toggle source
# File lib/corsair.rb, line 37
def cors_headers
  {
    "Access-Control-Allow-Origin" => @origin
  }
end
resource_allowed?(req) click to toggle source
# File lib/corsair.rb, line 31
def resource_allowed?(req)
  return true if @resources.empty?
  resource = req.env["PATH_INFO"].split("/")[1]
  @resources.include?(resource)
end