class Spidr::AuthStore

Stores {AuthCredential} objects organized by a website's scheme, host-name and sub-directory.

Public Class Methods

new() click to toggle source

Creates a new auth store.

@since 0.2.2

# File lib/spidr/auth_store.rb, line 21
def initialize
  @credentials = {}
end

Public Instance Methods

[](url) click to toggle source

Given a URL, return the most specific matching auth credential.

@param [URI] url

A fully qualified url including optional path.

@return [AuthCredential, nil]

Closest matching {AuthCredential} values for the URL,
or `nil` if nothing matches.

@since 0.2.2

# File lib/spidr/auth_store.rb, line 37
def [](url)
  # normalize the url
  url = URI(url)

  key = [url.scheme, url.host, url.port]
  paths = @credentials[key]

  return nil unless paths

  # longest path first
  ordered_paths = paths.keys.sort_by { |path_key| -path_key.length }

  # directories of the path
  path_dirs = URI.expand_path(url.path).split('/')

  ordered_paths.each do |path|
    return paths[path] if path_dirs[0,path.length] == path
  end

  return nil
end
[]=(url,auth) click to toggle source

Add an auth credential to the store for supplied base URL.

@param [URI] url

A URL pattern to associate with a set of auth credentials.

@param [AuthCredential] auth

The auth credential for this URL pattern.

@return [AuthCredential]

The newly added auth credential.

@since 0.2.2

# File lib/spidr/auth_store.rb, line 73
def []=(url,auth)
  # normalize the url
  url = URI(url)

  # normalize the URL path
  path = URI.expand_path(url.path)

  key = [url.scheme, url.host, url.port]

  @credentials[key] ||= {}
  @credentials[key][path.split('/')] = auth
  return auth
end
add(url,username,password) click to toggle source

Convenience method to add username and password credentials for a named URL.

@param [URI] url

The base URL that requires authorization.

@param [String] username

The username required to access the URL.

@param [String] password

The password required to access the URL.

@return [AuthCredential]

The newly added auth credential.

@since 0.2.2

# File lib/spidr/auth_store.rb, line 105
def add(url,username,password)
  self[url] = AuthCredential.new(username,password)
end
clear!() click to toggle source

Clear the contents of the auth store.

@return [AuthStore]

The cleared auth store.

@since 0.2.2

# File lib/spidr/auth_store.rb, line 135
def clear!
  @credentials.clear
  return self
end
for_url(url) click to toggle source

Returns the base64 encoded authorization string for the URL or `nil` if no authorization exists.

@param [URI] url

The URL.

@return [String, nil]

The base64 encoded authorizatio string or `nil`.

@since 0.2.2

# File lib/spidr/auth_store.rb, line 121
def for_url(url)
  if (auth = self[url])
    Base64.encode64("#{auth.username}:#{auth.password}")
  end
end
inspect() click to toggle source

Inspects the auth store.

@return [String]

The inspected version of the auth store.
# File lib/spidr/auth_store.rb, line 162
def inspect
  "#<#{self.class}: #{@credentials.inspect}>"
end
size() click to toggle source

Size of the current auth store (number of URL paths stored).

@return [Integer]

The size of the auth store.

@since 0.2.2

# File lib/spidr/auth_store.rb, line 148
def size
  total = 0

  @credentials.each_value { |paths| total += paths.length }

  return total
end