Class: RBS::Collection::Config::Lockfile

Inherits:
Object
  • Object
show all
Defined in:
sig/collection/config/lockfile.rbs,
lib/rbs/collection/config/lockfile.rb

Overview

Lockfile represents the rbs_collection.lock.yaml, that contains configurations and resolved gems with their sources

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(lockfile_path:, path:, gemfile_lock_path:) ⇒ Lockfile

Returns a new instance of Lockfile.

Parameters:

  • lockfile_path: (Pathname)
  • path: (Pathname)
  • gemfile_lock_path: (Pathname, nil)


9
10
11
12
13
14
15
16
# File 'lib/rbs/collection/config/lockfile.rb', line 9

def initialize(lockfile_path:, path:, gemfile_lock_path:)
  @lockfile_path = lockfile_path
  @lockfile_dir = lockfile_path.parent
  @path = path
  @gemfile_lock_path = gemfile_lock_path

  @gems = {}
end

Instance Attribute Details

#gemfile_lock_pathPathname? (readonly)

Relative to lockfile_dir

Returns:

  • (Pathname, nil)


43
44
45
# File 'sig/collection/config/lockfile.rbs', line 43

def gemfile_lock_path
  @gemfile_lock_path
end

#gemsHash[String, library] (readonly)

Returns the value of attribute gems.

Returns:

  • (Hash[String, library])


7
8
9
# File 'lib/rbs/collection/config/lockfile.rb', line 7

def gems
  @gems
end

#lockfile_dirPathname (readonly)

Path of the directory where lockfile is saved in

lockfile_path.parent

Returns:

  • (Pathname)


35
36
37
# File 'sig/collection/config/lockfile.rbs', line 35

def lockfile_dir
  @lockfile_dir
end

#lockfile_pathPathname (readonly)

Returns the value of attribute lockfile_path.

Returns:

  • (Pathname)


7
8
9
# File 'lib/rbs/collection/config/lockfile.rb', line 7

def lockfile_path
  @lockfile_path
end

#pathPathname (readonly)

Relative to lockfile_dir

Returns:

  • (Pathname)


39
40
41
# File 'sig/collection/config/lockfile.rbs', line 39

def path
  @path
end

#sourcesObject (readonly)

Returns the value of attribute sources.



7
8
9
# File 'lib/rbs/collection/config/lockfile.rb', line 7

def sources
  @sources
end

Class Method Details

.from_lockfile(lockfile_path:, data:) ⇒ Lockfile

Parameters:

  • lockfile_path: (Pathname)
  • data: (lockfile_data)

Returns:



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/rbs/collection/config/lockfile.rb', line 42

def self.from_lockfile(lockfile_path:, data:)
  path = Pathname(data["path"])
  if p = data["gemfile_lock_path"]
    gemfile_lock_path = Pathname(p)
  end

  lockfile = Lockfile.new(lockfile_path: lockfile_path, path: path, gemfile_lock_path: gemfile_lock_path)

  if gems = data["gems"]
    gems.each do |gem|
      src = gem["source"]
      source = Sources.from_config_entry(src, base_directory: lockfile_path.dirname)
      lockfile.gems[gem["name"]] = {
        name: gem["name"],
        version: gem["version"],
        source: source
      }
    end
  end

  lockfile
end

Instance Method Details

#check_rbs_availability!void

This method returns an undefined value.

Validates if directories are set up correctly

  • Ensures if path is a directory
  • Ensures if git sources are set up correctly


66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'sig/collection/config/lockfile.rbs', line 66

def check_rbs_availability!
  raise CollectionNotAvailable unless fullpath.exist?

  gems.each_value do |gem|
    source = gem[:source]

    case source
    when Sources::Git
      meta_path = fullpath.join(gem[:name], gem[:version], Sources::Git::METADATA_FILENAME)
      raise CollectionNotAvailable unless meta_path.exist?
      raise CollectionNotAvailable unless library_data(gem) == YAML.load(meta_path.read)
    when Sources::Local
      raise CollectionNotAvailable unless fullpath.join(gem[:name], gem[:version]).symlink?
    end
  end
end

#fullpathPathname

lockfile_dir + path

Returns:

  • (Pathname)


51
52
53
# File 'sig/collection/config/lockfile.rbs', line 51

def fullpath
  lockfile_dir + path
end

#gemfile_lock_fullpathObject



22
23
24
25
26
# File 'lib/rbs/collection/config/lockfile.rb', line 22

def gemfile_lock_fullpath
  if gemfile_lock_path
    lockfile_dir + gemfile_lock_path
  end
end

#library_data(lib) ⇒ library_data

Parameters:

  • (library)

Returns:



65
66
67
68
69
70
71
# File 'lib/rbs/collection/config/lockfile.rb', line 65

def library_data(lib)
  {
    "name" => lib[:name],
    "version" => lib[:version],
    "source" => lib[:source].to_lockfile
  }
end

#to_lockfilelockfile_data

Returns:

  • (lockfile_data)


28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/rbs/collection/config/lockfile.rb', line 28

def to_lockfile
  # @type var data: lockfile_data

  data = {
    "path" => path.to_s,
    "gems" => gems.each_value.sort_by {|g| g[:name] }.map {|hash| library_data(hash) },
    "gemfile_lock_path" => gemfile_lock_path.to_s
  }

  data.delete("gems") if gems.empty?

  data
end