Module: OpenGemdocs::Yard
- Defined in:
- lib/open_gemdocs/yard.rb
Constant Summary collapse
- SERVER_COMMAND =
"yard server --daemon"
Class Method Summary collapse
- .browse_gem(gem_name) ⇒ Object
- .find_yard_pids ⇒ Object
- .server_running? ⇒ Boolean
- .start_yard_server ⇒ Object
- .stop_server ⇒ Object
- .yard_server_directory ⇒ Object
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_pids ⇒ Object
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
29 |
# File 'lib/open_gemdocs/yard.rb', line 29 def server_running? = find_yard_pids.any? |
.start_yard_server ⇒ Object
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_server ⇒ Object
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_directory ⇒ Object
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 |