mirror of
https://github.com/Llewellynvdm/starship.git
synced 2025-01-06 07:30:44 +00:00
feat: $gemset variable for Ruby module (#5429)
* $gemset variable for Ruby module * typo * Added test for no GEM_HOME env set * Formatting * Uses `rvm current` for gemset, no more version num
This commit is contained in:
parent
0e49f04a6b
commit
938ea3c401
@ -3772,11 +3772,12 @@ Starship gets the current Ruby version by running `ruby -v`.
|
|||||||
|
|
||||||
### Variables
|
### Variables
|
||||||
|
|
||||||
| Variable | Example | Description |
|
| Variable | Example | Description |
|
||||||
| -------- | -------- | ------------------------------------ |
|
| -------- | -------- | ------------------------------------------- |
|
||||||
| version | `v2.5.1` | The version of `ruby` |
|
| version | `v2.5.1` | The version of `ruby` |
|
||||||
| symbol | | Mirrors the value of option `symbol` |
|
| symbol | | Mirrors the value of option `symbol` |
|
||||||
| style\* | | Mirrors the value of option `style` |
|
| style\* | | Mirrors the value of option `style` |
|
||||||
|
| gemset | `test` | Optional, gets the current RVM gemset name. |
|
||||||
|
|
||||||
*: This variable can only be used as a part of a style string
|
*: This variable can only be used as a part of a style string
|
||||||
|
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
use regex::Regex;
|
||||||
|
|
||||||
use super::{Context, Module, ModuleConfig};
|
use super::{Context, Module, ModuleConfig};
|
||||||
|
|
||||||
use crate::configs::ruby::RubyConfig;
|
use crate::configs::ruby::RubyConfig;
|
||||||
@ -45,6 +47,9 @@ pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
|
|||||||
config.version_format,
|
config.version_format,
|
||||||
)
|
)
|
||||||
.map(Ok),
|
.map(Ok),
|
||||||
|
"gemset" => {
|
||||||
|
format_rvm_gemset(&context.exec_cmd("rvm", &["current"])?.stdout).map(Ok)
|
||||||
|
}
|
||||||
_ => None,
|
_ => None,
|
||||||
})
|
})
|
||||||
.parse(None, Some(context))
|
.parse(None, Some(context))
|
||||||
@ -81,10 +86,21 @@ fn format_ruby_version(ruby_version: &str, version_format: &str) -> Option<Strin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn format_rvm_gemset(current: &str) -> Option<String> {
|
||||||
|
let gemset_re = Regex::new(r"@(\S+)").unwrap();
|
||||||
|
if let Some(gemset) = gemset_re.captures(current) {
|
||||||
|
let gemset_name = gemset.get(1)?.as_str();
|
||||||
|
return Some(gemset_name.to_string());
|
||||||
|
}
|
||||||
|
|
||||||
|
None
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::test::ModuleRenderer;
|
use crate::test::ModuleRenderer;
|
||||||
|
use crate::utils::CommandOutput;
|
||||||
use nu_ansi_term::Color;
|
use nu_ansi_term::Color;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::io;
|
use std::io;
|
||||||
@ -163,6 +179,58 @@ mod tests {
|
|||||||
dir.close()
|
dir.close()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn rvm_gemset_active() -> io::Result<()> {
|
||||||
|
let dir = tempfile::tempdir()?;
|
||||||
|
File::create(dir.path().join("any.rb"))?.sync_all()?;
|
||||||
|
|
||||||
|
let actual = ModuleRenderer::new("ruby")
|
||||||
|
.path(dir.path())
|
||||||
|
.cmd(
|
||||||
|
"rvm current",
|
||||||
|
Some(CommandOutput {
|
||||||
|
stdout: String::from("ruby-2.5.1@test\n"),
|
||||||
|
stderr: String::default(),
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
.config(toml::toml! {
|
||||||
|
[ruby]
|
||||||
|
format = "via [$symbol($version)@($gemset )]($style)"
|
||||||
|
version_format = "${raw}"
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
let expected = Some(format!("via {}", Color::Red.bold().paint("💎 2.5.1@test ")));
|
||||||
|
|
||||||
|
assert_eq!(expected, actual);
|
||||||
|
dir.close()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn rvm_gemset_not_active() -> io::Result<()> {
|
||||||
|
let dir = tempfile::tempdir()?;
|
||||||
|
File::create(dir.path().join("any.rb"))?.sync_all()?;
|
||||||
|
|
||||||
|
let actual = ModuleRenderer::new("ruby")
|
||||||
|
.path(dir.path())
|
||||||
|
.cmd(
|
||||||
|
"rvm current",
|
||||||
|
Some(CommandOutput {
|
||||||
|
// with no gemset, `rvm current` outputs an empty string
|
||||||
|
stdout: String::default(),
|
||||||
|
stderr: String::default(),
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
.config(toml::toml! {
|
||||||
|
[ruby]
|
||||||
|
format = "via [$symbol($version)(@$gemset) ]($style)"
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
let expected = Some(format!("via {}", Color::Red.bold().paint("💎 v2.5.1 ")));
|
||||||
|
|
||||||
|
assert_eq!(expected, actual);
|
||||||
|
dir.close()
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_format_ruby_version() {
|
fn test_format_ruby_version() {
|
||||||
let config = RubyConfig::default();
|
let config = RubyConfig::default();
|
||||||
|
Loading…
Reference in New Issue
Block a user