-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.rb
63 lines (52 loc) · 1.48 KB
/
app.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
require 'rack'
require 'cgi'
require 'csv'
require_relative 'template'
require_relative 'route'
require_relative 'survey'
require_relative 'email'
class App < Template
def call(env)
@request = Rack::Request.new(env)
@request_cookies = Rack::Utils.parse_cookies(env)
@headers = {}
@route = Route.new(env)
status = @route.name =~ /^\d\d\d$/ ? @route.name.to_i : 200
if @request.path == "/form" && @request.post? == true
process_survey_submission
end
[status, @headers, [erb(@route.name)]]
end
private
def process_survey_submission
if submission_is_not_valid
@route.name = :form_errors
elsif email_has_already_been_submitted
@route.name = :already_submitted
set_cookie_to_remember_this
else
save_to_csv_file
send_email_verification
@route.name = :thank_you
set_cookie_to_remember_this
end
end
def cookies_has_already_been_set
@request_cookies.has_key? 'survey_submitted'
end
def submission_is_not_valid
@request.params.empty? || !@request.params["email"] =~ /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
end
def email_has_already_been_submitted
Survey.email_exist?(@request.params["email"]) == true
end
def set_cookie_to_remember_this
Rack::Utils.set_cookie_header!(@headers, ['survey_submitted'].first, true)
end
def save_to_csv_file
Survey.create_answers(@request.params)
end
def send_email_verification
ValidationMail.send_to(@request.params["email"])
end
end