class Rabbiter::Client

Constants

CONSUMER_KEY
CONSUMER_SECRET

Public Class Methods

new(logger) click to toggle source
# File lib/rabbiter.rb, line 36
def initialize(logger)
  @logger = logger
  @oauth_parameters = nil
  @config_file_path = Pathname.new("~/.rabbit/twitter-oauth.yaml")
  @config_file_path = @config_file_path.expand_path
  @listeners = []
  @connection = nil
end

Public Instance Methods

close() click to toggle source
# File lib/rabbiter.rb, line 59
def close
  return if @connection.nil?
  @connection.close
  @connection = nil
end
register_listener(&block) click to toggle source
# File lib/rabbiter.rb, line 45
def register_listener(&block)
  @listeners << block
end
setup() click to toggle source
# File lib/rabbiter.rb, line 49
def setup
  return unless @oauth_parameters.nil?
  setup_access_token unless @config_file_path.exist?
  oauth_access_parameters = YAML.load(@config_file_path.read)
  @oauth_parameters = {
    :access_key => oauth_access_parameters[:access_token],
    :access_secret => oauth_access_parameters[:access_secret],
  }
end
start(*filters, &block) click to toggle source
# File lib/rabbiter.rb, line 65
def start(*filters, &block)
  register_listener(&block) if block_given?
  setup if @oauth_parameters.nil?
  return if @oauth_parameters.nil?

  stream_options = {
    :access_token        => @oauth_parameters[:access_key],
    :access_token_secret => @oauth_parameters[:access_secret],
    :consumer_key        => CONSUMER_KEY,
    :consumer_secret     => CONSUMER_SECRET,
    :user_agent          => "Rabbiter #{Rabbiter::VERSION}",
  }
  @client = ::Twitter::Streaming::Client.new(stream_options)
  @client.filter(:track => filters.join(",")) do |status|
    @listeners.each do |listener|
      listener.call(status)
    end
  end
end

Private Instance Methods

setup_access_token() click to toggle source
# File lib/rabbiter.rb, line 86
def setup_access_token
  FileUtils.mkdir_p(@config_file_path.dirname)
  oauth_options = {
    :consumer_key => CONSUMER_KEY,
    :consumer_secret => CONSUMER_SECRET,
    :proxy => ENV["http_proxy"],
  }
  client = TwitterOAuth::Client.new(oauth_options)
  request_token = client.request_token
  authorize_url = request_token.authorize_url
  puts( _("1) Access this URL: %{url}") % {:url => authorize_url})
  show_uri(authorize_url)
  print(_("2) Enter the PIN: "))
  pin = $stdin.gets.strip
  access_token = request_token.get_access_token(:oauth_verifier => pin)
  oauth_parameters = {
    :access_token => access_token.token,
    :access_secret => access_token.secret,
  }
  @config_file_path.open("w") do |config_file|
    config_file.chmod(0600)
    config_file.puts(YAML.dump(oauth_parameters))
  end
end
show_uri(uri) click to toggle source
# File lib/rabbiter.rb, line 111
def show_uri(uri)
  if Gtk.respond_to?(:show_uri_on_window)
    begin
      Gtk.show_uri_on_window(nil, uri, Gdk::CURRENT_TIME)
    rescue GLib::ErrorInfo
      @logger.warning("[twitter][show-uri] #{$!}")
    end
  elsif Gtk.respond_to?(:show_uri)
    begin
      Gtk.show_uri(uri)
    rescue GLib::ErrorInfo
      @logger.warning("[twitter][show-uri] #{$!}")
    end
  end
end