Sha256: 2b6cb940f266701c525d00226748ddabb95b92060a65a15f6575ca36ec4ab446

Contents?: true

Size: 1.5 KB

Versions: 2

Compression:

Stored size: 1.5 KB

Contents

require 'sitehub/collection_methods'
require 'sitehub/candidate_routes'
require 'forwardable'

class SiteHub
  class InvalidProxyDefinitionException < StandardError
  end

  class ConfigError < StandardError
  end

  class Core
    class << self
      # TODO: default action for missing key, throw exception?
      def from_hash(config)
        new do
          extend CollectionMethods
          sitehub_cookie_name config[:sitehub_cookie_name] if config[:sitehub_cookie_name]

          collection!(config, :proxies).each do |proxy|
            mappings.add_route route_builder: CandidateRoutes.from_hash(proxy, sitehub_cookie_name)
          end

          collection(config, :reverse_proxies).each do |proxy|
            reverse_proxy proxy[:downstream_url] => proxy[:path]
          end
        end
      end
    end

    include Equality
    extend Forwardable

    attr_reader :mappings, :reverse_proxies
    def_delegator :mappings, :sitehub_cookie_name

    def initialize(&block)
      @reverse_proxies = {}
      @mappings = Middleware::CandidateRouteMappings.new
      instance_eval(&block) if block
    end

    def build
      Middleware::ReverseProxy.new(mappings.init, reverse_proxies)
    end

    def proxy(opts = {}, &block)
      mapped_path, url = *(opts.respond_to?(:to_a) ? opts.to_a : [opts]).flatten

      mappings.add_route(url: url,
                         mapped_path: mapped_path,
                         &block)
    end

    def reverse_proxy(hash)
      reverse_proxies.merge!(hash)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
sitehub-0.5.0.alpha10 lib/sitehub/core.rb
sitehub-0.5.0.alpha8 lib/sitehub/core.rb