Module: Rubinjam::ModuleAutoloadFix

Defined in:
lib/rubinjam/internal.rb

Class Method Summary collapse

Class Method Details

.included(base) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/rubinjam/internal.rb', line 40

def self.included(base)
  base.class_eval do
    def rubinjam_autload
      @rubinjam_autload ||= {}
    end

    alias autoload_without_rubinjam autoload
    def autoload(const, file)
      normalized_file = Rubinjam.normalize_file(file)
      if Rubinjam::LIBRARIES[normalized_file]
        rubinjam_autload[const] = normalized_file
      else
        autoload_without_rubinjam(const, file)
      end
    end

    alias const_missing_without_rubinjam const_missing
    def const_missing(const)
      # do not load twice / go into infitire loops
      @rubinjam_tried_const_missing ||= {}
      if @rubinjam_tried_const_missing[const]
        return const_missing_without_rubinjam(const)
      end
      @rubinjam_tried_const_missing[const] = true

      # try to find autoload in current module or nesting
      nesting, file = Rubinjam.file_from_nesting(self, const)
      if file
        require file
        nesting.const_get(const)
      else
        const_missing_without_rubinjam(const)
      end
    end
  end
end