class Sinatra::Cookies::Jar

Attributes

options[R]

Public Class Methods

new(app) click to toggle source
# File lib/j1_app/sinatra/extras/cookies.rb, line 10
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/j1_app/sinatra/extras/cookies.rb, line 29
def ==(other)
  other.respond_to? :to_hash and to_hash == other.to_hash
end
[](key) click to toggle source
# File lib/j1_app/sinatra/extras/cookies.rb, line 33
def [](key)
  response_cookies[key.to_s] || request_cookies[key.to_s]
end
[]=(key, value) click to toggle source
# File lib/j1_app/sinatra/extras/cookies.rb, line 37
def []=(key, value)
  set(key, value: value)
end
Also aliased as: store
assoc(key) click to toggle source
# File lib/j1_app/sinatra/extras/cookies.rb, line 41
def assoc(key)
  to_hash.assoc(key.to_s)
end
clear() click to toggle source
# File lib/j1_app/sinatra/extras/cookies.rb, line 45
def clear
  each_key { |k| delete(k) }
end
compare_by_identity?() click to toggle source
# File lib/j1_app/sinatra/extras/cookies.rb, line 49
def compare_by_identity?
  false
end
default() click to toggle source
# File lib/j1_app/sinatra/extras/cookies.rb, line 53
def default
  nil
end
Also aliased as: default_proc
default_proc()
Alias for: default
delete(key) click to toggle source
# File lib/j1_app/sinatra/extras/cookies.rb, line 59
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/j1_app/sinatra/extras/cookies.rb, line 65
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/j1_app/sinatra/extras/cookies.rb, line 71
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/j1_app/sinatra/extras/cookies.rb, line 76
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/j1_app/sinatra/extras/cookies.rb, line 83
def each_value(&block)
  return enum_for(__method__) unless block_given?
  to_hash.each_value(&block)
end
empty?() click to toggle source
# File lib/j1_app/sinatra/extras/cookies.rb, line 88
def empty?
  to_hash.empty?
end
fetch(key, &block) click to toggle source
# File lib/j1_app/sinatra/extras/cookies.rb, line 92
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/j1_app/sinatra/extras/cookies.rb, line 98
def flatten
  to_hash.flatten
end
has_key?(key) click to toggle source
# File lib/j1_app/sinatra/extras/cookies.rb, line 102
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/j1_app/sinatra/extras/cookies.rb, line 106
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/j1_app/sinatra/extras/cookies.rb, line 110
def hash
  to_hash.hash
end
include?(key)
Alias for: has_key?
index(value) click to toggle source
# File lib/j1_app/sinatra/extras/cookies.rb, line 117
def index(value)
  warn "Hash#index is deprecated; use Hash#key"
  key(value)
end
inspect() click to toggle source
# File lib/j1_app/sinatra/extras/cookies.rb, line 122
def inspect
  "<##{self.class}: #{to_hash.inspect[1..-2]}>"
end
invert() click to toggle source
# File lib/j1_app/sinatra/extras/cookies.rb, line 126
def invert
  to_hash.invert
end
keep_if() { |*a| ... } click to toggle source
# File lib/j1_app/sinatra/extras/cookies.rb, line 130
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/j1_app/sinatra/extras/cookies.rb, line 135
def key(value)
  to_hash.key(value)
end
key?(key)
Alias for: has_key?
keys() click to toggle source
# File lib/j1_app/sinatra/extras/cookies.rb, line 141
def keys
  to_hash.keys
end
length() click to toggle source
# File lib/j1_app/sinatra/extras/cookies.rb, line 145
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/j1_app/sinatra/extras/cookies.rb, line 149
def merge(other, &block)
  to_hash.merge(other, &block)
end
merge!(other) { |key, self, value| ... } click to toggle source
# File lib/j1_app/sinatra/extras/cookies.rb, line 153
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/j1_app/sinatra/extras/cookies.rb, line 163
def rassoc(value)
  to_hash.rassoc(value)
end
rehash() click to toggle source
# File lib/j1_app/sinatra/extras/cookies.rb, line 167
def rehash
  response_cookies.rehash
  request_cookies.rehash
  self
end
reject(&block) click to toggle source
# File lib/j1_app/sinatra/extras/cookies.rb, line 173
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/j1_app/sinatra/extras/cookies.rb, line 180
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/j1_app/sinatra/extras/cookies.rb, line 185
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/j1_app/sinatra/extras/cookies.rb, line 192
def set(key, options = {})
  @response.set_cookie key.to_s, @options.merge(options)
end
shift() click to toggle source
# File lib/j1_app/sinatra/extras/cookies.rb, line 196
def shift
  key, value = to_hash.shift
  delete(key)
  [key, value]
end
size()
Alias for: length
sort(&block) click to toggle source
# File lib/j1_app/sinatra/extras/cookies.rb, line 204
def sort(&block)
  to_hash.sort(&block)
end
store(key, value)
Alias for: []=
to_a() click to toggle source
# File lib/j1_app/sinatra/extras/cookies.rb, line 214
def to_a
  to_hash.to_a
end
to_hash() click to toggle source
# File lib/j1_app/sinatra/extras/cookies.rb, line 210
def to_hash
  request_cookies.merge(response_cookies)
end
to_s() click to toggle source
# File lib/j1_app/sinatra/extras/cookies.rb, line 218
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/j1_app/sinatra/extras/cookies.rb, line 225
def values
  to_hash.values
end
values_at(*list) click to toggle source
# File lib/j1_app/sinatra/extras/cookies.rb, line 229
def values_at(*list)
  list.map { |k| self[k] }
end

Private Instance Methods

deleted() click to toggle source
# File lib/j1_app/sinatra/extras/cookies.rb, line 239
def deleted
  parse_response
  @deleted
end
parse_response() click to toggle source
# File lib/j1_app/sinatra/extras/cookies.rb, line 249
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/j1_app/sinatra/extras/cookies.rb, line 271
def request_cookies
  @request.cookies.reject { |key, value| deleted.include? key }
end
response_cookies() click to toggle source
# File lib/j1_app/sinatra/extras/cookies.rb, line 244
def response_cookies
  parse_response
  @response_hash
end
warn(message) click to toggle source
Calls superclass method
# File lib/j1_app/sinatra/extras/cookies.rb, line 235
def warn(message)
  super "#{caller.first[/^[^:]:\d+:/]} warning: #{message}"
end