class Greed::Cookie::Jar

Public Class Methods

new(\ state = nil, set_cookie_parser: nil, get_current_time: nil, calculate_expiration: nil, determine_domain: nil, determine_path: nil ) click to toggle source
# File lib/greed/cookie/jar.rb, line 14
def initialize(\
  state = nil,
  set_cookie_parser: nil,
  get_current_time: nil,
  calculate_expiration: nil,
  determine_domain: nil,
  determine_path: nil
)
  @set_cookie_parser = set_cookie_parser || Parser.new.method(:parse)
  @get_current_time = get_current_time || ::Time.method(:current)
  @calculate_expiration = calculate_expiration || ExpirationHandler.new.method(:calculate_expiration)
  @determine_domain = determine_domain || DomainHandler.new.method(:determine_domain)
  @determine_path = determine_path || PathHandler.new.method(:determine_path)
  @cookie_map = state || {}
end

Public Instance Methods

dump() click to toggle source
# File lib/greed/cookie/jar.rb, line 70
def dump
  garbage_collect
  @cookie_map.clone
end
garbage_collect() click to toggle source
# File lib/greed/cookie/jar.rb, line 110
def garbage_collect
  current_time = @get_current_time.call
  @cookie_map = @cookie_map.map do |domain_name, domain_holder|
    domain_holder.map do |path_name, path_holder|
      path_holder.select do |_cookie_name, cookie_record|
        !cookie_record[:expires] || current_time < cookie_record[:expires]
      end.yield_self do |filtered_result|
        break nil unless filtered_result.present?
        [path_name, filtered_result]
      end
    end.compact.to_h.yield_self do |filtered_result|
      break nil unless filtered_result.present?
      [domain_name, filtered_result]
    end
  end.compact.to_h
  nil
end

Private Instance Methods

compile_effective_cookies(domain_candidates, document_path, &cookie_selector) click to toggle source
# File lib/greed/cookie/jar.rb, line 130
def compile_effective_cookies(domain_candidates, document_path, &cookie_selector)
  path_candidates = iterate_cookie_path(document_path)
  effective_cookies = {}
  domain_candidates.each do |domain_candidate|
    domain_holder = @cookie_map[domain_candidate]
    next if domain_holder.blank?
    path_candidates.each do |path_candidate|
      path_holder = domain_holder[path_candidate]
      next unless path_holder.present? && path_holder.respond_to?(:select)
      path_holder = path_holder.select(&cookie_selector)
      effective_cookies = path_holder.merge(effective_cookies)
    end
  end
  effective_cookies
end