Class: Hashira::Project
- Inherits:
-
Object
- Object
- Hashira::Project
- Defined in:
- lib/hashira/project.rb
Constant Summary collapse
- ROOT_PACKAGE =
"(root)"
Instance Attribute Summary collapse
-
#directories ⇒ Object
readonly
Returns the value of attribute directories.
Class Method Summary collapse
Instance Method Summary collapse
- #files ⇒ Object
-
#initialize(directories) ⇒ Project
constructor
A new instance of Project.
- #label ⇒ Object
- #package_for(path) ⇒ Object
- #relative(path) ⇒ Object
- #root_package ⇒ Object
Constructor Details
#initialize(directories) ⇒ Project
Returns a new instance of Project.
16 17 18 19 20 21 |
# File 'lib/hashira/project.rb', line 16 def initialize(directories) missing = directories.reject { Dir.exist?(_1) } raise Error, "no such directory: #{missing.join(", ")}" unless missing.empty? @directories = directories.map { _1.delete_suffix("/") } end |
Instance Attribute Details
#directories ⇒ Object (readonly)
Returns the value of attribute directories.
23 24 25 |
# File 'lib/hashira/project.rb', line 23 def directories @directories end |
Class Method Details
.detect(directories) ⇒ Object
7 8 9 10 11 12 13 14 |
# File 'lib/hashira/project.rb', line 7 def self.detect(directories) return new(directories) unless directories.empty? subdirectories = Dir["lib/*/"].map { File.basename(_1) } raise Error, "no lib/ directory here — pass the source directory explicitly" if subdirectories.empty? new(subdirectories.size == 1 ? ["lib/#{subdirectories.first}"] : ["lib"]) end |
Instance Method Details
#files ⇒ Object
25 |
# File 'lib/hashira/project.rb', line 25 def files = @directories.flat_map { Dir["#{_1}/**/*.rb"] }.sort |
#label ⇒ Object
34 |
# File 'lib/hashira/project.rb', line 34 def label = @directories.join(", ") |
#package_for(path) ⇒ Object
27 28 29 30 |
# File 'lib/hashira/project.rb', line 27 def package_for(path) first, rest = relative(path).delete_suffix(".rb").split("/", 2) rest || folder?(path, first) ? first : ROOT_PACKAGE end |
#relative(path) ⇒ Object
32 |
# File 'lib/hashira/project.rb', line 32 def relative(path) = path.delete_prefix("#{directory_of(path)}/") |
#root_package ⇒ Object
36 |
# File 'lib/hashira/project.rb', line 36 def root_package = ROOT_PACKAGE |