diff --git a/active_event/lib/active_event/domain.rb b/active_event/lib/active_event/domain.rb index 805a334..8d90719 100644 --- a/active_event/lib/active_event/domain.rb +++ b/active_event/lib/active_event/domain.rb @@ -21,8 +21,7 @@ module Domain def initialize(*args) super - # DRb.start_service # should not be necessary - self.server = DRbObject.new_with_uri self.class.server_uri + self.server = DRbObject.new_with_uri drb_server_uri end def run_command(command) @@ -36,19 +35,43 @@ def run_command(command) attr_accessor :server + def drb_server_uri + self.class.drb_server_uri || URI::Generic.build(options[:drb_server]).to_s + end + + def options + @options ||= parse_options + end + + def config_file + self.class.config_file || File.join(Rails.root, 'config', 'disco.yml') + end + + def default_options + { + drb_server: { + scheme: 'druby', + hostname: '127.0.0.1', + port: 8787, + }, + } + end + + def parse_options + options = default_options + options.merge! YAML.load_file(config_file)[Rails.env].deep_symbolize_keys! unless config_file.blank? + end + module ClassMethods def run_command(command) instance.run_command command end - attr_accessor :server_uri - - def self.extended(base) - base.server_uri = 'druby://127.0.0.1:8787' - end + attr_accessor :drb_server_uri + attr_accessor :config_file def set_config(protocol = 'druby', host = 'localhost', port = 8787) - self.server_uri = "#{protocol}://#{host}:#{port}" + self.drb_server_uri = "#{protocol}://#{host}:#{port}" end end end diff --git a/active_event/spec/lib/domain_spec.rb b/active_event/spec/lib/domain_spec.rb index bf6ee7a..7d0afb5 100644 --- a/active_event/spec/lib/domain_spec.rb +++ b/active_event/spec/lib/domain_spec.rb @@ -12,7 +12,8 @@ class TestDomain end it 'sends command over instance' do - expect(DRbObject).to receive(:new_with_uri).with(TestDomain.server_uri).and_return(@drb_object) + TestDomain.set_config('dummy') + expect(DRbObject).to receive(:new_with_uri).with(TestDomain.drb_server_uri).and_return(@drb_object) expect(@command).to receive(:valid?).and_return(true) expect(@drb_object).to receive(:run_command).with(@command) TestDomain.run_command(@command)