Class: Sidekiq::Web::Action
- Inherits:
-
Object
- Object
- Sidekiq::Web::Action
- Defined in:
- lib/sidekiq/web/action.rb
Overview
These instance methods are available to all executing ERB templates.
Instance Attribute Summary collapse
-
#block ⇒ Object
Returns the value of attribute block.
-
#env ⇒ Object
Returns the value of attribute env.
Instance Method Summary collapse
- #config ⇒ Object
- #erb(content, options = {}) ⇒ Object
-
#flash ⇒ Object
flash { “Some message to show on redirect” }.
- #flash? ⇒ Boolean
- #get_flash ⇒ Object
- #halt(res) ⇒ Object
- #header(key, value) ⇒ Object
-
#initialize(env, block) ⇒ Action
constructor
A new instance of Action.
- #json(payload) ⇒ Object
- #logger ⇒ Object
- #params ⇒ Object
-
#redirect(location) ⇒ Object
internal redirect.
-
#redirect_to(url) ⇒ Object
external redirect.
- #reload_page ⇒ Object
- #render(engine, content, options = {}) ⇒ Object
- #request ⇒ Object
-
#route_params(key) ⇒ Object
variables embedded in path, ‘/metrics/:name` uses Symbol keys, no Strings!.
- #session ⇒ Object
-
#url_params(key) ⇒ Object
stuff after ? or form input uses String keys, no Symbols!.
Constructor Details
#initialize(env, block) ⇒ Action
Returns a new instance of Action.
13 14 15 16 17 |
# File 'lib/sidekiq/web/action.rb', line 13 def initialize(env, block) @_erb = false @env = env @block = block end |
Instance Attribute Details
#block ⇒ Object
Returns the value of attribute block.
11 12 13 |
# File 'lib/sidekiq/web/action.rb', line 11 def block @block end |
#env ⇒ Object
Returns the value of attribute env.
11 12 13 |
# File 'lib/sidekiq/web/action.rb', line 11 def env @env end |
Instance Method Details
#config ⇒ Object
19 20 21 |
# File 'lib/sidekiq/web/action.rb', line 19 def config env[:web_config] end |
#erb(content, options = {}) ⇒ Object
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 |
# File 'lib/sidekiq/web/action.rb', line 116 def erb(content, = {}) if content.is_a? Symbol unless respond_to?(:"_erb_#{content}") views = [:views] || Web.views filename = "#{views}/#{content}.html.erb" src = ERB.new(File.read(filename)).src # Need to use lineno less by 1 because erb generates a # comment before the source code. Action.class_eval " def _erb_\#{content}\n \#{src}\n end\n RUBY\n end\n end\n\n if @_erb\n _erb(content, options[:locals])\n else\n @_erb = true\n content = _erb(content, options[:locals])\n\n _render { content }\n end\nend\n", filename, -1 # standard:disable Style/EvalWithLocation |
#flash ⇒ Object
flash { “Some message to show on redirect” }
102 103 104 105 106 |
# File 'lib/sidekiq/web/action.rb', line 102 def flash msg = yield logger.info msg session[:skq_flash] = msg end |
#flash? ⇒ Boolean
108 109 110 |
# File 'lib/sidekiq/web/action.rb', line 108 def flash? session&.[](:skq_flash) end |
#get_flash ⇒ Object
112 113 114 |
# File 'lib/sidekiq/web/action.rb', line 112 def get_flash @flash ||= session.delete(:skq_flash) end |
#halt(res) ⇒ Object
27 28 29 |
# File 'lib/sidekiq/web/action.rb', line 27 def halt(res) throw :halt, [res, {"content-type" => "text/plain"}, [res.to_s]] end |
#header(key, value) ⇒ Object
36 37 38 |
# File 'lib/sidekiq/web/action.rb', line 36 def header(key, value) env["response_headers"][key] = value.to_s end |
#json(payload) ⇒ Object
149 150 151 152 153 |
# File 'lib/sidekiq/web/action.rb', line 149 def json(payload) [200, {"content-type" => "application/json", "cache-control" => "private, no-store"}, [Sidekiq.dump_json(payload)]] end |
#logger ⇒ Object
97 98 99 |
# File 'lib/sidekiq/web/action.rb', line 97 def logger Sidekiq.logger end |
#params ⇒ Object
64 65 66 67 |
# File 'lib/sidekiq/web/action.rb', line 64 def params warn { "Direct access to Rack parameters is discouraged, use `url_params` or `route_params` (at #{caller(3..3).first})" } request.params end |
#redirect(location) ⇒ Object
internal redirect
41 42 43 |
# File 'lib/sidekiq/web/action.rb', line 41 def redirect(location) throw :halt, [302, {"location" => "#{request.base_url}#{location}"}, []] end |
#redirect_to(url) ⇒ Object
external redirect
32 33 34 |
# File 'lib/sidekiq/web/action.rb', line 32 def redirect_to(url) throw :halt, [302, {"location" => url}, []] end |
#reload_page ⇒ Object
45 46 47 48 |
# File 'lib/sidekiq/web/action.rb', line 45 def reload_page current_location = request.referer.gsub(request.base_url, "") redirect current_location end |
#render(engine, content, options = {}) ⇒ Object
143 144 145 146 147 |
# File 'lib/sidekiq/web/action.rb', line 143 def render(engine, content, = {}) raise "Only erb templates are supported" if engine != :erb erb(content, ) end |
#request ⇒ Object
23 24 25 |
# File 'lib/sidekiq/web/action.rb', line 23 def request @request ||= ::Rack::Request.new(env) end |
#route_params(key) ⇒ Object
variables embedded in path, ‘/metrics/:name` uses Symbol keys, no Strings!
59 60 61 62 |
# File 'lib/sidekiq/web/action.rb', line 59 def route_params(key) warn { "Route parameter `#{key}` should be accessed via Symbol, not String (at #{caller(3..3).first})" } if key.is_a?(String) env["rack.route_params"][key.to_sym] end |
#session ⇒ Object
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 |
# File 'lib/sidekiq/web/action.rb', line 69 def session env["rack.session"] || fail(" Sidekiq::Web needs a valid Rack session. If this is a Rails app, make\n sure you mount Sidekiq::Web *inside* your application routes:\n\n\n Rails.application.routes.draw do\n mount Sidekiq::Web => \"/sidekiq\"\n ....\n end\n\n\n If this is a Rails app in API mode, you need to enable sessions.\n\n https://guides.rubyonrails.org/api_app.html#using-session-middlewares\n\n If this is a bare Rack app, use a session middleware before Sidekiq::Web:\n\n # first, use IRB to create a shared secret key for sessions and commit it\n require 'securerandom'; File.open(\".session.key\", \"w\") {|f| f.write(SecureRandom.hex(32)) }\n\n # now use the secret with a session cookie middleware\n use Rack::Session::Cookie, secret: File.read(\".session.key\"), same_site: true, max_age: 86400\n run Sidekiq::Web\n\n EOM\nend\n") |
#url_params(key) ⇒ Object
stuff after ? or form input uses String keys, no Symbols!
52 53 54 55 |
# File 'lib/sidekiq/web/action.rb', line 52 def url_params(key) warn { "URL parameter `#{key}` should be accessed via String, not Symbol (at #{caller(3..3).first})" } if key.is_a?(Symbol) request.params[key.to_s] end |