Class: Ree::PackagesDetector

Inherits:
Object
  • Object
show all
Defined in:
lib/ree/core/packages_detector.rb

Instance Method Summary collapse

Instance Method Details

#call(dir, gem_name = nil) ⇒ ArrayOf[{name: String, entry_path: String, gem_name: Nilor[String]}]

Parameters:

  • dir (String)

    Packages root dir

Returns:

  • (ArrayOf[{name: String, entry_path: String, gem_name: Nilor[String]}])


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
# File 'lib/ree/core/packages_detector.rb', line 8

def call(dir, gem_name = nil)
  if !Dir.exist?(dir)
    raise Ree::Error.new("dir does not exist: #{dir}", :invalid_dir)
  end

  names = {}
  packages = []

  package_dirs = File.join(dir, "**/package")
  Dir[package_dirs].each do |package_dir|
    next unless File.directory?(package_dir)

    dir_path = Pathname.new(package_dir)
    name = dir_path.parent.basename.to_s

    next if names.has_key?(name)

    package_rel_path = dir_path.relative_path_from(dir)

    entry_path = Ree::PathHelper.package_entry_path(package_rel_path)
    next unless File.exist?(File.join(dir, entry_path))

    names[name] = entry_path

    packages << {
      name: name.to_sym,
      entry_path: entry_path,
      gem_name: gem_name
    }
  end

  packages
end