# 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.
# * proxy_host - proxy host to use. Defaults to nil.
# * proxy_port - proxy host to use. Defaults to nil.
# * 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.
class Config
include ClassUtilMixin
@@ATTRIBUTES = [
:protocol,
:host,
:port,
:proxy_host,
:proxy_port,
:proxy_user,
:proxy_pass,
:user_agent,
:application_name,
:application_version,
:application_url,
:source,
]
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,
:proxy_host => nil,
:proxy_port => nil,
:user_agent => "default",
:application_name => 'Twitter4R',
:application_version => Twitter::Version.to_version,
:application_url => 'http://twitter4r.rubyforge.org',
:source => 'twitter4r',
}
@@config = Twitter::Config.new(@@defaults)
# Twitter::Client class methods
class << self
# 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