-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapplication.rb
106 lines (87 loc) · 2.42 KB
/
application.rb
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# frozen_string_literal: true
APP_ENV = ENV.fetch("APP_ENV") do |el|
require 'dotenv/load'
ENV.fetch(el)
end
require 'yaml'
DB_CONFIG = YAML::load(
File.read('config/database.yml')
).fetch(APP_ENV)
require 'bundler'
Bundler.require(:default, APP_ENV.to_sym)
require 'active_record'
ActiveRecord::Base.establish_connection(DB_CONFIG)
# Sinatra app below
require "sinatra"
require "rabl"
require "./models/cook_roulette/ip_address"
require "./commands/recipes/create"
require "./commands/recipes/show"
require "./commands/recipes/list"
require "./commands/ingredients/create"
Rabl.register!
class CookRouletteApp < Sinatra::Base
enable :sessions
set :session_secret, ENV.fetch("SESSION_SECRET")
# Default assets folder:
# set :public_folder, __dir__ + "/public"
before do
if CookRoulette::IpAddress.forbidden?(request.ip)
halt 403
end
end
get '/' do
@recipe_url = session["recipe_url"]
session["recipe_url"] = nil
erb :"homepage.html"
end
get '/recipes' do
# flashed from POST /ingredients
@flash = session["flash_msg"]
session["flash_msg"] = nil
list_result = Commands::Recipes::List.(request: request, params: params)
if list_result.success?
list_cmd = list_result.value!
erb :"recipes/index.html", locals: list_cmd.locals
else
list_result.failure
end
end
post "/recipes" do
create_result = Commands::Recipes::Create.(request: request, params: params)
if create_result.success?
create_cmd = create_result.value!
redirect to("/recipes/#{create_cmd.recipe.id}")
else
create_result.failure
end
end
get "/recipes/:id" do
show_result = Commands::Recipes::Show.(request: request, params: params)
if show_result.success?
show_cmd = show_result.value!
erb :"recipes/show.html", locals: show_cmd.locals
else
status 404
show_cmd.failure
end
end
get %r{/ingredients.?([\w]*)} do |ext|
@ingredients = Ingredient.all
if ext == "json"
rabl :"ingredients/index", format: :json
else
"Format is not supported"
end
end
post "/ingredients" do
create_result = Commands::Ingredients::Create.(request: request, params: params)
if create_result.success?
create_cmd = create_result.value!
session["flash_msg"] = "Successfully created an ingredient!"
redirect to(create_cmd.success_path)
else
create_result.failure
end
end
end