Sha256: 3f0dc42033ccd02f2b685ed2fb2616e93146df41527b7d38c940cf26c6281d83

Contents?: true

Size: 952 Bytes

Versions: 1

Compression:

Stored size: 952 Bytes

Contents

require 'active_support'
require 'sitehub/config_server'
class SiteHub
  module Middleware
    class ConfigLoader
      attr_reader :config_server, :app, :cache, :caching_options

      def initialize(_app, config_server_url, caching_options:)
        @config_server = ConfigServer.new(config_server_url)
        @cache = ActiveSupport::Cache::MemoryStore.new(size: 1.megabytes)
        @caching_options = caching_options
      end

      def call(env)
        begin
          load_config
        rescue ConfigServer::Error => e
          if @app
            env[ERRORS] << e.message
          else
            raise e unless @app
          end
        end

        @app.call env
      end

      # TODO: handle errors connecting to the config server
      def load_config
        config = cache.fetch(:sitehub_config, caching_options) do
          config_server.get
        end

        @app = Core.from_hash(config).build
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sitehub-0.5.0.alpha8 lib/sitehub/middleware/config_loader.rb