class SiteHub::ForwardProxyBuilder

Constants

IGNORING_URL_LABEL_MSG
INVALID_ROUTE_DEF_MSG
INVALID_SPLIT_MSG
ROUTES_WITH_SPLITS_MSG

Attributes

id[R]
mapped_path[R]

Public Class Methods

new(url: nil, mapped_path:, rule: nil, sitehub_cookie_name: nil, &block) click to toggle source
# File lib/sitehub/forward_proxy_builder.rb, line 30
def initialize(url: nil, mapped_path:, rule: nil, sitehub_cookie_name: nil, &block)
  @id = UUID.generate(:compact)
  @mapped_path = mapped_path
  @splits = Collection::SplitRouteCollection.new
  @routes = Collection::RouteCollection.new
  @sitehub_cookie_name = sitehub_cookie_name
  rule(rule) if rule
  default(url: url) if url

  return unless block_given?

  instance_eval(&block)
  raise InvalidDefinitionException unless valid?
end

Public Instance Methods

build() click to toggle source
# File lib/sitehub/forward_proxy_builder.rb, line 86
def build
  if middleware?
    build_with_middleware
    build_default_with_middleware if default_proxy
  end

  self
end
default(url:) click to toggle source
# File lib/sitehub/forward_proxy_builder.rb, line 82
def default(url:)
  default_proxy(forward_proxy(label: :default, url: url))
end
endpoints(collection = nil) click to toggle source
# File lib/sitehub/forward_proxy_builder.rb, line 50
def endpoints(collection = nil)
  return @endpoints || Collection::RouteCollection.new unless collection

  raise InvalidDefinitionException, ROUTES_WITH_SPLITS_MSG if @endpoints && @endpoints != collection
  @endpoints = collection
end
forward_proxy(label:, url:, rule: nil) click to toggle source
# File lib/sitehub/forward_proxy_builder.rb, line 100
def forward_proxy(label:, url:, rule: nil)
  label ||= UUID.generate(:compact)
  ForwardProxy.new(sitehub_cookie_path: sitehub_cookie_path,
                   sitehub_cookie_name: sitehub_cookie_name,
                   id: label.to_sym,
                   rule: rule,
                   mapped_url: url,
                   mapped_path: mapped_path)
end
resolve(id: nil, env:) click to toggle source
# File lib/sitehub/forward_proxy_builder.rb, line 95
def resolve(id: nil, env:)
  id = id.to_s.to_sym
  endpoints[id] || endpoints.resolve(env: env) || default_proxy
end
route(url: nil, label: nil, rule: nil, &block) click to toggle source
# File lib/sitehub/forward_proxy_builder.rb, line 70
def route(url: nil, label: nil, rule: nil, &block)
  endpoint = if block
               raise InvalidDefinitionException, INVALID_ROUTE_DEF_MSG unless rule
               warn(IGNORING_URL_LABEL_MSG) if url || label
               new(rule: rule, &block).build
             else
               forward_proxy(url: url, label: label, rule: rule)
             end

  routes.add(endpoint.id, endpoint)
end
split(percentage:, url: nil, label: nil, &block) click to toggle source
# File lib/sitehub/forward_proxy_builder.rb, line 57
def split(percentage:, url: nil, label: nil, &block)
  raise InvalidDefinitionException, INVALID_SPLIT_MSG unless block || url

  proxy = if block
            warn(IGNORING_URL_LABEL_MSG) if url || label
            new(&block).build
          else
            forward_proxy(label: label, url: url)
          end

  splits.add proxy.id, proxy, percentage
end
valid?() click to toggle source
# File lib/sitehub/forward_proxy_builder.rb, line 45
def valid?
  return true if default_proxy
  endpoints.valid?
end

Private Instance Methods

build_default_with_middleware() click to toggle source
# File lib/sitehub/forward_proxy_builder.rb, line 129
def build_default_with_middleware
  default_proxy(apply_middleware(default_proxy))
end
build_with_middleware() click to toggle source
# File lib/sitehub/forward_proxy_builder.rb, line 120
def build_with_middleware
  endpoints.transform do |proxy|
    apply_middleware(proxy).tap do |wrapped_proxy|
      wrapped_proxy.extend(Rules, Resolver)
      wrapped_proxy.rule(proxy.rule)
    end
  end
end
new(rule: nil, &block) click to toggle source
# File lib/sitehub/forward_proxy_builder.rb, line 133
def new(rule: nil, &block)
  self.class.new(mapped_path: mapped_path, rule: rule, &block)
end
routes() click to toggle source
# File lib/sitehub/forward_proxy_builder.rb, line 112
def routes
  endpoints(@routes)
end
splits() click to toggle source
# File lib/sitehub/forward_proxy_builder.rb, line 116
def splits
  endpoints(@splits)
end