class Sinatra::Cookies::Jar

Attributes

options[R]

Public Class Methods

new(app) click to toggle source
# File lib/sinatra/cookies.rb, line 62
def initialize(app)
  @response_array  = 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
  }

  return unless app.settings.respond_to? :cookie_options

  @options.merge! app.settings.cookie_options
end

Public Instance Methods

==(other) click to toggle source
# File lib/sinatra/cookies.rb, line 81
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 85
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 89
def []=(key, value)
  set(key, value: value)
end
Also aliased as: store
assoc(key) click to toggle source
# File lib/sinatra/cookies.rb, line 94
def assoc(key)
  to_hash.assoc(key.to_s)
end
clear() click to toggle source
# File lib/sinatra/cookies.rb, line 99
def clear
  each_key { |k| delete(k) }
end
compare_by_identity?() click to toggle source
# File lib/sinatra/cookies.rb, line 103
def compare_by_identity?
  false
end
default() click to toggle source
# File lib/sinatra/cookies.rb, line 107
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 113
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 119
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 126
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 132
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 140
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 146
def empty?
  to_hash.empty?
end
fetch(key, &block) click to toggle source
# File lib/sinatra/cookies.rb, line 150
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 157
def flatten
  to_hash.flatten
end
has_key?(key) click to toggle source
# File lib/sinatra/cookies.rb, line 162
def has_key?(key)
  response_cookies.key? key.to_s or request_cookies.key? key.to_s
end
Also aliased as: include?, member?, key?
has_value?(value) click to toggle source
# File lib/sinatra/cookies.rb, line 166
def has_value?(value)
  response_cookies.value? value or request_cookies.value? value
end
Also aliased as: value?
hash() click to toggle source
# File lib/sinatra/cookies.rb, line 170
def hash
  to_hash.hash
end
include?(key)
Alias for: has_key?
inspect() click to toggle source
# File lib/sinatra/cookies.rb, line 177
def inspect
  "<##{self.class}: #{to_hash.inspect[1..-2]}>"
end
invert() click to toggle source
# File lib/sinatra/cookies.rb, line 182
def invert
  to_hash.invert
end
keep_if() { |*a| ... } click to toggle source
# File lib/sinatra/cookies.rb, line 187
def keep_if
  return enum_for(__method__) unless block_given?

  delete_if { |*a| !yield(*a) }
end
Also aliased as: select!
key(value) click to toggle source
# File lib/sinatra/cookies.rb, line 193
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 199
def keys
  to_hash.keys
end
length() click to toggle source
# File lib/sinatra/cookies.rb, line 203
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 207
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 211
def merge!(other)
  other.each_pair do |key, value|
    self[key] = if block_given? && include?(key)
                  yield(key.to_s, self[key], value)
                else
                  value
                end
  end
end
Also aliased as: update
rassoc(value) click to toggle source
# File lib/sinatra/cookies.rb, line 221
def rassoc(value)
  to_hash.rassoc(value)
end
rehash() click to toggle source
# File lib/sinatra/cookies.rb, line 225
def rehash
  response_cookies.rehash
  request_cookies.rehash
  self
end
reject(&block) click to toggle source
# File lib/sinatra/cookies.rb, line 231
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 239
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 244
def select(&block)
  return enum_for(__method__) unless block_given?

  to_hash.select(&block)
end
select!()
Alias for: keep_if
set(key, options = {}) click to toggle source
# File lib/sinatra/cookies.rb, line 252
def set(key, options = {})
  @response.set_cookie key.to_s, @options.merge(options)
end
shift() click to toggle source
# File lib/sinatra/cookies.rb, line 256
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 265
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 276
def to_a
  to_hash.to_a
end
to_hash() click to toggle source
# File lib/sinatra/cookies.rb, line 272
def to_hash
  request_cookies.merge(response_cookies)
end
to_s() click to toggle source
# File lib/sinatra/cookies.rb, line 280
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 287
def values
  to_hash.values
end
values_at(*list) click to toggle source
# File lib/sinatra/cookies.rb, line 291
def values_at(*list)
  list.map { |k| self[k] }
end

Private Instance Methods

deleted() click to toggle source
# File lib/sinatra/cookies.rb, line 301
def deleted
  parse_response
  @deleted
end
parse_response() click to toggle source
# File lib/sinatra/cookies.rb, line 311
def parse_response
  cookies_from_response = Array(@response['Set-Cookie'])
  return if @response_array == cookies_from_response

  hash = {}

  cookies_from_response.each 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_array = cookies_from_response
end
request_cookies() click to toggle source
# File lib/sinatra/cookies.rb, line 334
def request_cookies
  @request.cookies.reject { |key, _value| deleted.include? key }
end
response_cookies() click to toggle source
# File lib/sinatra/cookies.rb, line 306
def response_cookies
  parse_response
  @response_hash
end
warn(message) click to toggle source
Calls superclass method
# File lib/sinatra/cookies.rb, line 297
def warn(message)
  super "#{caller.first[/^[^:]:\d+:/]} warning: #{message}"
end