Skip to content

Commit

Permalink
require consumers during the supervisor boot
Browse files Browse the repository at this point in the history
  • Loading branch information
marcosgz committed Nov 5, 2024
1 parent 5543d4b commit 2f0906a
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 42 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@
/spec/reports/
/tmp/
*.gem
/app/consumers/
2 changes: 1 addition & 1 deletion lib/lepus/cli.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ class CLI < Thor
method_option :pidfile, type: :string, default: nil
method_option :require_file, type: :string, aliases: "-r", default: nil

desc "start FirstConsumer,SeconConsumer ... ,NthConsumer", "Run Consumer"
desc "start FirstConsumer,SecondConsumer ... ,NthConsumer", "Run Consumer"
default_command :start

def start(consumers = "")
Expand Down
19 changes: 12 additions & 7 deletions lib/lepus/supervisor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,8 @@ class Supervisor < Processes::Base
class << self
def start(**options)
# Lepus.config.supervisor = true
configuration = Config.new(**options)

if configuration.consumers.any?
new(configuration).tap(&:start)
else
abort "No consumers configured. Exiting..."
end
config = Config.new(**options)
new(config).tap(&:start)
end
end

Expand Down Expand Up @@ -61,12 +56,22 @@ def boot
end
end

setup_consumers

run_process_callbacks(:boot) do
sync_std_streams
end
end
end

def setup_consumers
Lepus.eager_load_consumers!

if configuration.consumers.empty?
abort "No consumers found. Exiting..."
end
end

def start_processes
configuration.configured_processes.each { |configured_process| start_process(configured_process) }
end
Expand Down
9 changes: 1 addition & 8 deletions lib/lepus/supervisor/config.rb
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,7 @@ def consumers=(vals)
end

def consumers
@consumers ||= Dir[Lepus.config.consumers_directory.join("**/*.rb")].map { |path| Pathname.new(path) }.map do |path|
next unless path.extname == ".rb"
next if File.readlines(path.to_s).grep(/abstract_class\s*=\s*true/).any?

path.relative_path_from(Lepus.config.consumers_directory).to_s.sub(/\.rb$/, "").split("/").map do |part|
part.split("_").collect(&:capitalize).join
end.join("::")
end.compact
@consumers ||= Lepus::Consumer.descendants.reject(&:abstract_class?).map(&:name).compact
end

protected
Expand Down
34 changes: 8 additions & 26 deletions spec/lepus/supervisor/config_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,32 +26,14 @@
describe "#consumers" do
after { reset_config! }

it "returns an empty array if no consumers are configured" do
Lepus.config.consumers_directory = Pathname.new("/tmp/lepus/consumers")
expect(config.consumers).to eq([])
end

context "when consumers are configured" do
before do
Lepus.config.consumers_directory = Pathname.new("/tmp/lepus/consumers")
allow(Dir).to receive(:[]).and_return([
"/tmp/lepus/consumers/ignore.js",
"/tmp/lepus/consumers/exclude",
"/tmp/lepus/consumers/application_consumer.rb",
"/tmp/lepus/consumers/foo_consumer.rb",
"/tmp/lepus/consumers/namespaced/bar_consumer.rb"
])
allow(File).to receive(:readlines).and_return([""])
expect(File).to receive(:readlines).with("/tmp/lepus/consumers/application_consumer.rb").and_return([
"class ApplicationConsumer < Lepus::Consumer",
" self.abstract_class = true",
"end"
])
end

it "returns the list of consumers" do
expect(config.consumers).to eq(["FooConsumer", "Namespaced::BarConsumer"])
end
it "returns all consumer classes that inherit from Lepus::Consumer" do
my_consumer = Class.new(Lepus::Consumer)
abstract_consumer = Class.new(Lepus::Consumer) { self.abstract_class = true }
stub_const("MyConsumer", my_consumer)
stub_const("AbstractConsumer", abstract_consumer)

expect(config.consumers).to include("MyConsumer")
expect(config.consumers).not_to include("AbstractConsumer")
end
end
end

0 comments on commit 2f0906a

Please sign in to comment.