nakajima / thunder-app

Before lightning (talks) comes thunder

This URL has Read+Write access

defunkt (author)
Wed Jun 03 13:49:54 -0700 2009
nakajima (committer)
Wed Jun 03 13:55:10 -0700 2009
thunder-app / app.rb
100644 79 lines (65 sloc) 1.632 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
$:.unshift *Dir[File.dirname(__FILE__) + "/vendor/*/lib"]
 
require 'sinatra/base'
require 'open-uri'
require 'net/http'
require 'rack-flash'
require 'activerecord'
require 'delayed_job'
require 'typhoeus'
require 'logger'
require File.join(File.dirname(__FILE__), *%w[lib user])
 
class ThrottledError < StandardError ; end
 
class Thunder < Sinatra::Default
  set :root, File.dirname(__FILE__)
  set :static, true
  set :public, File.join(root, 'public')
  enable :sessions
 
  use Rack::Flash
 
  configure do
    config = YAML::load_file('config/database.yml')
    environment = Sinatra::Application.environment.to_s
    ActiveRecord::Base.logger = Logger.new($stdout)
    ActiveRecord::Base.establish_connection(
      config[environment]
    )
  end
 
  helpers do
    def check_user(user)
      if user.exists?
        @repos = user.repos
        @repos ? erb(:show) : erb(:loading)
      else
        flash[:error] = params[:username]
        redirect '/'
      end
    end
  end
 
  get '/' do
    status(404) if flash.has?(:error)
    erb :index
  end
 
  get '/user' do
    if params[:username].empty?
      flash[:invalid] = "invalid"
      redirect '/'
    end
 
    redirect "/~#{params[:username]}"
  end
 
  get '/ping/~:username' do
    @user = User.get(params[:username])
    @user.loaded? ? "/~#{@user.name}" : ''
  end
 
  get '/~:username?' do
    @user = User.get(params[:username])
    @user.refresh!
 
    return erb(:loading) unless @user.loaded?
 
    begin
      @repos = @user.repos
      erb(:show)
    rescue ThrottledError
      erb :throttled
    rescue Exception => err
      check_user(@user)
    end
  end
end