Class: SideBro::Web::Action
Constant Summary
collapse
- VIEWS_PATH =
File.expand_path("../../../web/views", __dir__)
- TEMPLATE_CACHE =
{}
SideBro::WebHelpers::ACTIVEJOB_WRAPPER, SideBro::WebHelpers::QUEUE_NAME_RE
Instance Attribute Summary collapse
Instance Method Summary
collapse
#clean_aj_args, #csrf_token, #current_page, #current_path?, #display_args, #format_args_short, #format_memory, #h, #handle_job_action, #job_display_class, #locale, #metrics_enabled?, #number_with_delimiter, #page_slice, #paginate, #query_string, #raw_args, #relative_time, #root_path, #rtl?, #t, #truncate, #validate_queue_name!
Constructor Details
#initialize(env) ⇒ Action
Returns a new instance of Action.
20
21
22
23
24
25
|
# File 'lib/side_bro/web/action.rb', line 20
def initialize(env)
@env = env
@request = Rack::Request.new(env)
@response = Rack::Response.new
@response["Content-Type"] = "text/html; charset=utf-8"
end
|
Instance Attribute Details
#env ⇒ Object
Returns the value of attribute env.
14
15
16
|
# File 'lib/side_bro/web/action.rb', line 14
def env
@env
end
|
#nonce ⇒ Object
Returns the value of attribute nonce.
14
15
16
|
# File 'lib/side_bro/web/action.rb', line 14
def nonce
@nonce
end
|
#request ⇒ Object
Returns the value of attribute request.
14
15
16
|
# File 'lib/side_bro/web/action.rb', line 14
def request
@request
end
|
#response ⇒ Object
Returns the value of attribute response.
14
15
16
|
# File 'lib/side_bro/web/action.rb', line 14
def response
@response
end
|
Instance Method Details
#action ⇒ Object
16
17
18
|
# File 'lib/side_bro/web/action.rb', line 16
def action
self
end
|
#erb(template_name) ⇒ Object
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
# File 'lib/side_bro/web/action.rb', line 62
def erb(template_name)
@nonce = SecureRandom.base64(16)
env["side_bro.csp_nonce"] = @nonce
response["Content-Security-Policy"] =
"default-src 'self'; " \
"script-src 'nonce-#{@nonce}'; " \
"style-src 'nonce-#{@nonce}' https://fonts.googleapis.com; " \
"font-src 'self' https://fonts.gstatic.com; " \
"img-src 'self' data:; " \
"connect-src 'self'"
layout = load_template(:layout)
content = render_template(template_name)
response.body = [layout.result_with_hash(content: content, nonce: @nonce, action: self)]
response.finish
end
|
#flash ⇒ Object
38
39
40
|
# File 'lib/side_bro/web/action.rb', line 38
def flash
@flash ||= FlashHash.new(session)
end
|
#halt(*resp) ⇒ Object
47
48
49
50
51
52
53
54
|
# File 'lib/side_bro/web/action.rb', line 47
def halt(*resp)
res = if resp.length == 1 && resp.first.is_a?(Integer)
Rack::Response.new([], resp.first)
else
resp.first
end
throw :halt, res.is_a?(Array) ? res : res.finish
end
|
#json(payload) ⇒ Object
56
57
58
59
60
|
# File 'lib/side_bro/web/action.rb', line 56
def json(payload)
response["Content-Type"] = "application/json; charset=utf-8"
response.body = [JSON.generate(payload)]
throw :halt, response.finish
end
|
#params ⇒ Object
27
28
29
30
31
32
|
# File 'lib/side_bro/web/action.rb', line 27
def params
@params ||= begin
route_params = env[SideBro::Web::Router::ROUTE_PARAMS] || {}
request.params.merge(route_params)
end
end
|
#redirect(location) ⇒ Object
42
43
44
45
|
# File 'lib/side_bro/web/action.rb', line 42
def redirect(location)
response.redirect(location)
throw :halt, response.finish
end
|
#render_partial(name) ⇒ Object
78
79
80
|
# File 'lib/side_bro/web/action.rb', line 78
def render_partial(name)
load_template(:"_#{name}").result(binding)
end
|
#session ⇒ Object
34
35
36
|
# File 'lib/side_bro/web/action.rb', line 34
def session
request.session
end
|