class Sidekiq::WebAction

Constants

RACK_SESSION

Attributes

block[RW]
env[RW]
type[RW]

Public Class Methods

new(env, block) click to toggle source
# File lib/sidekiq/web/action.rb, line 84
def initialize(env, block)
  @_erb = false
  @env = env
  @block = block
  @files ||= {}
end

Public Instance Methods

erb(content, options = {}) click to toggle source
# File lib/sidekiq/web/action.rb, line 47
    def erb(content, options = {})
      if content.is_a? Symbol
        unless respond_to?(:"_erb_#{content}")
          views = options[:views] || Web.settings.views
          filename = "#{views}/#{content}.erb"
          src = ERB.new(File.read(filename)).src

          # Need to use lineno less by 1 because erb generates a
          # comment before the source code.
          WebAction.class_eval <<-RUBY, filename, -1 # standard:disable Style/EvalWithLocation
            def _erb_#{content}
              #{src}
            end
          RUBY
        end
      end

      if @_erb
        _erb(content, options[:locals])
      else
        @_erb = true
        content = _erb(content, options[:locals])

        _render { content }
      end
    end
halt(res) click to toggle source
# File lib/sidekiq/web/action.rb, line 17
def halt(res)
  throw :halt, [res, {Rack::CONTENT_TYPE => "text/plain"}, [res.to_s]]
end
json(payload) click to toggle source
# File lib/sidekiq/web/action.rb, line 80
def json(payload)
  [200, {Rack::CONTENT_TYPE => "application/json", Rack::CACHE_CONTROL => "private, no-store"}, [Sidekiq.dump_json(payload)]]
end
params() click to toggle source
# File lib/sidekiq/web/action.rb, line 30
def params
  indifferent_hash = Hash.new { |hash, key| hash[key.to_s] if Symbol === key }

  indifferent_hash.merge! request.params
  route_params.each { |k, v| indifferent_hash[k.to_s] = v }

  indifferent_hash
end
redirect(location) click to toggle source
# File lib/sidekiq/web/action.rb, line 21
def redirect(location)
  throw :halt, [302, {Web::LOCATION => "#{request.base_url}#{location}"}, []]
end
reload_page() click to toggle source
# File lib/sidekiq/web/action.rb, line 25
def reload_page
  current_location = request.referer.gsub(request.base_url, "")
  redirect current_location
end
render(engine, content, options = {}) click to toggle source
# File lib/sidekiq/web/action.rb, line 74
def render(engine, content, options = {})
  raise "Only erb templates are supported" if engine != :erb

  erb(content, options)
end
request() click to toggle source
# File lib/sidekiq/web/action.rb, line 13
def request
  @request ||= ::Rack::Request.new(env)
end
route_params() click to toggle source
# File lib/sidekiq/web/action.rb, line 39
def route_params
  env[WebRouter::ROUTE_PARAMS]
end
session() click to toggle source
# File lib/sidekiq/web/action.rb, line 43
def session
  env[RACK_SESSION]
end
settings() click to toggle source
# File lib/sidekiq/web/action.rb, line 9
def settings
  Web.settings
end

Private Instance Methods

_erb(file, locals) click to toggle source
# File lib/sidekiq/web/action.rb, line 93
def _erb(file, locals)
  locals&.each { |k, v| define_singleton_method(k) { v } unless singleton_methods.include? k }

  if file.is_a?(String)
    ERB.new(file).result(binding)
  else
    send(:"_erb_#{file}")
  end
end