Sha256: 00eeaf8a8b828b8b7d77abf8c7afafc7670bf8cd1bbaa25c4d6dac120e13e584

Contents?: true

Size: 1.03 KB

Versions: 2

Compression:

Stored size: 1.03 KB

Contents

module Trax
  module Core
    module EagerAutoloadNamespace
      def self.extended(base)
        source_file_path = caller[0].partition(":")[0]

        base.class_eval do
          extend ::ActiveSupport::Autoload

          @eager_autoload_filepath = source_file_path
        end

        base.autoload_class_names.each do |klass|
          base.autoload :"#{klass}"
        end

        base.eager_load!
      end

      def all
        @all ||= autoload_class_names.map do |klass|
          const_get(:"#{klass}")
        end
      end

      def autoload_file_paths
        @autoload_file_paths = ::Dir[module_path.join('*.rb')]
      end

      def autoload_class_names
        @autoload_class_names = autoload_file_paths.map do |path|
          ::File.basename(path.to_s).split(".rb").shift.try(:classify)
        end
      end

      def eager_autoload_filepath
        @eager_autoload_filepath
      end

      def module_path
        @module_path ||= ::Pathname.new(::File.path(eager_autoload_filepath).gsub(".rb", ""))
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
trax_core-0.0.6 lib/trax/core/eager_autoload_namespace.rb
trax_core-0.0.5 lib/trax/core/eager_autoload_namespace.rb