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 |