Class: AgentsHomedir::Resolver
- Inherits:
-
Object
- Object
- AgentsHomedir::Resolver
- Defined in:
- lib/agents_homedir/resolver.rb
Constant Summary collapse
- VALID_OSES =
%i[macos linux windows].freeze
- WINDOWS_DRIVE_PATH =
/\A[A-Za-z]:[\/\\]/.freeze
- WINDOWS_UNC_PATH =
/\A[\/\\]{2}[^\/\\]+[\/\\]+[^\/\\]+/.freeze
Class Method Summary collapse
Instance Method Summary collapse
- #[](name) ⇒ Object
- #agents ⇒ Object
- #candidates(name) ⇒ Object
- #home(name) ⇒ Object
-
#initialize(env: ENV.to_h, home: ENV["HOME"], os: self.class.default_os, entries: Registry.entries) ⇒ Resolver
constructor
A new instance of Resolver.
- #installed ⇒ Object
- #installed?(name) ⇒ Boolean
- #names ⇒ Object
Constructor Details
#initialize(env: ENV.to_h, home: ENV["HOME"], os: self.class.default_os, entries: Registry.entries) ⇒ Resolver
Returns a new instance of Resolver.
36 37 38 39 40 41 42 43 44 |
# File 'lib/agents_homedir/resolver.rb', line 36 def initialize(env: ENV.to_h, home: ENV["HOME"], os: self.class.default_os, entries: Registry.entries) fail ArgumentError, "Invalid OS #{os.inspect}; expected one of #{VALID_OSES.inspect}" unless VALID_OSES.include?(os) @env = snapshot_value(env) @home = snapshot_value(home) @os = os @entries = snapshot_value(entries) @memoization_monitor = Monitor.new end |
Class Method Details
.default_os ⇒ Object
16 17 18 |
# File 'lib/agents_homedir/resolver.rb', line 16 def default_os @default_os ||= detect_os(RbConfig::CONFIG["host_os"]) end |
Instance Method Details
#[](name) ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/agents_homedir/resolver.rb', line 74 def [](name) key = name.to_sym entry = entry_for(key) Agent.new( name: key, label: entry.fetch(:label), env_override: entry[:env], verified_on: parse_verified_on(key, entry[:verified_on]), resolver: self ) end |
#agents ⇒ Object
95 96 97 98 99 100 101 |
# File 'lib/agents_homedir/resolver.rb', line 95 def agents return @agents if @agents @memoization_monitor.synchronize do @agents ||= names.map { self[_1] }.freeze end end |
#candidates(name) ⇒ Object
65 66 67 68 69 70 71 72 |
# File 'lib/agents_homedir/resolver.rb', line 65 def candidates(name) home_root = ensure_home_root! specs = path_specs_for(name) = (specs, home_root) fail ArgumentError, (name, "current os paths are empty") if .empty? .freeze end |
#home(name) ⇒ Object
46 47 48 49 50 51 52 53 54 |
# File 'lib/agents_homedir/resolver.rb', line 46 def home(name) ensure_home_root! override = env_override_for(name) return override if override available_candidates = candidates(name) find_directory_candidate(available_candidates) || available_candidates.first end |
#installed ⇒ Object
103 104 105 |
# File 'lib/agents_homedir/resolver.rb', line 103 def installed agents.select(&:installed?).freeze end |
#installed?(name) ⇒ Boolean
56 57 58 59 60 61 62 63 |
# File 'lib/agents_homedir/resolver.rb', line 56 def installed?(name) ensure_home_root! override = env_override_for(name) return true if directory_path?(override) candidates(name).any? { directory_path?(_1) } end |
#names ⇒ Object
87 88 89 90 91 92 93 |
# File 'lib/agents_homedir/resolver.rb', line 87 def names return @names if @names @memoization_monitor.synchronize do @names ||= @entries.keys.freeze end end |