-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathsetup.rb
More file actions
70 lines (64 loc) · 1.84 KB
/
setup.rb
File metadata and controls
70 lines (64 loc) · 1.84 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
require 'base64'
require 'linguistics'
require 'openssl'
require 'sequel'
require 'slim'
require 'tony'
require 'honeybadger' # Always last
Sequel.application_timezone = :utc
Sequel.database_timezone = :utc
Sequel.typecast_timezone = :utc
Sequel.extension(:migration)
DB = case ENV.fetch('APP_ENV')
when 'production'
Sequel.connect(ENV.fetch('DATABASE_URL'))
when 'development'
Sequel.postgres(database: 'smalldemocracy_dev')
when 'test'
if ENV.key?('CI') # Github Actions
Sequel.postgres(database: 'smalldemocracy',
user: 'postgres',
host: 'localhost',
port: 5432)
else # Local
Sequel.postgres(database: 'smalldemocracy_test')
end
end
DB.extension(:pg_enum)
DB.extension(:pg_json)
if ENV.fetch('RESET_DB_ON_SETUP', false)
Sequel::Migrator.run(DB, 'db/migrations', target: 0)
end
Sequel::Migrator.run(DB, 'db/migrations')
Linguistics.use(:en)
Slim::Engine.set_options(
tabsize: 2,
pretty: ENV.fetch('APP_ENV') != 'production')
require_relative 'lib/helpers/slim'
Tony::Slim.include(Helpers::Slim)
Tony::Slim::Env.include(Helpers::Slim)
require_relative 'lib/admin'
require_relative 'lib/api'
require_relative 'lib/group'
require_relative 'lib/main'
require_relative 'lib/poll'
module Setup
def self.url_map
# rubocop:disable Style/StringHashKeys
return {
'/' => Main.new,
'/api' => API.new,
'/group' => Group.new,
'/poll' => Poll.new,
'/admin' => Rack::Builder.app {
use(Rack::Auth::Basic) { |_, pw|
Rack::Utils.secure_compare(
Base64.strict_encode64(OpenSSL::Digest.new('SHA256').digest(pw)),
ENV.fetch('SMALLDEMOCRACY_HASHED_PASSWORD'))
}
run(Admin.new)
}
}
# rubocop:enable Style/StringHashKeys
end
end