Class: RailsAiBridge::Watcher
- Inherits:
-
Object
- Object
- RailsAiBridge::Watcher
- Defined in:
- lib/rails_ai_bridge/watcher.rb,
lib/rails_ai_bridge/watcher/watch_directories.rb,
lib/rails_ai_bridge/watcher/bridge_regenerator.rb
Overview
File system watcher that regenerates bridge files when key files change.
Requires the listen gem (optional dependency).
Orchestrates WatchDirectories, the Listen listener loop, and BridgeRegenerator for regeneration work.
Defined Under Namespace
Classes: BridgeRegenerator, WatchDirectories
Constant Summary collapse
- WATCH_PATTERNS =
Returns relative path segments watched by default (same as RailsAiBridge::Watcher::WatchDirectories::DEFAULT_PATTERNS).
WatchDirectories::DEFAULT_PATTERNS
Instance Attribute Summary collapse
-
#app ⇒ Rails::Application
readonly
Host application.
Instance Method Summary collapse
-
#initialize(app = nil) ⇒ Watcher
constructor
A new instance of Watcher.
-
#start ⇒ void
Starts the Listen loop until SIGINT (Interrupt).
Constructor Details
#initialize(app = nil) ⇒ Watcher
Returns a new instance of Watcher.
17 18 19 20 |
# File 'lib/rails_ai_bridge/watcher.rb', line 17 def initialize(app = nil) @app = app || Rails.application @regenerator = BridgeRegenerator.new(@app) end |
Instance Attribute Details
#app ⇒ Rails::Application (readonly)
Returns host application.
14 15 16 |
# File 'lib/rails_ai_bridge/watcher.rb', line 14 def app @app end |
Instance Method Details
#start ⇒ void
This method returns an undefined value.
Starts the Listen loop until SIGINT (Interrupt). Exits the process if listen is missing.
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/rails_ai_bridge/watcher.rb', line 25 def start require 'listen' root = app.root.to_s dirs = WatchDirectories.resolve(root) if dirs.empty? warn '[rails-ai-bridge] No watchable directories found' return end warn '[rails-ai-bridge] Watching for changes...' warn "[rails-ai-bridge] Directories: #{dirs.map { |d| d.sub("#{root}/", '') }.join(', ')}" listener = Listen.to(*dirs) do |modified, added, removed| next if (modified + added + removed).empty? handle_change end listener.start loop do sleep 1 rescue Interrupt warn "\n[rails-ai-bridge] Stopping watcher..." listener.stop break end rescue LoadError warn 'Error: The `listen` gem is required for watch mode.' warn "Add to your Gemfile: gem 'listen', group: :development" raise SystemExit, 1 end |