Module: Loader::AutoLoad::Fetcher
Instance Method Summary collapse
- #desc_ary(array) ⇒ Object
- #generate_levels(klass, name) ⇒ Object
- #load_by_folder(levels, folder = nil) ⇒ Object
- #try_fetch_constant(caller_class, name) ⇒ Object
- #try_load_by(caller_class, name) ⇒ Object
Methods included from Helpers
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 |