sharetribe/sharetribe

View on GitHub
lib/rack_middleware/marketplace_lookup.rb

Summary

Maintainability
A
0 mins
Test Coverage
# Appends current marketplace info to env.
#
# Note: Is safe to run, even if there's no current_marketplace
class MarketplaceLookup
  def initialize(app)
    @app = app
  end

  def call(env)
    request = Rack::Request.new(env)
    app_domain = ::URLUtils.strip_port_from_host(::APP_CONFIG.domain)
    host = ::URLUtils.strip_port_from_host(env['HTTP_HOST'])
    marketplace = ::CurrentMarketplaceResolver.resolve_from_host(host, app_domain)

    plan =
      if marketplace
        ::PlanService::API::Api.plans.get_current(community_id: marketplace.id).data
      end

    no_marketplaces =
      if marketplace
        false
      else
        Rails.cache.fetch("ccount", expires_in: 5.minutes) do
          Community.count
        end == 0
      end

    redirect_reason = ::MarketplaceRouter.redirect_reason(
      community: ::MarketplaceRouter.community_hash(marketplace, plan),
      host: request.host,
      no_communities: no_marketplaces,
      app_domain: app_domain)

    @app.call(env.merge!(
                current_marketplace: marketplace,
                current_plan: plan,
                redirect_reason: redirect_reason))
  end
end