class RBS::Vendorer
Copies RBS files loaded through loader under vendor_dir.
Core libraries and library RBS files will be copied.
loader = RBS::EnvironmentLoader.new() loader.add(library: set) # Libraries will be copied. loader.add(library: "minitest", version: "1.2.3") loader.add(path: Pathname("sig")) # Dirs will be ignored. vendorer = RBS::Vendorer.new(vendor_dir: Pathname("vendor/rbs"), loader: loader) vendorer.clean! vendorer.copy!
The result will be:
vendor/rbs/core => Will include core RBSs vendor/rbs/set-0 => Will include `set` library RBSs. vendor/rbs/minitest-1.2.3 => Will include `minitest` library RBSs.
The vendored RBSs will be loaded through :dir source.
loader = RBS::EnvironmentLoader.new(core_root: nil, repository: RBS::Repository.new(no_stdlib: true)) loader.add(path: Pathname("vendor/rbs")) loader.add(path: Pathname("sig"))
Attributes
Public Class Methods
(vendor_dir: Pathname, loader: EnvironmentLoader) → void
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/lib/rbs/vendorer.rb, line 8 def initialize(vendor_dir:, loader:) @vendor_dir = vendor_dir @loader = loader end
Public Instance Methods
() → void
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/lib/rbs/vendorer.rb, line 21 def clean! ensure_dir do RBS.logger.info "Cleaning vendor root: #{vendor_dir}..." vendor_dir.rmtree end end
Deletes vendor_dir and its content if exists.
() → void
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/lib/rbs/vendorer.rb, line 28 def copy! # @type var paths: Set[[Pathname, Pathname]] paths = Set[] if core_root = loader.core_root RBS.logger.info "Vendoring core RBSs in #{vendor_dir + "core"}..." FileFinder.each_file(core_root, skip_hidden: true) do |file_path| paths << [file_path, Pathname("core") + file_path.relative_path_from(core_root)] end end loader.libs.each do |lib| case when (spec, path = EnvironmentLoader.gem_sig_path(lib.name, lib.version)) dest_dir = Pathname("#{lib.name}-#{spec.version}") RBS.logger.info "Vendoring #{lib.name}(#{spec.version}) RBSs in #{vendor_dir + dest_dir}..." FileFinder.each_file(path, skip_hidden: true) do |file_path| paths << [file_path, dest_dir + file_path.relative_path_from(path)] end when (rbs, path = loader.repository.lookup_path(lib.name, lib.version)) dest_dir = Pathname("#{rbs.name}-#{path.version}") RBS.logger.info "Vendoring #{lib.name}(#{path.version}) RBSs in #{vendor_dir + dest_dir}..." FileFinder.each_file(path.path, skip_hidden: true) do |file_path| paths << [file_path, dest_dir + file_path.relative_path_from(path.path)] end else RBS.logger.error "Couldn't find RBSs for #{lib.name} (#{lib.version}); skipping..." end end paths.each do |from, to| dest = vendor_dir + to dest.parent.mkpath unless dest.parent.directory? FileUtils.copy_file(from.to_s, dest.to_s) end end
Copy RBS files into vendor_dir. Ensures the vendor_dir exists.
[A] () { () → A } → A
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/lib/rbs/vendorer.rb, line 13 def ensure_dir unless vendor_dir.directory? vendor_dir.mkpath end yield end