Sha256: 374ad59bf11cfe8ce7cb574fd6fc70c02b5ce7b464298ad6fe8720e6c920a2e5

Contents?: true

Size: 1.66 KB

Versions: 2

Compression:

Stored size: 1.66 KB

Contents

# frozen_string_literal: true

require "sea_shanty/errors"
require "sea_shanty/configuration"
require "sea_shanty/request_store"
require "sea_shanty/version"

module SeaShanty
  TRUE_VALUES = %w[1 yes y true]

  module_function

  def configuration
    @configuration ||= Configuration.new
  end

  def configure(&block)
    yield configuration

    configuration.bypass = configuration_overwrite(ENV["SEA_SHANTY_BYPASS"], configuration.bypass)
    configuration.readonly = configuration_overwrite(ENV["SEA_SHANTY_READONLY"], configuration.readonly)
  end

  def intercept(identifier)
    return if intercepting.include?(identifier)
    interceptors.fetch(identifier).intercept!(request_store)
    intercepting << identifier
  rescue KeyError
    raise(
      UnknownInterceptor,
      "Cannot find an interceptor for #{identifier}. Available interceptors are: [#{interceptors.keys.join(", ")}]"
    )
  end

  def intercepting
    @intercepting ||= []
  end

  def interceptors
    @interceptors ||= {}
  end

  def register_interceptor(identifier, interceptor)
    interceptors[identifier] = interceptor
  end

  def remove(identifier)
    return unless intercepting.include?(identifier)
    interceptors.fetch(identifier).remove
    intercepting.delete(identifier)
  rescue KeyError
    raise(
      UnknownInterceptor,
      "Cannot find an interceptor for #{identifier}. Available interceptors are: [#{interceptors.keys.join(", ")}]"
    )
  end

  def request_store
    @request_store ||= RequestStore.new(configuration)
  end

  def configuration_overwrite(env_var, value)
    if env_var.nil? || env_var.empty?
      value
    else
      TRUE_VALUES.include?(env_var.downcase)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
sea_shanty-0.1.1 lib/sea_shanty.rb
sea_shanty-0.1.0 lib/sea_shanty.rb