# config.rb contains classes, methods and extends existing Twitter4R classes
# to provide easy configuration facilities.
module Twitter
# Represents global configuration for Twitter::Client.
# Can override the following configuration options:
# * protocol - :http, :https or :ssl supported. :ssl is an alias for :https. Defaults to :ssl
# * host - hostname to connect to for the Twitter service. Defaults to 'twitter.com'.
# * port - port to connect to for the Twitter service. Defaults to 443.
# * path_prefix - path to prefix URIs of REST API calls. Defaults to "".
# * search_protocol - :http, :https or :ssl supported. :ssl is an alias for :https. Defaults to :ssl
# * search_host - hostname to connect to for the Twitter Search service. Defaults to 'twitter.com'.
# * search_port - port to connect to for the Twitter Search service. Defaults to 443.
# * search_path_prefix - path to prefix URIs of Search API calls. Defaults to "".
# * proxy_protocol - proxy protocol to use. Defaults to http.
# * proxy_host - proxy host to use. Defaults to nil.
# * proxy_port - proxy host to use. Defaults to 8080.
# * proxy_user - proxy username to use. Defaults to nil.
# * proxy_pass - proxy password to use. Defaults to nil.
# * user_agent - user agent string to use for each request of the HTTP header.
# * application_name - name of your client application. Defaults to 'Twitter4R'.
# * application_version - version of your client application. Defaults to current Twitter::Version.to_version.
# * application_url - URL of your client application. Defaults to http://twitter4r.rubyforge.org.
# * source - the source id given to you by Twitter to identify your application in their web interface. Note: you must contact Twitter.com developer directly so they can configure their servers appropriately.
# * timeout - the timeout in second for HTTP requests.
# * oauth_consumer_token - the OAuth consumer token for your application
# * oauth_consumer_secret - the OAuth consumer secret for your application
# * oauth_request_token_path - the URI path for Twitter API's OAuth request token call. Not usually necessary to override.
# * oauth_access_token_path - the URI path for Twitter API's OAuth access token call. Not usually necessary to override.
# * oauth_authorize_path - the URI path for Twitter API's OAuth authorize call. Not usually necessary to override.
class Config
include ClassUtilMixin
@@ATTRIBUTES = [
:protocol,
:host,
:port,
:path_prefix,
:search_protocol,
:search_host,
:search_port,
:search_path_prefix,
:proxy_protocol,
:proxy_host,
:proxy_port,
:proxy_user,
:proxy_pass,
:user_agent,
:application_name,
:application_version,
:application_url,
:source,
:timeout,
:oauth_consumer_token,
:oauth_consumer_secret,
:oauth_request_token_path,
:oauth_access_token_path,
:oauth_authorize_path,
:exception_registry,
]
attr_accessor(*@@ATTRIBUTES)
# Override of Object#eql? to ensure RSpec specifications run
# correctly. Also done to follow Ruby best practices.
def eql?(other)
return true if self == other
@@ATTRIBUTES.each do |att|
return false unless self.send(att).eql?(other.send(att))
end
true
end
end
class Client
@@defaults = { :host => 'twitter.com',
:port => 443,
:protocol => :ssl,
:path_prefix => "",
:search_host => 'search.twitter.com',
:search_port => 80,
:search_protocol => :http,
:search_path_prefix => "",
:proxy_protocol => "http",
:proxy_host => nil,
:proxy_port => 8080,
:user_agent => "default",
:application_name => 'Twitter4R',
:application_version => Twitter::Version.to_version,
:application_url => 'http://twitter4r.rubyforge.org',
:source => 'twitter4r',
:timeout => 20,
:oauth_request_token_path => '/oauth/request_token',
:oauth_access_token_path => '/oauth/access_token',
:oauth_authorize_path => '/oauth/authorize',
:exception_registry => Twitter::RESTError.registry,
}
@@config = Twitter::Config.new(@@defaults)
# Twitter::Client class methods
class << self
# returns configuration object
def config
@@config
end
# Yields to given block to configure the Twitter4R API.
def configure(&block)
raise ArgumentError, "Block must be provided to configure" unless block_given?
yield config
end # configure
end # class << self
end # Client class
end # Twitter module