class Acme::Client::Resources::Directory

def caa_identities

def caa_identities
  meta[DIRECTORY_META[:caa_identities]]
end

def directory

def directory
  @directory ||= load_directory
end

def endpoint_for(key)

def endpoint_for(key)
  directory.fetch(key) do |missing_key|
    raise Acme::Client::Error::UnsupportedOperation,
      "Directory at #{@url} does not include `#{missing_key}`"
  end
end

def external_account_required

def external_account_required
  meta[DIRECTORY_META[:external_account_required]]
end

def fetch_directory

def fetch_directory
  connection = Faraday.new(url: @directory, **@connection_options) do |configuration|
    configuration.use Acme::Client::FaradayMiddleware, client: nil, mode: nil
    configuration.adapter Faraday.default_adapter
  end
  connection.headers[:user_agent] = Acme::Client::USER_AGENT
  response = connection.get(@url)
  response.body
end

def initialize(url, connection_options)

def initialize(url, connection_options)
  @url, @connection_options = url, connection_options
end

def load_directory

def load_directory
  body = fetch_directory
  result = {}
  result[:meta] = body.delete('meta')
  DIRECTORY_RESOURCES.each do |key, entry|
    result[key] = URI(body[entry]) if body[entry]
  end
  result
rescue JSON::ParserError => exception
  raise Acme::Client::Error::InvalidDirectory,
    "Invalid directory url\n#{@directory} did not return a valid directory\n#{exception.inspect}"
end

def meta

def meta
  directory[:meta]
end

def terms_of_service

def terms_of_service
  meta[DIRECTORY_META[:terms_of_service]]
end

def website

def website
  meta[DIRECTORY_META[:website]]
end