mirror of
https://github.com/samsonjs/http-cookie.git
synced 2026-03-25 08:55:53 +00:00
65 lines
1.6 KiB
Ruby
65 lines
1.6 KiB
Ruby
# :markup: markdown
|
|
|
|
# An abstract superclass for all saver classes.
|
|
class HTTP::CookieJar::AbstractSaver
|
|
class << self
|
|
@@class_map = {}
|
|
|
|
# Gets an implementation class by the name, optionally trying to
|
|
# load "http/cookie_jar/*_saver" if not found. If loading fails,
|
|
# IndexError is raised.
|
|
def implementation(symbol)
|
|
@@class_map.fetch(symbol)
|
|
rescue IndexError
|
|
begin
|
|
require 'http/cookie_jar/%s_saver' % symbol
|
|
@@class_map.fetch(symbol)
|
|
rescue LoadError, IndexError
|
|
raise IndexError, 'cookie saver unavailable: %s' % symbol.inspect
|
|
end
|
|
end
|
|
|
|
def inherited(subclass) # :nodoc:
|
|
@@class_map[class_to_symbol(subclass)] = subclass
|
|
end
|
|
|
|
def class_to_symbol(klass) # :nodoc:
|
|
klass.name[/[^:]+?(?=Saver$|$)/].downcase.to_sym
|
|
end
|
|
end
|
|
|
|
# Defines options and their default values.
|
|
def default_options
|
|
# {}
|
|
end
|
|
private :default_options
|
|
|
|
# :call-seq:
|
|
# new(**options)
|
|
#
|
|
# Called by the constructor of each subclass using super().
|
|
def initialize(options = nil)
|
|
options ||= {}
|
|
@logger = options[:logger]
|
|
@session = options[:session]
|
|
# Initializes each instance variable of the same name as option
|
|
# keyword.
|
|
default_options.each_pair { |key, default|
|
|
instance_variable_set("@#{key}", options.fetch(key, default))
|
|
}
|
|
end
|
|
|
|
# Implements HTTP::CookieJar#save().
|
|
#
|
|
# This is an abstract method that each subclass must override.
|
|
def save(io, jar)
|
|
# self
|
|
end
|
|
|
|
# Implements HTTP::CookieJar#load().
|
|
#
|
|
# This is an abstract method that each subclass must override.
|
|
def load(io, jar)
|
|
# self
|
|
end
|
|
end
|