Sha256: e65b7275c6e2e68b7301f259476b9f0a150315e87af41f920191975e28087940
Contents?: true
Size: 843 Bytes
Versions: 4
Compression:
Stored size: 843 Bytes
Contents
# frozen_string_literal: true module Leftovers # zero dependency zeitwerk module Autoloader ALL_CAPS_NAMES = %w{ast cli version erb json yaml}.freeze def self.included(klass) ::Dir[glob_children(klass)].each_entry do |path| klass.autoload(class_from_path(path), path) end end def self.class_from_path(path) name = ::File.basename(path).delete_suffix('.rb') if ALL_CAPS_NAMES.include?(name) name.upcase else name.gsub(/(?:^|_)(\w)/, &:upcase).delete('_') end end def self.dir_path_from_class(klass) klass.name.gsub(/::/, '/') .gsub(/(?<=[a-z])([A-Z])/, '_\1').downcase end def self.glob_children(klass) "#{root}/#{dir_path_from_class(klass)}/*.rb" end def self.root ::File.dirname(__dir__) end end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
leftovers-0.12.2 | lib/leftovers/autoloader.rb |
leftovers-0.12.1 | lib/leftovers/autoloader.rb |
leftovers-0.12.0 | lib/leftovers/autoloader.rb |
leftovers-0.11.2 | lib/leftovers/autoloader.rb |