This repository has been archived by the owner on Dec 24, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfloripa.rb
157 lines (130 loc) · 4.22 KB
/
floripa.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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
require 'rubygems'
require 'bundler/setup'
Bundler.require :default
require 'sinatra'
require 'authlogic'
require 'erubis'
require 'active_record'
require 'rack-flash'
ActiveRecord::Base.establish_connection(YAML::load(File.open('database.yml')))
Dir["models/*.rb"].each { |f| require f }
enable :sessions
use Rack::Flash
before do
@cities = City.all
end
get '/' do
# A condição abaixo define que quando params[tab] NÃO for nulo, o elemento ':page' da session é setado para 1
# Explicação: Quando o usuário acessa outra página da mesma tab, 'params[:tab]' passa a ser nulo. 'params[:tab]' só existe quando o usuário clica em uma tab. Portanto, ao mudar de tab, 'params[:tab]' recebe o valor correspondente àquela tab, deixa de ser nulo, o que aciona a ação 'session[:oage] = '1'
if !params[:city].nil?
session[:city] = params[:city]
end
if !params[:tab].nil?
session[:page] = '1'
end
if params[:tab].nil? && session[:tab].nil?
session[:tab] = 'recent'
elsif !params[:tab].nil?
session[:tab] = params[:tab]
end
if params[:page].nil? && session[:page].nil?
session[:page] = '1'
elsif !params[:page].nil?
session[:page] = params[:page]
end
@posts = ((session[:tab] == 'recent') ? Post.city("#{session[:city]}").recent : Post.city("#{session[:city]}").featured).paginate(:page => session[:page], :per_page => 6)
erb :index
end
post '/' do
Post.create(:message => params[:input], :user_id => (current_user ? current_user.id : nil), :city_id => session[:city])
flash[:success] = 'Sua mensagem foi postada com sucesso!'
redirect to('/')
end
get '/search' do
if !params[:page].nil?
session[:page] = params[:page]
end
@posts = Post.search(params[:search]).paginate(:page => session[:page], :per_page => 6)
erb :search
end
get '/signup' do
erb :signup
end
post '/signup' do
@user = User.new(:name => params[:name], :username => params[:username], :password => params[:password], :email => params[:email], :password_confirmation => params[:password_confirmation])
if @user.save
flash[:success] = 'Seu cadastro foi realizado com sucesso!'
redirect to('/')
else
flash.now[:error] = 'Seu cadastro não foi salvo. Tente novamente'
erb :signup
end
end
get '/login' do
erb :login
end
post '/login' do
@session = UserSession.new(:username => params[:username], :password => params[:password], :remember_me => false)
if @session.save
flash[:success] = "Bem-vindo, #{current_user.username}!"
redirect to('/')
else
flash.now[:error] = "Não foi possível fazer o seu login!"
erb :login
end
end
get '/logout' do
flash[:notice] = 'Você não está mais logado'
UserSession.find.destroy
redirect to('/')
end
get '/contact' do
erb :contact
end
get '/about' do
erb :about
end
post '/like' do
p = Post.find(params[:id])
p.increment(:likes)
if p.save
flash[:success] = "Realizado com sucesso"
else
flash[:error] = "Ação não executada. Tente novamente"
end
redirect to('/')
end
post '/dislike' do
p = Post.find(params[:id])
p.increment(:dislikes)
if p.save
flash[:success] = "Realizado com sucesso"
else
flash[:error] = "Ação não executada. Tente novamente"
end
redirect to('/')
end
helpers do
def current_user
session = UserSession.find
session.user if session
end
def capitalize_all string
string.split(' ').map {|t| t.capitalize}.join(' ') unless string.nil? || string.chomp == ''
end
def paginate(resources)
session[:page] ||= 1 #Se params[:page] não possuir um valor, atribuir o valor '1'
if !resources.next_page.nil? and !resources.previous_page.nil?
html = "<a href='?page=#{session[:page].to_i-1}'> << </a>"
html += " pág #{session[:page]} de #{resources.total_pages} "
html += "<a href='?page=#{session[:page].to_i+1}'> >> </a>"
elsif !resources.next_page.nil? and resources.previous_page.nil?
html = "<a href='?page=#{session[:page].to_i+1}'> >> </a>"
elsif resources.next_page.nil? and !resources.previous_page.nil?
html = "<a href='?page=#{session[:page].to_i-1}'> << </a>"
html += " pág #{session[:page]} de #{resources.total_pages}"
end
return html
end
end
# Os helpers servem para poder chamar o método na View