module <%= name.camelize %> class App < Sinatra::Default set :views, File.expand_path(File.join(File.dirname(__FILE__), 'views')) enable :methodoverride helpers do def oauth_consumer ::<%= name.camelize %>::OAuth.consumer end def current_user session[:user_id].nil? ? nil : ::<%= name.camelize %>::User.get(session[:user_id]) end end error do <%= name.camelize %>::Log.logger.info env['sinatra.error'].message <%= name.camelize %>::Log.logger.info env['sinatra.error'].backtrace.join("\n") haml :failed end get '/' do haml current_user.nil? ? :about : :home end get '/authenticate' do ::<%= name.camelize %>.retryable(:times => 2) do request_token = oauth_consumer.get_request_token session[:request_token] = request_token.token session[:request_token_secret] = request_token.secret redirect request_token.authorize_url end end get '/peace' do session.clear redirect '/' end get '/callback' do @request_token = ::OAuth::RequestToken.new(oauth_consumer, session[:request_token], session[:request_token_secret]) access_token = @request_token.get_access_token oauth_response = oauth_consumer.request(:get, '/account/verify_credentials.json', access_token, { :scheme => :query_string }) case oauth_response when Net::HTTPSuccess user_info = JSON.parse(oauth_response.body) user = ::<%= name.camelize %>::User.first_or_create(:twitter_id => user_info['id']) # really wish first_or_create behaved sanely user.name, user.avatar = user_info['name'], user_info['profile_image_url'] user.token, user.secret = access_token.token, access_token.secret user.url = 'http://twitter.com/'+user_info['screen_name'] user.save session[:user_id] = user.id redirect '/' else raise ArgumentError.new('Unhandled HTTP Response') end end end end