Sha256: 7b09680053fa366630124c185b3fa626671194f8d119bf00733985f85cc07c42

Contents?: true

Size: 1.33 KB

Versions: 3

Compression:

Stored size: 1.33 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)
    end

    def publish(env, response)
      return if umbra_request?(env)
      return unless @config
      return unless @config.request_selector.call(env, response)

      @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 reset!
      @config = nil
      @redis = nil
    end

    private

    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.1.2.pre lib/umbra.rb
umbra-rb-0.1.1.pre lib/umbra.rb
umbra-rb-0.1.0.pre lib/umbra.rb