Module: Loader::ObjectExtension

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)



6
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
# File 'lib/loader/require.rb', line 6

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



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

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