Module: Kamal::Lint::KamalVersion
- Defined in:
- lib/kamal/lint/kamal_version.rb
Overview
Detect the installed Kamal version from (in priority order):
1. explicit override
2. Bundler.locked_gems
3. Gem.loaded_specs / Gem::Specification
4. shell out to `kamal version`
Class Method Summary collapse
- .detect(override: nil) ⇒ Object
- .from_bundler ⇒ Object
- .from_loaded_specs ⇒ Object
- .from_shell ⇒ Object
- .normalize(value) ⇒ Object
Class Method Details
.detect(override: nil) ⇒ Object
15 16 17 18 19 |
# File 'lib/kamal/lint/kamal_version.rb', line 15 def detect(override: nil) return normalize(override) if override from_bundler || from_loaded_specs || from_shell end |
.from_bundler ⇒ Object
21 22 23 24 25 26 27 28 29 30 |
# File 'lib/kamal/lint/kamal_version.rb', line 21 def from_bundler return nil unless defined?(Bundler) locked = Bundler.locked_gems&.specs&.find { |s| s.name == "kamal" } locked&.version&.to_s rescue Bundler::GemfileNotFound nil rescue => _e nil end |
.from_loaded_specs ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/kamal/lint/kamal_version.rb', line 32 def from_loaded_specs spec = Gem.loaded_specs["kamal"] if defined?(Gem) && Gem.respond_to?(:loaded_specs) return spec.version.to_s if spec if defined?(Gem::Specification) found = Gem::Specification.find_all_by_name("kamal").max_by(&:version) return found&.version&.to_s end nil rescue => _e nil end |
.from_shell ⇒ Object
46 47 48 49 50 51 52 53 |
# File 'lib/kamal/lint/kamal_version.rb', line 46 def from_shell out, _err, status = Open3.capture3("kamal", "version") return nil unless status.success? out.strip.split.last rescue Errno::ENOENT nil end |
.normalize(value) ⇒ Object
55 56 57 58 59 |
# File 'lib/kamal/lint/kamal_version.rb', line 55 def normalize(value) return nil if value.nil? || value.to_s.empty? value.to_s.strip end |