Class: RubyLens::Index::Manifest

Inherits:
Object
  • Object
show all
Defined in:
lib/rubylens/index/manifest.rb

Defined Under Namespace

Classes: Package

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(root:, lockfile: nil) ⇒ Manifest

Returns a new instance of Manifest.



20
21
22
23
24
25
26
27
28
29
# File 'lib/rubylens/index/manifest.rb', line 20

def initialize(root:, lockfile: nil)
  @root = Pathname(root).expand_path.realpath
  @lockfile = Pathname(lockfile || @root.join("Gemfile.lock")).expand_path
  @warnings = []
  @packages = []
  @package_roots = []
  @package_index_by_file = {}
  @package_index_cache = {}
  @relative_workspace_path_cache = {}
end

Instance Attribute Details

#filesObject (readonly)

Returns the value of attribute files.



14
15
16
# File 'lib/rubylens/index/manifest.rb', line 14

def files
  @files
end

#packagesObject (readonly)

Returns the value of attribute packages.



14
15
16
# File 'lib/rubylens/index/manifest.rb', line 14

def packages
  @packages
end

#rootObject (readonly)

Returns the value of attribute root.



14
15
16
# File 'lib/rubylens/index/manifest.rb', line 14

def root
  @root
end

#warningsObject (readonly)

Returns the value of attribute warnings.



14
15
16
# File 'lib/rubylens/index/manifest.rb', line 14

def warnings
  @warnings
end

#workspace_filesObject (readonly)

Returns the value of attribute workspace_files.



14
15
16
# File 'lib/rubylens/index/manifest.rb', line 14

def workspace_files
  @workspace_files
end

Class Method Details

.build(root:, lockfile: nil) ⇒ Object



16
17
18
# File 'lib/rubylens/index/manifest.rb', line 16

def self.build(root:, lockfile: nil)
  new(root: root, lockfile: lockfile).tap(&:build)
end

Instance Method Details

#buildObject



31
32
33
34
35
36
37
38
39
# File 'lib/rubylens/index/manifest.rb', line 31

def build
  @workspace_files = GitRepository.new(@root).selected_files.freeze
  build_packages
  @package_roots = @packages.each_with_index.map { |package, index| [package.root, index] }
    .sort_by { |package_root, _index| -package_root.to_s.length }
  build_package_index
  @files = (@workspace_files + @packages.flat_map(&:files)).uniq.freeze
  self
end

#package_index_for(path) ⇒ Object



41
42
43
44
45
46
47
48
49
# File 'lib/rubylens/index/manifest.rb', line 41

def package_index_for(path)
  path = path.to_s
  return @package_index_by_file[path] if @package_index_by_file.key?(path)
  return @package_index_cache[path] if @package_index_cache.key?(path)

  @package_index_cache[path] = uncached_package_index_for(path)
rescue Errno::ENOENT, Errno::EACCES, Errno::ELOOP
  nil
end

#relative_workspace_path(path) ⇒ Object



55
56
57
58
59
60
61
62
# File 'lib/rubylens/index/manifest.rb', line 55

def relative_workspace_path(path)
  path = path.to_s
  return @relative_workspace_path_cache[path] if @relative_workspace_path_cache.key?(path)

  @relative_workspace_path_cache[path] = Pathname(path).realpath.relative_path_from(@root).to_s
rescue Errno::ENOENT, Errno::EACCES, Errno::ELOOP, ArgumentError
  nil
end

#workspace_path?(path) ⇒ Boolean

Returns:

  • (Boolean)


51
52
53
# File 'lib/rubylens/index/manifest.rb', line 51

def workspace_path?(path)
  Paths.inside?(path, @root)
end