class Eventboss::CLI
Constants
- DEFAULT_OPTIONS
Attributes
options[RW]
Public Class Methods
new()
click to toggle source
# File lib/eventboss/cli.rb, line 19 def initialize self.options = DEFAULT_OPTIONS.dup end
Public Instance Methods
parse(args = ARGV)
click to toggle source
# File lib/eventboss/cli.rb, line 23 def parse(args = ARGV) parse_options(args) load_config_file end
run()
click to toggle source
# File lib/eventboss/cli.rb, line 28 def run boot_system Eventboss.logger.info('Starting eventboss...') Eventboss.launch end
Private Instance Methods
boot_system()
click to toggle source
# File lib/eventboss/cli.rb, line 38 def boot_system Dotenv.load require 'rails' if ::Rails::VERSION::MAJOR < 4 require File.expand_path('config/environment.rb') else require File.expand_path('config/application.rb') require File.expand_path('config/environment.rb') end Eventboss.logger.debug('Loaded rails...') # Due to a changes introduced in Rails 6 regarding autoloading # we need to determine how to perform eager_load # @see https://weblog.rubyonrails.org/2019/2/22/zeitwerk-integration-in-rails-6-beta-2/ if ::Rails.try(:autoloaders).try(:zeitwerk_enabled?) ::Zeitwerk::Loader.eager_load_all else ::Rails.application.eager_load! end rescue LoadError Eventboss.logger.debug('Seems like not a Rails app') if options[:require].nil? Eventboss.logger.warn('Please use -r to load a custom app entrypoint') exit(0) else Eventboss.logger.debug("Loading #{options[:require]}") require File.expand_path(options[:require]) end end
load_config_file()
click to toggle source
# File lib/eventboss/cli.rb, line 76 def load_config_file # check config file presence if options[:config] raise ArgumentError, "No such file #{options[:config]}" unless File.exist?(options[:config]) else config_dir = if File.directory?(options[:require].to_s) File.join(options[:require], 'config') else File.join(DEFAULT_OPTIONS[:require], 'config') end %w[eventboss.yml eventboss.yml.erb].each do |config_file| path = File.join(config_dir, config_file) options[:config] ||= path if File.exist?(path) end end # parse config file options if options[:config] opts = parse_config(options[:config]) opts.each do |option_name, option| if Eventboss::Configuration::OPTS_ALLOWED_IN_CONFIG_FILE.include?(option_name) Eventboss.configuration.public_send("#{option_name}=", option) else Eventboss.logger.error("Not supported option (#{option_name}) provided in config file.") exit(1) end end end end
option_parser(opts)
click to toggle source
# File lib/eventboss/cli.rb, line 128 def option_parser(opts) parser = OptionParser.new do |parser| parser.on('-r', '--require LIBRARY', 'Require custom app entrypoint') do |lib| opts[:require] = lib end parser.on('-C', '--config PATH', 'Config file path') do |config| opts[:config] = config end end parser.banner = "Eventboss [options]" parser.on_tail "-h", "--help", "Show help" do Eventboss.logger.info parser exit 1 end parser end
parse_config(path)
click to toggle source
# File lib/eventboss/cli.rb, line 108 def parse_config(path) opts = YAML.load(ERB.new(File.read(path)).result) || {} if opts.respond_to? :deep_symbolize_keys! opts.deep_symbolize_keys! else symbolize_keys_deep!(opts) end opts end
parse_options(args)
click to toggle source
# File lib/eventboss/cli.rb, line 70 def parse_options(args) option_parser(options).parse!(args) options end
symbolize_keys_deep!(hash)
click to toggle source
# File lib/eventboss/cli.rb, line 120 def symbolize_keys_deep!(hash) hash.keys.each do |k| symkey = k.respond_to?(:to_sym) ? k.to_sym : k hash[symkey] = hash.delete k symbolize_keys_deep! hash[symkey] if hash[symkey].is_a? Hash end end