Module: OpenGemdocs::Yard

Defined in:
lib/open_gemdocs/yard.rb

Constant Summary collapse

SERVER_COMMAND =
"yard server --daemon"

Class Method Summary collapse

Class Method Details

.browse_gem(gem_name) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
# File 'lib/open_gemdocs/yard.rb', line 9

def browse_gem(gem_name)
  if server_running?
    puts "Yard server is already running. Opening browser..."
  else
    puts "Starting Yard server in the background..."
    start_yard_server
    sleep 2 # Give the server some time to start
  end
  system("open http://localhost:8808/docs/#{gem_name}")
  puts "  When you're done, remember to stop the server with `open-gem-docs --stop`"
end

.find_yard_pidsObject



31
32
33
34
# File 'lib/open_gemdocs/yard.rb', line 31

def find_yard_pids
  # Find pids bound to port 8808
  `lsof -i TCP:8808 | grep -E "^ruby.*:8808"`.strip.split("\n").map { |line| line.split(/\s+/)[1] }
end

.server_running?Boolean

Returns:

  • (Boolean)


29
# File 'lib/open_gemdocs/yard.rb', line 29

def server_running? = find_yard_pids.any?

.start_yard_serverObject



21
22
23
24
25
26
27
# File 'lib/open_gemdocs/yard.rb', line 21

def start_yard_server
  if File.exist?("Gemfile.lock")
    `#{SERVER_COMMAND} --gemfile`
  else
    `#{SERVER_COMMAND} --gems`
  end
end

.stop_serverObject



50
51
52
53
54
55
56
57
58
59
# File 'lib/open_gemdocs/yard.rb', line 50

def stop_server
  yard_pids = find_yard_pids
  if yard_pids.any?
    puts "Stopping Yard server processes: #{yard_pids.join(", ")}"
    `kill #{yard_pids.join(" ")}`
    puts "Yard server processes stopped."
  else
    puts "No Yard server processes found to stop"
  end
end

.yard_server_directoryObject



36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/open_gemdocs/yard.rb', line 36

def yard_server_directory
  pids = find_yard_pids
  return nil if pids.empty?

  # Get the working directory of the first Yard process
  pid = pids.first
  cwd_line = `lsof -p #{pid} 2>/dev/null | grep cwd`.strip
  return nil if cwd_line.empty?

  # Extract the directory path from lsof output
  parts = cwd_line.split(/\s+/)
  parts.last if parts.length >= 9
end