123456789_123456789_123456789_123456789_123456789_

Class: Sinatra::Cookies::Jar

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Instance Chain:
self, Enumerable
Inherits: Object
Defined in: sinatra-contrib/lib/sinatra/cookies.rb

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(app) ⇒ Jar

[ GitHub ]

  
# File 'sinatra-contrib/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

Instance Attribute Details

#compare_by_identity?Boolean (readonly)

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 103

def compare_by_identity?
  false
end

#empty?Boolean (readonly)

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 146

def empty?
  to_hash.empty?
end

#options (readonly)

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 60

attr_reader :options

Instance Method Details

#==(other)

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 81

def ==(other)
  other.respond_to? :to_hash and to_hash == other.to_hash
end

#[](key)

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 85

def [](key)
  response_cookies[key.to_s] || request_cookies[key.to_s]
end

#[]=(key, value) Also known as: #store

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 89

def []=(key, value)
  set(key, value: value)
end

#assoc(key)

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 94

def assoc(key)
  to_hash.assoc(key.to_s)
end

#clear

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 99

def clear
  each_key { |k| delete(k) }
end

#default Also known as: #default_proc

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 107

def default
  nil
end

#default_proc

Alias for #default.

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 111

alias default_proc default

#delete(key)

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 113

def delete(key)
  result = self[key]
  @response.delete_cookie(key.to_s, @options)
  result
end

#delete_if Also known as: #reject!

[ GitHub ]

  
# File 'sinatra-contrib/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

#deleted (private)

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 301

def deleted
  parse_response
  @deleted
end

#each(&block) Also known as: #each_pair

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 126

def each(&block)
  return enum_for(__method__) unless block_given?

  to_hash.each(&block)
end

#each_key(&block)

[ GitHub ]

  
# File 'sinatra-contrib/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.

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 138

alias each_pair each

#each_value(&block)

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 140

def each_value(&block)
  return enum_for(__method__) unless block_given?

  to_hash.each_value(&block)
end

#fetch(key, &block)

[ GitHub ]

  
# File 'sinatra-contrib/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

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 157

def flatten
  to_hash.flatten
end

#has_key?(key) ⇒ Boolean Also known as: #include?, #member?, #key?

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 162

def has_key?(key)
  response_cookies.key? key.to_s or request_cookies.key? key.to_s
end

#has_value?(value) ⇒ Boolean Also known as: #value?

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 166

def has_value?(value)
  response_cookies.value? value or request_cookies.value? value
end

#hash

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 170

def hash
  to_hash.hash
end

#include?(key)

Alias for #has_key?.

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 174

alias include? has_key?

#inspect

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 177

def inspect
  "<##{self.class}: #{to_hash.inspect[1..-2]}>"
end

#invert

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 182

def invert
  to_hash.invert
end

#keep_if Also known as: #select!, #select!

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 187

def keep_if
  return enum_for(__method__) unless block_given?

  delete_if { |*a| !yield(*a) }
end

#key(value)

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 193

def key(value)
  to_hash.key(value)
end

#key?(key)

Alias for #has_key?.

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 197

alias key? has_key?

#keys

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 199

def keys
  to_hash.keys
end

#length Also known as: #size

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 203

def length
  to_hash.length
end

#member?(key)

Alias for #has_key?.

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 175

alias member?  has_key?

#merge(other, &block)

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 207

def merge(other, &block)
  to_hash.merge(other, &block)
end

#merge!(other) Also known as: #update

[ GitHub ]

  
# File 'sinatra-contrib/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

#parse_response (private)

[ GitHub ]

  
# File 'sinatra-contrib/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

#rassoc(value)

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 221

def rassoc(value)
  to_hash.rassoc(value)
end

#rehash

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 225

def rehash
  response_cookies.rehash
  request_cookies.rehash
  self
end

#reject(&block)

[ GitHub ]

  
# File 'sinatra-contrib/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.

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 237

alias reject! delete_if

#replace(other)

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 239

def replace(other)
  select! { |k, _v| other.include?(k) or other.include?(k.to_s) }
  merge! other
end

#request_cookies (private)

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 334

def request_cookies
  @request.cookies.reject { |key, _value| deleted.include? key }
end

#response_cookies (private)

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 306

def response_cookies
  parse_response
  @response_hash
end

#select(&block)

[ GitHub ]

  
# File 'sinatra-contrib/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.

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 250

alias select! keep_if if Hash.method_defined? :select!

#set(key, options = {})

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 252

def set(key, options = {})
  @response.set_cookie key.to_s, @options.merge(options)
end

#shift

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 256

def shift
  key, value = to_hash.shift
  delete(key)
  [key, value]
end

#size

Alias for #length.

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 262

alias size length

#sort(&block)

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 265

def sort(&block)
  to_hash.sort(&block)
end

#store(key, value)

Alias for #[]=.

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 270

alias store []=

#to_a

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 276

def to_a
  to_hash.to_a
end

#to_hash

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 272

def to_hash
  request_cookies.merge(response_cookies)
end

#to_s

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 280

def to_s
  to_hash.to_s
end

#update(other)

Alias for #merge!.

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 284

alias update merge!

#value?(value)

Alias for #has_value?.

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 285

alias value? has_value?

#values

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 287

def values
  to_hash.values
end

#values_at(*list)

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 291

def values_at(*list)
  list.map { |k| self[k] }
end

#warn(message) (private)

[ GitHub ]

  
# File 'sinatra-contrib/lib/sinatra/cookies.rb', line 297

def warn(message)
  super "#{caller.first[/^[^:]:\d+:/]} warning: #{message}"
end