Module: Loader::ObjectRequireEXT

Defined in:
lib/loader/require.rb

Instance Method Summary collapse

Instance Method Details

#require_relative_directory(*args) ⇒ Object Also known as: require_directory

require sender relative directory’s files return the directory and the sub directories file names (rb/ru)



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/loader/require.rb', line 7

def require_relative_directory *args

  folder= args.select{|e|(e.class <= ::String)}.join(File::Separator)
  opts= {}
  args.select{|e|(e.class <= ::Hash)}.each{|hash| hash.each{|sk,sv| opts[sk]=sv } }
  args.select!{|e|(e.class <= ::Symbol)}

  opts[:recursive]  ||= opts.delete(:r) || opts.delete(:R) || !([:recursive,:r, :R,].select{|e| args.include?(e)}.empty?)
  opts[:recursive]    = !!opts[:recursive]

  # inclusion and exclusion
  [[:exclude,[:ex,:e,:EX,:E]],[:include,[:in,:i,:IN,:I]]].each do |name,aliases|

    aliases.each do |one_alias|
      opts[name]    ||= opts.delete(one_alias)
    end

    opts[name] ||= []

    # should be REGEXP collection
    opts[name] = [*opts[name]].map{|e| !(e.class <= ::Regexp) ? Regexp.new(e.to_s) : e }

  end


  opts[:caller_folder]  ||= opts.delete(:f) || opts.delete(:folder) || ::Loader.caller_folder

  unless folder.to_s[0] == File::Separator
    folder= [opts[:caller_folder],folder]
  end

  #> recursive option
  begin
    path_parts= [*folder]
    if opts[:recursive]
      path_parts.push("**")
    end
    path_parts.push("*.{rb,ru}")
  end

  return Dir.glob(File.join(*path_parts)).sort_by{|e| e.split(File::Separator).size }.map { |one_path|

    next unless opts[:exclude].select{|regex| one_path =~ regex ? true : false }.empty?

    if opts[:include].empty?
      require(one_path);one_path
    else
      opts[:include].each do |regex|
        if one_path =~ regex
          require(one_path);one_path
        end
      end
    end

  }.compact

end

#require_relative_directory_r(*args) ⇒ Object Also known as: require_directory_r



67
68
69
# File 'lib/loader/require.rb', line 67

def require_relative_directory_r *args
  require_relative_directory *args, r: true, f: Loader.caller_folder
end