Module: HttpDecoy::Minitest::ClassMethods

Defined in:
lib/http_decoy/minitest.rb

Instance Method Summary collapse

Instance Method Details

#_http_decoy_install_hooksObject



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/http_decoy/minitest.rb', line 76

def _http_decoy_install_hooks
  return if @_http_decoy_hooks_installed

  @_http_decoy_hooks_installed = true

  define_method(:setup) do
    super()
    @_http_decoy_servers       = {}
    @_http_decoy_webmock_stubs = {}

    self.class._http_decoy_route_maps.each do |server_name, route_map|
      server = Server.new(route_map)
      server.start
      stub = WebMockIntegration.setup(server)
      @_http_decoy_servers[server_name] = server
      @_http_decoy_webmock_stubs[server_name] = stub
    end
  end

  define_method(:teardown) do
    (@_http_decoy_servers || {}).each_key do |server_name|
      server = @_http_decoy_servers[server_name]
      stub   = @_http_decoy_webmock_stubs[server_name]
      WebMockIntegration.teardown(stub)
      server&.stop
    end
    super()
  end
end

#_http_decoy_register(name, route_map) ⇒ Object

Internal: register a pre-built RouteMap and install setup/teardown (once per class) that start/stop every registered server. Called by both the fake_server macro and Definition#minitest_helpers.



67
68
69
70
# File 'lib/http_decoy/minitest.rb', line 67

def _http_decoy_register(name, route_map)
  _http_decoy_route_maps[name] = route_map
  _http_decoy_install_hooks
end

#_http_decoy_route_mapsObject



72
73
74
# File 'lib/http_decoy/minitest.rb', line 72

def _http_decoy_route_maps
  @_http_decoy_route_maps ||= {}
end

#fake_server(name) ⇒ Object

Class-level macro. Evaluates the block into a RouteMap once at class-load time, then registers it for the shared setup/teardown hooks.



58
59
60
61
62
# File 'lib/http_decoy/minitest.rb', line 58

def fake_server(name, &)
  route_map = RouteMap.new
  route_map.instance_eval(&)
  _http_decoy_register(name, route_map)
end