Module: Loader::AutoLoad::Fetcher

Extended by:
Fetcher, Helpers
Included in:
Fetcher
Defined in:
lib/loader/autoload/fetcher.rb

Instance Method Summary collapse

Methods included from Helpers

pwd, underscore

Instance Method Details

#desc_ary(array) ⇒ Object



34
35
36
# File 'lib/loader/autoload/fetcher.rb', line 34

def desc_ary(array)
  array.sort { |a, b| b.length <=> a.length }
end

#generate_levels(klass, name) ⇒ Object



38
39
40
41
42
43
44
# File 'lib/loader/autoload/fetcher.rb', line 38

def generate_levels(klass, name)
  levels = klass.to_s.split('::').reduce([]) { |m, c|
    m << [(last_obj = m.last), c].compact.join('::'); m
  }.map { |str| [str, name].join('::') }
  levels.unshift(name.to_s)
  return levels
end

#load_by_folder(levels, folder = nil) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/loader/autoload/fetcher.rb', line 18

def load_by_folder(levels, folder=nil)

  Loader.project_folders.each do |project_folder|

    desc_ary(levels.map { |str| File.join(*[project_folder, folder, "#{underscore(str)}.rb"].compact) }).each do |path_constructor|
      desc_ary(Dir.glob(path_constructor)).each do |path|
        return true if File.exist?(path) && require(path)
      end
    end

  end

  return false

end

#try_fetch_constant(caller_class, name) ⇒ Object



46
47
48
49
50
51
52
53
# File 'lib/loader/autoload/fetcher.rb', line 46

def try_fetch_constant(caller_class, name)
  levels = generate_levels(caller_class, name).map { |str| Regexp.escape(str) }
  ObjectSpace.each_object(Module) { |obj|
    if !!(obj.to_s =~ /^(#{levels.join('|')})$/)
      return obj
    end
  }; nil
end

#try_load_by(caller_class, name) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
# File 'lib/loader/autoload/fetcher.rb', line 6

def try_load_by(caller_class, name)
  levels = generate_levels(caller_class, name)
  [
      nil,
      'lib',
      File.join('{application,app,api}', '*'),
      File.join('**', '*')
  ].each do |folder|
    return if load_by_folder(levels, folder)
  end
end