module Umbra

Constants

CHANNEL
HEADER_KEY
HEADER_VALUE
RequestSelector
SuppressErrorHandler
VERSION

Attributes

config[R]

Public Class Methods

configure(&block) click to toggle source
# File lib/umbra.rb, line 23
def configure(&block)
  @config = Config.default(&block)

  test_redis_connection!
end
encoder() click to toggle source
# File lib/umbra.rb, line 46
def encoder
  @config.encoder
end
logger() click to toggle source
# File lib/umbra.rb, line 50
def logger
  @config.logger
end
publish(env) click to toggle source
# File lib/umbra.rb, line 29
def publish(env)
  return if umbra_request?(env)

  return unless @config
  return unless @config.request_selector.call(env)

  env["umbra.request_body"] = request_body(env)

  @config.publisher.call(env)
rescue => e
  @config.error_handler.call(e, env)
end
redis() click to toggle source
# File lib/umbra.rb, line 42
def redis
  @redis ||= Redis.new(@config.redis_options)
end
reset!() click to toggle source
# File lib/umbra.rb, line 54
def reset!
  @config = nil
  @redis = nil
end

Private Class Methods

request_body(env) click to toggle source
# File lib/umbra.rb, line 61
def request_body(env)
  io = env.fetch("rack.input")
  io.rewind
  body = io.read
  io.rewind

  body
end
test_redis_connection!() click to toggle source
# File lib/umbra.rb, line 70
def test_redis_connection!
  logger.info "[umbra] Testing redis connection..."
  redis.ping
  logger.info "[umbra] redis is alive!"
rescue Redis::BaseError => e
  logger.warn "[umbra] error while connecting to redis: #{e.message}"
  reset!
rescue => e
  logger.warn "[umbra] redis is misconfigured: #{e.message}"
  reset!
end
umbra_request?(env) click to toggle source
# File lib/umbra.rb, line 82
def umbra_request?(env)
  env[HEADER_KEY] == HEADER_VALUE
end