feat: implement the ruby module (#131)
This commit is contained in:
parent
f10bfe4616
commit
b06249d61c
|
@ -30,6 +30,7 @@ The prompt shows information you need while you're working, while staying sleek
|
||||||
- Current username if not the same as the logged-in user.
|
- Current username if not the same as the logged-in user.
|
||||||
- Current Node.js version(`⬢`).
|
- Current Node.js version(`⬢`).
|
||||||
- Current Rust version (`🦀`).
|
- Current Rust version (`🦀`).
|
||||||
|
- Current Ruby version (`💎`).
|
||||||
- Current Python version (`🐍`).
|
- Current Python version (`🐍`).
|
||||||
- Current Go version (`🐹`).
|
- Current Go version (`🐹`).
|
||||||
- Package version of package in current directory (`📦`).
|
- Package version of package in current directory (`📦`).
|
||||||
|
|
|
@ -4,12 +4,19 @@ steps:
|
||||||
inputs:
|
inputs:
|
||||||
versionSpec: "12.0.0"
|
versionSpec: "12.0.0"
|
||||||
displayName: "Install a fixed version of Node"
|
displayName: "Install a fixed version of Node"
|
||||||
|
|
||||||
# Install Go
|
# Install Go
|
||||||
- task: GoTool@0
|
- task: GoTool@0
|
||||||
inputs:
|
inputs:
|
||||||
versionSpec: "1.10"
|
versionSpec: "1.10"
|
||||||
displayName: "Install a fixed version of Go"
|
displayName: "Install a fixed version of Go"
|
||||||
|
|
||||||
|
# Install Ruby
|
||||||
|
- task: UseRubyVersion@0
|
||||||
|
inputs:
|
||||||
|
versionSpec: "2.5.5"
|
||||||
|
displayName: "Install a fixed version of Ruby"
|
||||||
|
|
||||||
# We are using pyenv to install Python for integration tests
|
# We are using pyenv to install Python for integration tests
|
||||||
# Install Python
|
# Install Python
|
||||||
- script: |
|
- script: |
|
||||||
|
|
|
@ -292,6 +292,29 @@ The `line_break` module separates the prompt into two lines.
|
||||||
disabled = true
|
disabled = true
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Ruby
|
||||||
|
|
||||||
|
The `ruby` module shows the currently installed version of NodeJS.
|
||||||
|
The module will be shown if any of the following conditions are met:
|
||||||
|
|
||||||
|
- The current directory contains a `Gemfile` file
|
||||||
|
- The current directory contains a `.rb` file
|
||||||
|
|
||||||
|
### Options
|
||||||
|
|
||||||
|
| Variable | Default | Description |
|
||||||
|
| ---------- | ------- | -------------------------------------------------------- |
|
||||||
|
| `disabled` | `false` | Disables the `ruby` module. |
|
||||||
|
|
||||||
|
### Example
|
||||||
|
|
||||||
|
```toml
|
||||||
|
# ~/.config/starship.toml
|
||||||
|
|
||||||
|
[ruby]
|
||||||
|
disabled = false
|
||||||
|
```
|
||||||
|
|
||||||
## NodeJS
|
## NodeJS
|
||||||
|
|
||||||
The `nodejs` module shows the currently installed version of NodeJS.
|
The `nodejs` module shows the currently installed version of NodeJS.
|
||||||
|
|
|
@ -10,6 +10,7 @@ mod line_break;
|
||||||
mod nodejs;
|
mod nodejs;
|
||||||
mod package;
|
mod package;
|
||||||
mod python;
|
mod python;
|
||||||
|
mod ruby;
|
||||||
mod rust;
|
mod rust;
|
||||||
mod username;
|
mod username;
|
||||||
|
|
||||||
|
@ -23,6 +24,7 @@ pub fn handle<'a>(module: &str, context: &'a Context) -> Option<Module<'a>> {
|
||||||
"nodejs" => nodejs::module(context),
|
"nodejs" => nodejs::module(context),
|
||||||
"rust" => rust::module(context),
|
"rust" => rust::module(context),
|
||||||
"python" => python::module(context),
|
"python" => python::module(context),
|
||||||
|
"ruby" => ruby::module(context),
|
||||||
"golang" => golang::module(context),
|
"golang" => golang::module(context),
|
||||||
"line_break" => line_break::module(context),
|
"line_break" => line_break::module(context),
|
||||||
"package" => package::module(context),
|
"package" => package::module(context),
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
use ansi_term::Color;
|
||||||
|
use std::process::Command;
|
||||||
|
|
||||||
|
use super::{Context, Module};
|
||||||
|
|
||||||
|
/// Creates a module with the current Ruby version
|
||||||
|
///
|
||||||
|
/// Will display the Ruby version if any of the following criteria are met:
|
||||||
|
/// - Current directory contains a `.rb` file
|
||||||
|
/// - Current directory contains a `Gemfile` file
|
||||||
|
pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
|
||||||
|
let is_rb_project = context
|
||||||
|
.new_scan_dir()
|
||||||
|
.set_files(&["Gemfile"])
|
||||||
|
.set_extensions(&["rb"])
|
||||||
|
.scan();
|
||||||
|
|
||||||
|
if !is_rb_project {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
|
||||||
|
match get_ruby_version() {
|
||||||
|
Some(ruby_version) => {
|
||||||
|
const RUBY_CHAR: &str = "💎 ";
|
||||||
|
let module_color = Color::Red.bold();
|
||||||
|
|
||||||
|
let mut module = context.new_module("ruby")?;
|
||||||
|
module.set_style(module_color);
|
||||||
|
|
||||||
|
let formatted_version = format_ruby_version(&ruby_version)?;
|
||||||
|
module.new_segment("symbol", RUBY_CHAR);
|
||||||
|
module.new_segment("version", &formatted_version);
|
||||||
|
|
||||||
|
Some(module)
|
||||||
|
}
|
||||||
|
None => None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_ruby_version() -> Option<String> {
|
||||||
|
match Command::new("ruby").arg("-v").output() {
|
||||||
|
Ok(output) => Some(String::from_utf8(output.stdout).unwrap()),
|
||||||
|
Err(_) => None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn format_ruby_version(ruby_version: &str) -> Option<String> {
|
||||||
|
let version = ruby_version
|
||||||
|
// split into ["ruby", "2.6.0p0", "linux/amd64"]
|
||||||
|
.split_whitespace()
|
||||||
|
// return "2.6.0p0"
|
||||||
|
.nth(1)?
|
||||||
|
.get(0..5)?;
|
||||||
|
|
||||||
|
let mut formatted_version = String::with_capacity(version.len() + 1);
|
||||||
|
formatted_version.push('v');
|
||||||
|
formatted_version.push_str(version);
|
||||||
|
Some(formatted_version)
|
||||||
|
}
|
|
@ -27,6 +27,16 @@ RUN git clone https://github.com/syndbg/goenv.git $GOENV_ROOT \
|
||||||
# Check that Go was correctly installed
|
# Check that Go was correctly installed
|
||||||
RUN go version
|
RUN go version
|
||||||
|
|
||||||
|
# Install Ruby
|
||||||
|
ENV RUBY_VERSION 2.5.5
|
||||||
|
ENV RBENV_ROOT /home/nonroot/.rbenv
|
||||||
|
ENV PATH $RBENV_ROOT/bin:$RBENV_ROOT/shims:$PATH
|
||||||
|
RUN curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-installer | bash \
|
||||||
|
&& rbenv install $RUBY_VERSION \
|
||||||
|
&& rbenv global $RUBY_VERSION
|
||||||
|
# Check that Ruby was correctly installed
|
||||||
|
RUN ruby --version
|
||||||
|
|
||||||
# Install Python
|
# Install Python
|
||||||
ENV PYTHON_VERSION 3.6.9
|
ENV PYTHON_VERSION 3.6.9
|
||||||
ENV PYENV_ROOT /home/nonroot/.pyenv
|
ENV PYENV_ROOT /home/nonroot/.pyenv
|
||||||
|
|
|
@ -8,4 +8,5 @@ mod jobs;
|
||||||
mod line_break;
|
mod line_break;
|
||||||
mod nodejs;
|
mod nodejs;
|
||||||
mod python;
|
mod python;
|
||||||
|
mod ruby;
|
||||||
mod username;
|
mod username;
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
use ansi_term::Color;
|
||||||
|
use std::fs::{self, File};
|
||||||
|
use std::io;
|
||||||
|
|
||||||
|
use crate::common;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn folder_without_ruby_files() -> io::Result<()> {
|
||||||
|
let dir = common::new_tempdir()?;
|
||||||
|
|
||||||
|
let output = common::render_module("ruby")
|
||||||
|
.arg("--path")
|
||||||
|
.arg(dir.path())
|
||||||
|
.output()?;
|
||||||
|
let actual = String::from_utf8(output.stdout).unwrap();
|
||||||
|
|
||||||
|
let expected = "";
|
||||||
|
assert_eq!(expected, actual);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn folder_with_gemfile() -> io::Result<()> {
|
||||||
|
let dir = common::new_tempdir()?;
|
||||||
|
File::create(dir.path().join("Gemfile"))?;
|
||||||
|
|
||||||
|
let output = common::render_module("ruby")
|
||||||
|
.arg("--path")
|
||||||
|
.arg(dir.path())
|
||||||
|
.output()?;
|
||||||
|
let actual = String::from_utf8(output.stdout).unwrap();
|
||||||
|
|
||||||
|
let expected = format!("via {} ", Color::Red.bold().paint("💎 v2.5.5"));
|
||||||
|
assert_eq!(expected, actual);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn folder_with_rb_file() -> io::Result<()> {
|
||||||
|
let dir = common::new_tempdir()?;
|
||||||
|
File::create(dir.path().join("any.rb"))?;
|
||||||
|
|
||||||
|
let output = common::render_module("ruby")
|
||||||
|
.arg("--path")
|
||||||
|
.arg(dir.path())
|
||||||
|
.output()?;
|
||||||
|
let actual = String::from_utf8(output.stdout).unwrap();
|
||||||
|
|
||||||
|
let expected = format!("via {} ", Color::Red.bold().paint("💎 v2.5.5"));
|
||||||
|
assert_eq!(expected, actual);
|
||||||
|
Ok(())
|
||||||
|
}
|
Loading…
Reference in New Issue