Sha256: cf19ea7e8339d106dbe0e3ba4ea3cff9e8dfb85947f015116a01a96d5addebe3
Contents?: true
Size: 1.67 KB
Versions: 6
Compression:
Stored size: 1.67 KB
Contents
require 'webmock' require 'singleton' require 'set' module WebValve # @api private class Manager include Singleton def register(fake_service, **args) raise "#{fake_service.inspect} already registered" if fake_service_configs.any? { |c| c.service == fake_service } fake_service_configs << FakeServiceConfig.new(service: fake_service, **args) end def whitelist_url(url) raise "#{url} already registered" if whitelisted_urls.include?(url) whitelisted_urls << url end def setup fake_service_configs.each do |config| if config.should_intercept? webmock_service config else whitelist_service config end end WebMock.enable! WebMock.disable_net_connect! webmock_disable_options end # @api private def reset whitelisted_urls.clear fake_service_configs.clear end # @api private def fake_service_configs @fake_service_configs ||= [] end # @api private def whitelisted_urls @whitelisted_urls ||= Set.new end private def webmock_disable_options { allow_localhost: true }.tap do |opts| opts[:allow] = whitelisted_url_regexps unless WebValve.env.test? end end def whitelisted_url_regexps whitelisted_urls.map { |url| url_to_regexp url } end def webmock_service(config) WebMock.stub_request( :any, url_to_regexp(config.service_url) ).to_rack(FakeServiceWrapper.new(config.service)) end def whitelist_service(config) whitelisted_urls << config.service_url end def url_to_regexp(url) %r(\A#{Regexp.escape url}) end end end
Version data entries
6 entries across 6 versions & 1 rubygems