Sha256: 503625aa06a7ab2a62dfa53af663f0a4d266afe1acd6de6077530cc536997503
Contents?: true
Size: 1.96 KB
Versions: 3
Compression:
Stored size: 1.96 KB
Contents
# frozen_string_literal: true require 'typhoeus' require 'redis' require 'multi_json' module Umbra autoload :Config, 'umbra/config' autoload :Encoder, 'umbra/encoder' autoload :Middleware, 'umbra/middleware' autoload :Publisher, 'umbra/publisher' autoload :Subscriber, 'umbra/subscriber' autoload :RequestBuilder, 'umbra/request_builder' autoload :ShadowRequester, 'umbra/shadow_requester' autoload :SynchronousPublisher, 'umbra/synchronous_publisher' autoload :Version, 'umbra/version' CHANNEL = 'umbra_channel' HEADER_KEY = 'HTTP_X_UMBRA_REQUEST' HEADER_VALUE = 'true' RequestSelector = proc { true } SuppressErrorHandler = proc { nil } class << self attr_reader :config def configure(&block) @config = Config.default(&block) test_redis_connection! end def publish(env, response) return if umbra_request?(env) return unless @config return unless @config.request_selector.call(env, response) env['umbra.request_body'] = request_body(env) @config.publisher.call(env, response) rescue StandardError => e @config.error_handler.call(e, env, response) end def redis @redis ||= Redis.new(@config.redis_options) end def encoder @config.encoder end def logger @config.logger end def reset! @config = nil @redis = nil end private def request_body(env) io = env.fetch('rack.input') io.rewind body = io.read io.rewind body end 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 StandardError => e logger.warn "[umbra] redis is misconfigured: #{e.message}" reset! end def umbra_request?(env) env[HEADER_KEY] == HEADER_VALUE end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
umbra-rb-0.2.0 | lib/umbra.rb |
umbra-rb-0.1.5.pre | lib/umbra.rb |
umbra-rb-0.1.4.pre | lib/umbra.rb |