File Manager
module RBS
# Set of RBS repositories.
#
# A repository object can handle multiple repository roots.
#
# repo = RBS::Repository.new()
# repo.add(Pathname("vendor/rbs/gem-rbs"))
# repo.add(Pathname("vendor/rbs/internal-rbs"))
# repo.add(Pathname("vendor/rbs/definitely-rbs"))
#
# repo.lookup("minitest", "2.1.3") => Pathname or nil
#
# If one gem version can resolve to several directories, the last added dir wins.
#
class Repository
class GemRBS
attr_reader name: String
# Array of gem dirs.
# Gem dir contains directories for each version.
attr_reader paths: Array[Pathname]
# Hash from a version to VersionPath object.
attr_reader versions(): Hash[Gem::Version, VersionPath]
@versions: Hash[Gem::Version, VersionPath]?
def initialize: (name: String) -> void
def load!: () -> void
def version_names: () -> Array[Gem::Version]
def oldest_version: () -> VersionPath
def latest_version: () -> VersionPath
def find_best_version: (Gem::Version?) -> VersionPath
# Returns true if versions is empty.
def empty?: () -> bool
end
class VersionPath
attr_reader gem: GemRBS
attr_reader version: Gem::Version
attr_reader path: Pathname
def initialize: (gem: GemRBS, version: Gem::Version, path: Pathname) -> void
end
DEFAULT_STDLIB_ROOT: Pathname
# Array of _root dir_s of repositories.
#
attr_reader dirs: Array[Pathname]
attr_reader gems: Hash[String, GemRBS]
# An optional keyword argument `no_stdlib` is to skip adding directory for stdlib classes.
# Passing truthy value will skip loading stdlib. (You can add the stdlib root by yourself.)
#
def initialize: (?no_stdlib: bool) -> void
# Add new _root dir_ to the repository set.
# If two repository dirs have exactly same gem-version definitions, the latter overwrites the prior.
#
def add: (Pathname dir) -> void
# Returns a directory for given `gem` name and `version`.
# `version` can be `nil` for _any version_.
#
# If the given gem cannot be found, it returns `nil`.
#
def lookup: (String gem, String? version) -> Pathname?
def lookup_path: (String gem, String? version) -> [GemRBS, VersionPath]?
end
end
File Manager Version 1.0, Coded By Lucas
Email: hehe@yahoo.com