require 'bootic_client/response_handlers' module BooticClient InvalidConfigurationError = Class.new(StandardError) VERY_BASIC_URL_CHECK = /^(http|https):/.freeze AUTH_HOST = 'https://auth.bootic.net'.freeze API_ROOT = 'https://api.bootic.net/v1'.freeze class Configuration attr_accessor :logging attr_reader :client_id, :client_secret, :cache_store, :user_agent def user_agent=(v) set_non_nil :user_agent, v end def client_id=(v) set_non_nil :client_id, v end def client_secret=(v) set_non_nil :client_secret, v end def cache_store=(v) set_non_nil :cache_store, v end def auth_host=(v) check_url! :auth_host, v set_non_nil :auth_host, v end def api_root=(v) check_url! :api_root, v set_non_nil :api_root, v end def logger=(v) set_non_nil :logger, v end def auth_host @auth_host || AUTH_HOST end def api_root @api_root || API_ROOT end def logger @logger || ::Logger.new(STDOUT) end def response_handlers @response_handlers ||= ResponseHandlers::Set.new([ ResponseHandlers::Hal, ResponseHandlers::File ]) end private def set_non_nil(name, v) raise InvalidConfigurationError, "#{name} cannot be nil" if v.nil? instance_variable_set("@#{name}", v) end def check_url!(name, v) raise InvalidConfigurationError, "#{name} must be a valid URL" unless v.to_s =~ VERY_BASIC_URL_CHECK end end end