Class: Rwm::Workspace

Inherits:
Object
  • Object
show all
Defined in:
lib/rwm/workspace.rb

Constant Summary collapse

RWM_DIR =
".rwm"
PACKAGE_DIRS =
%w[libs apps].freeze
GRAPH_FILE =
"graph.json"

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(root) ⇒ Workspace

Returns a new instance of Workspace.



11
12
13
# File 'lib/rwm/workspace.rb', line 11

def initialize(root)
  @root = root
end

Instance Attribute Details

#rootObject (readonly)

Returns the value of attribute root.



9
10
11
# File 'lib/rwm/workspace.rb', line 9

def root
  @root
end

Class Method Details

.find(start_dir = Dir.pwd) ⇒ Object

Find the workspace root via git



16
17
18
19
20
21
22
23
# File 'lib/rwm/workspace.rb', line 16

def self.find(start_dir = Dir.pwd)
  dir = File.expand_path(start_dir)
  git_root = `git -C #{dir} rev-parse --show-toplevel 2>/dev/null`.chomp

  raise WorkspaceNotFoundError if git_root.empty?

  new(git_root)
end

Instance Method Details

#apps_dirObject



37
38
39
# File 'lib/rwm/workspace.rb', line 37

def apps_dir
  File.join(root, "apps")
end

#find_package(name) ⇒ Object



46
47
48
# File 'lib/rwm/workspace.rb', line 46

def find_package(name)
  packages.find { |p| p.name == name } || raise(PackageNotFoundError, name)
end

#graph_pathObject



29
30
31
# File 'lib/rwm/workspace.rb', line 29

def graph_path
  File.join(rwm_dir, GRAPH_FILE)
end

#libs_dirObject



33
34
35
# File 'lib/rwm/workspace.rb', line 33

def libs_dir
  File.join(root, "libs")
end

#packagesObject

Discover all packages by scanning libs/ and apps/ for directories with a Gemfile



42
43
44
# File 'lib/rwm/workspace.rb', line 42

def packages
  @packages ||= discover_packages
end

#rwm_dirObject



25
26
27
# File 'lib/rwm/workspace.rb', line 25

def rwm_dir
  File.join(root, RWM_DIR)
end