open-in-editor-bridge 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b59090b703a55c7194b9898ffc6753cda0df2a3e3b1d1d311c1cd0dcd0fa57d9
4
- data.tar.gz: d57211d78ebeb9048b963a853621ba575825115c45fdd2a651d75961b2062ee6
3
+ metadata.gz: 0ec2cde5e04f7296d806dcfeff4926492de642d4b09983478295b3bc45a68f08
4
+ data.tar.gz: 60e87f9f41f6207bd75bb58fce1c0daa4118af0b3bbbd4cb64030eedd83a3f56
5
5
  SHA512:
6
- metadata.gz: 86eccd454213ccc64074b85d2eb4a91ddfaec7bb879c0e7e7da0dc53a924ab9d926658d6ece2600ce699e2f5f46b97565d4bd17f1b9dd6358f15fc9bfca78224
7
- data.tar.gz: 4be766b7b327ee39aa94f763979ab93b46a9a6c226774a80e3773c303f7f24d58870c6700e2685fc1399afcd8ee8424bfc47f976fffc99f25fb121f40ffb280b
6
+ metadata.gz: 8e767cca6409335c11dee8e522f1ba6b04e973ec638bad090a089ac2e998544ac347287805f4475a9739cd61448d6dbe3cd13577a95dde1733b4def30b040959
7
+ data.tar.gz: 5b48df59f4d402e62c3cff453ba6523b4c775c4744c00c48324f0cbb145f258a8d97bae825542fd2b44967614c9dfa880955793a5356545107a5a646c4c7e6b8
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class OpenInEditorBridge
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.1"
5
5
  end
@@ -98,7 +98,7 @@ class OpenInEditorBridge
98
98
  end
99
99
 
100
100
  def shutdown
101
- pid = running_pid
101
+ pid = running_pid(validate_health: true)
102
102
  return unless pid
103
103
 
104
104
  Process.kill("TERM", -pid)
@@ -253,7 +253,7 @@ class OpenInEditorBridge
253
253
  def respond_to_get_request(socket, path, params)
254
254
  case path
255
255
  when HEALTH_PATH
256
- write_json_response(socket, payload: { ok: true })
256
+ write_json_response(socket, payload: { ok: true, pid: Process.pid })
257
257
  when OPEN_IN_EDITOR_PATH
258
258
  open_in_editor(socket, params)
259
259
  else
@@ -281,7 +281,7 @@ class OpenInEditorBridge
281
281
  return nil unless File.exist?(config[:pid_file])
282
282
 
283
283
  pid = Integer(File.read(config[:pid_file]).strip)
284
- return pid if process_running?(pid) && (!validate_health || bridge_healthy?)
284
+ return pid if process_running?(pid) && (!validate_health || bridge_healthy?(expected_pid: pid))
285
285
 
286
286
  delete_pid_file
287
287
  nil
@@ -301,7 +301,7 @@ class OpenInEditorBridge
301
301
  deadline = Process.clock_gettime(Process::CLOCK_MONOTONIC) + config[:startup_timeout]
302
302
  loop do
303
303
  raise StartupError, "Editor bridge failed to start. See #{config[:log_file]}." unless process_running?(pid)
304
- return if bridge_healthy?
304
+ return if bridge_healthy?(expected_pid: pid)
305
305
 
306
306
  raise StartupError, "Editor bridge did not become ready." if Process.clock_gettime(Process::CLOCK_MONOTONIC) >= deadline
307
307
  sleep 0.05
@@ -317,16 +317,18 @@ class OpenInEditorBridge
317
317
  end
318
318
  end
319
319
 
320
- def bridge_healthy?
320
+ def bridge_healthy?(expected_pid: nil)
321
321
  socket = TCPSocket.new("127.0.0.1", config[:port])
322
322
  response = Timeout.timeout(0.25) do
323
323
  socket.write("GET /health HTTP/1.1\r\nHost: 127.0.0.1\r\nConnection: close\r\n\r\n")
324
324
  socket.read
325
325
  end
326
326
  headers, body = response.split("\r\n\r\n", 2)
327
+ payload = JSON.parse(body.to_s)
327
328
  headers&.start_with?("HTTP/1.1 200 ") &&
328
329
  headers.lines.any? { |line| line.casecmp("X-Open-In-Editor-Bridge: 1\r\n").zero? } &&
329
- JSON.parse(body.to_s).fetch("ok") == true
330
+ payload.fetch("ok") == true &&
331
+ (expected_pid.nil? || payload.fetch("pid") == expected_pid)
330
332
  rescue Errno::ECONNREFUSED, JSON::ParserError, KeyError, Timeout::Error
331
333
  false
332
334
  ensure
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: open-in-editor-bridge
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marlen Brunner