lib/shatter.rb in shatter-rb-0.0.2 vs lib/shatter.rb in shatter-rb-0.1.0
- old
+ new
@@ -1,21 +1,69 @@
# frozen_string_literal: true
-require_relative "shatter/version"
-require_relative "shatter/web/application"
-require_relative "shatter/config"
-require_relative "shatter/web/server"
-require_relative "shatter/service/base"
-require_relative "shatter/service/discovery"
-require_relative "shatter/service/service_definition"
-require_relative "shatter/service/response_pool"
-require_relative "shatter/util"
+require "zeitwerk"
+require "concurrent/atomic/read_write_lock"
+Dir["#{__dir__}/shatter/service/*.rb"].each { |file| require file }
+Dir["#{__dir__}/shatter/web/*.rb"].each { |file| require file }
+Dir["#{__dir__}/shatter/ext/*.rb"].each { |file| require file }
+require_relative "./shatter/config"
+require_relative "./shatter/util"
+require_relative "./shatter/version"
-$stdout.sync = true
-
module Shatter
class Error < StandardError; end
+
+ def self.root
+ current = Dir.pwd
+ root_dir = nil
+
+ while current.size >= 1 && root_dir.nil?
+ root_dir = current if Dir.children(current).include?("Gemfile")
+ current = File.expand_path("..", current) if root_dir.nil?
+ Dir.new(current)
+ end
+ root_dir
+ end
+
def self.logger
Util::Logger.instance
end
+
+ def self.config(&block)
+ block.call(Config) and return if block_given?
+
+ Config
+ end
+
+ def self.loader
+ @loader
+ end
+
+ def self.load_environment
+ require "#{Shatter.root}/config/environment.rb"
+ end
+
+ def self.reload
+ @loader.reload
+ link_definitions
+ end
+
+ def self.load
+ # @loader = Zeitwerk::Loader.for_gem
+ @loader = Zeitwerk::Loader.new
+ @loader.tag = File.basename(__FILE__, ".rb")
+ @loader.inflector = Zeitwerk::GemInflector.new(__FILE__)
+ Config.autoload_paths.each do |path|
+ @loader.push_dir(File.expand_path(path, root))
+ end
+ @loader.enable_reloading
+ @loader.setup # ready!
+ link_definitions
+ end
+
+ def self.link_definitions
+ Shatter::Service::Base.service_definition = ServiceDefinition if Object.const_defined?("ServiceDefinition")
+ Shatter::Web::Server.application = Application if Object.const_defined?("Application")
+ end
# Your code goes here...
end
+Shatter::RELOAD_RW_LOCK = Concurrent::ReadWriteLock.new