class Sinatra::Cookies::Jar

Attributes

options[R]

Public Class Methods

new(app) click to toggle source
# File lib/sinatra/cookies.rb, line 61
def initialize(app)
  @response_string = nil
  @response_hash   = {}
  @response        = app.response
  @request         = app.request
  @deleted         = []

  @options = {
    :path => @request.script_name.to_s.empty? ? '/' : @request.script_name,
    :domain => @request.host == 'localhost' ? nil : @request.host,
    :secure   => @request.secure?,
    :httponly => true
  }

  if app.settings.respond_to? :cookie_options
    @options.merge! app.settings.cookie_options
  end
end

Public Instance Methods

==(other) click to toggle source
# File lib/sinatra/cookies.rb, line 80
def ==(other)
  other.respond_to? :to_hash and to_hash == other.to_hash
end
[](key) click to toggle source
# File lib/sinatra/cookies.rb, line 84
def [](key)
  response_cookies[key.to_s] || request_cookies[key.to_s]
end
[]=(key, value) click to toggle source
# File lib/sinatra/cookies.rb, line 88
def []=(key, value)
  @response.set_cookie key.to_s, @options.merge(:value => value)
end
Also aliased as: store
assoc(key) click to toggle source
# File lib/sinatra/cookies.rb, line 92
def assoc(key)
  to_hash.assoc(key.to_s)
end
clear() click to toggle source
# File lib/sinatra/cookies.rb, line 96
def clear
  each_key { |k| delete(k) }
end
compare_by_identity?() click to toggle source
# File lib/sinatra/cookies.rb, line 100
def compare_by_identity?
  false
end
default() click to toggle source
# File lib/sinatra/cookies.rb, line 104
def default
  nil
end
Also aliased as: default_proc
default_proc()
Alias for: default
delete(key) click to toggle source
# File lib/sinatra/cookies.rb, line 110
def delete(key)
  result = self[key]
  @response.delete_cookie(key.to_s, @options)
  result
end
delete_if() { |k, v| ... } click to toggle source
# File lib/sinatra/cookies.rb, line 116
def delete_if
  return enum_for(__method__) unless block_given?
  each { |k, v| delete(k) if yield(k, v) }
  self
end
Also aliased as: reject!
each(&block) click to toggle source
# File lib/sinatra/cookies.rb, line 122
def each(&block)
  return enum_for(__method__) unless block_given?
  to_hash.each(&block)
end
Also aliased as: each_pair
each_key(&block) click to toggle source
# File lib/sinatra/cookies.rb, line 127
def each_key(&block)
  return enum_for(__method__) unless block_given?
  to_hash.each_key(&block)
end
each_pair(&block)
Alias for: each
each_value(&block) click to toggle source
# File lib/sinatra/cookies.rb, line 134
def each_value(&block)
  return enum_for(__method__) unless block_given?
  to_hash.each_value(&block)
end
empty?() click to toggle source
# File lib/sinatra/cookies.rb, line 139
def empty?
  to_hash.empty?
end
fetch(key, &block) click to toggle source
# File lib/sinatra/cookies.rb, line 143
def fetch(key, &block)
  response_cookies.fetch(key.to_s) do
    request_cookies.fetch(key.to_s, &block)
  end
end
flatten() click to toggle source
# File lib/sinatra/cookies.rb, line 149
def flatten
  to_hash.flatten
end
has_key?(key) click to toggle source
# File lib/sinatra/cookies.rb, line 153
def has_key?(key)
  response_cookies.has_key? key.to_s or request_cookies.has_key? key.to_s
end
Also aliased as: include?, member?, key?
has_value?(value) click to toggle source
# File lib/sinatra/cookies.rb, line 157
def has_value?(value)
  response_cookies.has_value? value or request_cookies.has_value? value
end
Also aliased as: value?
hash() click to toggle source
# File lib/sinatra/cookies.rb, line 161
def hash
  to_hash.hash
end
include?(key)
Alias for: has_key?
index(value) click to toggle source
# File lib/sinatra/cookies.rb, line 168
def index(value)
  warn "Hash#index is deprecated; use Hash#key" if RUBY_VERSION > '1.9'
  key(value)
end
inspect() click to toggle source
# File lib/sinatra/cookies.rb, line 173
def inspect
  "<##{self.class}: #{to_hash.inspect[1..-2]}>"
end
invert() click to toggle source
# File lib/sinatra/cookies.rb, line 177
def invert
  to_hash.invert
end
keep_if() { |*a| ... } click to toggle source
# File lib/sinatra/cookies.rb, line 181
def keep_if
  return enum_for(__method__) unless block_given?
  delete_if { |*a| not yield(*a) }
end
Also aliased as: select!
key(value) click to toggle source
# File lib/sinatra/cookies.rb, line 186
def key(value)
  to_hash.key(value)
end
key?(key)
Alias for: has_key?
keys() click to toggle source
# File lib/sinatra/cookies.rb, line 192
def keys
  to_hash.keys
end
length() click to toggle source
# File lib/sinatra/cookies.rb, line 196
def length
  to_hash.length
end
Also aliased as: size
member?(key)
Alias for: has_key?
merge(other, &block) click to toggle source
# File lib/sinatra/cookies.rb, line 200
def merge(other, &block)
  to_hash.merge(other, &block)
end
merge!(other) { |key, self, value| ... } click to toggle source
# File lib/sinatra/cookies.rb, line 204
def merge!(other)
  other.each_pair do |key, value|
    if block_given? and include? key
      self[key] = yield(key.to_s, self[key], value)
    else
      self[key] = value
    end
  end
end
Also aliased as: update
rassoc(value) click to toggle source
# File lib/sinatra/cookies.rb, line 214
def rassoc(value)
  to_hash.rassoc(value)
end
rehash() click to toggle source
# File lib/sinatra/cookies.rb, line 218
def rehash
  response_cookies.rehash
  request_cookies.rehash
  self
end
reject(&block) click to toggle source
# File lib/sinatra/cookies.rb, line 224
def reject(&block)
  return enum_for(__method__) unless block_given?
  to_hash.reject(&block)
end
reject!()
Alias for: delete_if
replace(other) click to toggle source
# File lib/sinatra/cookies.rb, line 231
def replace(other)
  select! { |k, v| other.include?(k) or other.include?(k.to_s)  }
  merge! other
end
select(&block) click to toggle source
# File lib/sinatra/cookies.rb, line 236
def select(&block)
  return enum_for(__method__) unless block_given?
  to_hash.select(&block)
end
select!()
Alias for: keep_if
shift() click to toggle source
# File lib/sinatra/cookies.rb, line 243
def shift
  key, value = to_hash.shift
  delete(key)
  [key, value]
end
size()
Alias for: length
sort(&block) click to toggle source
# File lib/sinatra/cookies.rb, line 251
def sort(&block)
  to_hash.sort(&block)
end
store(key, value)
Alias for: []=
to_a() click to toggle source
# File lib/sinatra/cookies.rb, line 261
def to_a
  to_hash.to_a
end
to_hash() click to toggle source
# File lib/sinatra/cookies.rb, line 257
def to_hash
  request_cookies.merge(response_cookies)
end
to_s() click to toggle source
# File lib/sinatra/cookies.rb, line 265
def to_s
  to_hash.to_s
end
update(other)
Alias for: merge!
value?(value)
Alias for: has_value?
values() click to toggle source
# File lib/sinatra/cookies.rb, line 272
def values
  to_hash.values
end
values_at(*list) click to toggle source
# File lib/sinatra/cookies.rb, line 276
def values_at(*list)
  list.map { |k| self[k] }
end

Private Instance Methods

deleted() click to toggle source
# File lib/sinatra/cookies.rb, line 286
def deleted
  parse_response
  @deleted
end
parse_response() click to toggle source
# File lib/sinatra/cookies.rb, line 296
def parse_response
  string = @response['Set-Cookie']
  return if @response_string == string

  hash = {}

  string.each_line do |line|
    key, value = line.split(';', 2).first.to_s.split('=', 2)
    next if key.nil?
    key = Rack::Utils.unescape(key)
    if line =~ /expires=Thu, 01[-\s]Jan[-\s]1970/
      @deleted << key
    else
      @deleted.delete key
      hash[key] = value
    end
  end

  @response_hash.replace hash
  @response_string = string
end
request_cookies() click to toggle source
# File lib/sinatra/cookies.rb, line 318
def request_cookies
  @request.cookies.reject { |key, value| deleted.include? key }
end
response_cookies() click to toggle source
# File lib/sinatra/cookies.rb, line 291
def response_cookies
  parse_response
  @response_hash
end
warn(message) click to toggle source
Calls superclass method
# File lib/sinatra/cookies.rb, line 282
def warn(message)
  super "#{caller.first[/^[^:]:\d+:/]} warning: #{message}"
end