class WebValve::Manager
@api private
Public Instance Methods
allow_url(url)
click to toggle source
# File lib/webvalve/manager.rb, line 20 def allow_url(url) raise "#{url} already registered" if allowlisted_urls.include?(url) allowlisted_urls << url end
allowing?()
click to toggle source
@api private
# File lib/webvalve/manager.rb, line 65 def allowing? !in_always_intercepting_env? && explicitly_enabled? && services_enabled_by_default? end
allowlisted_urls()
click to toggle source
@api private
# File lib/webvalve/manager.rb, line 89 def allowlisted_urls @allowlisted_urls ||= Set.new end
clear!()
click to toggle source
@api private
# File lib/webvalve/manager.rb, line 76 def clear! allowlisted_urls.clear fake_service_configs.clear stubbed_urls.clear WebMock.reset! end
enabled?()
click to toggle source
@api private
# File lib/webvalve/manager.rb, line 55 def enabled? in_always_intercepting_env? || explicitly_enabled? end
fake_service_configs()
click to toggle source
@api private
# File lib/webvalve/manager.rb, line 84 def fake_service_configs @fake_service_configs ||= [] end
intercepting?()
click to toggle source
@api private
# File lib/webvalve/manager.rb, line 60 def intercepting? in_always_intercepting_env? || (explicitly_enabled? && !services_enabled_by_default?) end
register(fake_service_class_name, **args)
click to toggle source
# File lib/webvalve/manager.rb, line 14 def register(fake_service_class_name, **args) raise "register must be called with a string to comply with Rails autoloading" unless fake_service_class_name.is_a?(String) raise "#{fake_service_class_name.inspect} already registered" if fake_service_configs.any? { |c| c.service_class_name == fake_service_class_name } fake_service_configs << FakeServiceConfig.new(service_class_name: fake_service_class_name, **args) end
reset!()
click to toggle source
@api private
# File lib/webvalve/manager.rb, line 70 def reset! clear! setup end
setup()
click to toggle source
# File lib/webvalve/manager.rb, line 25 def setup return unless enabled? load_configs! if intercepting? fake_service_configs.each do |config| if !WebValve.env.test? && config.explicitly_enabled? allowlist_service config else webmock_service config end end WebMock.disable_net_connect! webmock_disable_options WebMock.enable! end if allowing? fake_service_configs.each do |config| if config.explicitly_disabled? webmock_service config end end if fake_service_configs.any?(&:explicitly_disabled?) WebMock.allow_net_connect! WebMock.enable! end end end
Private Instance Methods
allowlist_service(config)
click to toggle source
# File lib/webvalve/manager.rb, line 146 def allowlist_service(config) allowlisted_urls << config.service_url end
allowlisted_url_regexps()
click to toggle source
# File lib/webvalve/manager.rb, line 133 def allowlisted_url_regexps allowlisted_urls.map { |url| url_to_regexp url } end
ensure_non_duplicate_stub(config)
click to toggle source
# File lib/webvalve/manager.rb, line 154 def ensure_non_duplicate_stub(config) raise "Invalid config for #{config.service_class_name}. Already stubbed url #{config.full_url}" if stubbed_urls.include?(config.full_url) stubbed_urls << config.full_url end
explicitly_enabled?()
click to toggle source
# File lib/webvalve/manager.rb, line 95 def explicitly_enabled? ENABLED_VALUES.include?(ENV['WEBVALVE_ENABLED']) end
in_always_intercepting_env?()
click to toggle source
# File lib/webvalve/manager.rb, line 113 def in_always_intercepting_env? if WebValve.env.in?(ALWAYS_ENABLED_ENVS) if ENV.key? 'WEBVALVE_ENABLED' WebValve.logger.warn(<<~MESSAGE) WARNING: Ignoring WEBVALVE_ENABLED environment variable setting (#{ENV['WEBVALVE_ENABLED']}) WebValve is always enabled in development and test environments. MESSAGE end true else false end end
load_configs!()
click to toggle source
# File lib/webvalve/manager.rb, line 159 def load_configs! WebValve.config_paths.each do |root| path = root.join('config', 'webvalve.rb').to_s load path if File.exist?(path) end end
services_enabled_by_default?()
click to toggle source
# File lib/webvalve/manager.rb, line 99 def services_enabled_by_default? if WebValve.env.in?(ALWAYS_ENABLED_ENVS) if ENV.key? 'WEBVALVE_SERVICE_ENABLED_DEFAULT' WebValve.logger.warn(<<~MESSAGE) WARNING: Ignoring WEBVALVE_SERVICE_ENABLED_DEFAULT environment variable setting (#{ENV['WEBVALVE_SERVICE_ENABLED_DEFAULT']}) WebValve is always enabled in intercepting mode in development and test environments. MESSAGE end false else ENABLED_VALUES.include?(ENV.fetch('WEBVALVE_SERVICE_ENABLED_DEFAULT', '1')) end end
stubbed_urls()
click to toggle source
# File lib/webvalve/manager.rb, line 166 def stubbed_urls @stubbed_urls ||= Set.new end
url_to_regexp(url)
click to toggle source
# File lib/webvalve/manager.rb, line 150 def url_to_regexp(url) %r(\A#{Regexp.escape url}) end
webmock_disable_options()
click to toggle source
# File lib/webvalve/manager.rb, line 127 def webmock_disable_options { allow_localhost: true }.tap do |opts| opts[:allow] = allowlisted_url_regexps unless WebValve.env.test? end end
webmock_service(config)
click to toggle source
# File lib/webvalve/manager.rb, line 137 def webmock_service(config) ensure_non_duplicate_stub(config) WebMock.stub_request( :any, url_to_regexp(config.service_url) ).to_rack(FakeServiceWrapper.new(config)) end