Sha256: 431ebdd7c2bf681db9aa60e4c0c0ef5f6d60bdcca07023cdacec11b64efd779c

Contents?: true

Size: 1.08 KB

Versions: 31

Compression:

Stored size: 1.08 KB

Contents

module Rack
  class Cookies
    class CookieJar < Hash
      def initialize(cookies)
        @set_cookies = {}
        @delete_cookies = {}
        super()
        update(cookies)
      end

      def [](name)
        super(name.to_s)
      end

      def []=(key, options)
        unless options.is_a?(Hash)
          options = { :value => options }
        end

        options[:path] ||= '/'
        @set_cookies[key] = options
        super(key.to_s, options[:value])
      end

      def delete(key, options = {})
        options[:path] ||= '/'
        @delete_cookies[key] = options
        super(key.to_s)
      end

      def finish!(resp)
        @set_cookies.each { |k, v| resp.set_cookie(k, v) }
        @delete_cookies.each { |k, v| resp.delete_cookie(k, v) }
      end
    end

    def initialize(app)
      @app = app
    end

    def call(env)
      req = Request.new(env)
      env['rack.cookies'] = cookies = CookieJar.new(req.cookies)
      status, headers, body = @app.call(env)
      resp = Response.new(body, status, headers)
      cookies.finish!(resp)
      resp.to_a
    end
  end
end

Version data entries

31 entries across 31 versions & 7 rubygems

Version Path
rack-contrib-2.2.0 lib/rack/contrib/cookies.rb
rack-contrib-2.1.0 lib/rack/contrib/cookies.rb
rack-contrib-2.0.1 lib/rack/contrib/cookies.rb
rack-contrib-2.0.0 lib/rack/contrib/cookies.rb
rack-contrib-1.8.0 lib/rack/contrib/cookies.rb
rack-contrib-1.7.0 lib/rack/contrib/cookies.rb
rack-contrib-1.6.0 lib/rack/contrib/cookies.rb
rack-contrib-1.5.0 lib/rack/contrib/cookies.rb
rack-contrib-1.4.0 lib/rack/contrib/cookies.rb
rack-contrib-1.3.0 lib/rack/contrib/cookies.rb
rack-contrib-1.2.0.39.g17d21b4 lib/rack/contrib/cookies.rb
rack-contrib-1.2.0 lib/rack/contrib/cookies.rb
rack-contrib-1.1.0 lib/rack/contrib/cookies.rb
corntrace-rack-contrib-1.0.2.3 lib/rack/contrib/cookies.rb
corntrace-rack-contrib-1.0.2.2 lib/rack/contrib/cookies.rb
corntrace-rack-contrib-1.0.2.1 lib/rack/contrib/cookies.rb
corntrace-rack-contrib-1.0.2 lib/rack/contrib/cookies.rb
rack-contrib-1.0.1 lib/rack/contrib/cookies.rb
rack-contrib-1.0.0 lib/rack/contrib/cookies.rb
devver-rack-contrib-0.9.7 lib/rack/contrib/cookies.rb