Update to adjective_adjective_animal

This commit is contained in:
Travis Burtrum 2018-08-07 00:08:48 -04:00
parent 843ca9c9b2
commit 240308389c
18 changed files with 11040 additions and 2680 deletions

4
.gitignore vendored
View File

@ -1,2 +1,4 @@
target target
/Cargo.lock Cargo.lock
cli/Cargo.lock
.idea

View File

@ -14,15 +14,3 @@ script:
- cargo test --verbose - cargo test --verbose
- cargo doc --verbose - cargo doc --verbose
- "(cd cli && cargo build --verbose)" - "(cd cli && cargo build --verbose)"
after_success: |
[ $TRAVIS_BRANCH = master ] &&
[ $TRAVIS_PULL_REQUEST = false ] &&
echo '<meta http-equiv=refresh content=0;url=names/index.html>' > target/doc/index.html &&
pip install ghp-import --user $USER &&
$HOME/.local/bin/ghp-import -n target/doc &&
git push -fq https://${TOKEN}@github.com/${TRAVIS_REPO_SLUG}.git gh-pages
env:
global:
secure: B6wLsR6HDHo/VhjM2azghFJ66PZIyNyDDfly4FT0P9UmmHEwdM1mk3YWlNx9NT2s8jp9I+wChYehPeWjCTd8QHVyYgvKS0FdHFNZDMTBE306q6fjQgMxLXsLINkc4U2+b3JUjx/lyAzvVjNIO53KXq+ydWXbrHEWIKTvzkm5o7zNNJQ2ZHMQm6SlJVY++x439PMMPTp9KZWYcwroNrpf+cUdMbvVhF7DA/5SysJpXDL4Y7KC7kzyOXdZPOhW4qK1FNKCmIB7t1OwgMXS8/b260nvAKPRUCA7IodRdogBieDEZ3CW5qhiT/kUgWC3aRgpS9nhiv3YLbArR5bv3IO2s8t2w34A4TJl5NcTMzW2PZQSniGxhX4CA2gQJHa3QlVxZkOXDATJkZeqtoB7vY6Amf/Gv8pZoMnz5OlKqbkAy8iRhtgTczEfG91C6jxY5FLixo/g3ccZoOK5Fy9O+CI8VNp7DAlMSK2+NZVdIDNhuRgGFxT6HMQCeo65tgdWAwIigR6D58cO4sLbh8TvQL7vzNOtfvZ8IZKVSIOMb4KDxAzKShq3m3P7XOWQUt2DuhpYiT4PdcyVqoQUrUmSp1M6mulglefSqVuyv4h7vUAGzmLgcO4lpZy69452JfvphRAYOniWvXZA5HKCVWZCjBy9H+/szQqeJ445pVlsZMUQAUQ=

View File

@ -1,30 +1,3 @@
## 0.11.0 / 2016-04-29 ## 0.1.0 / 2018-10-06
### Breaking API changes
* Move adjectives const to `names::ADJECTIVES`. ([@fnichol][])
* Move nouns const to `names::NOUNS`. ([@fnichol][])
### Improvements
* (cli) Add color and suggestions features. ([@fnichol][])
* Inline adjective and noun data from plaintext files. ([@fnichol][])
## 0.10.0 / 2015-11-01
### Breaking API changes
* Use `Default` trait for Generator & Name types. ([@fnichol][])
### Improvements
* (cli) Update usage output. ([@fnichol][])
## 0.9.0 / 2015-09-15
The initial release. The initial release.
<!--- The following link definition list is generated by PimpMyChangelog --->
[@fnichol]: https://github.com/fnichol

View File

@ -1,23 +1,23 @@
[package] [package]
name = "names" name = "adjective_adjective_animal"
version = "0.11.0" version = "0.1.0"
authors = ["Fletcher Nichol <fnichol@nichol.ca>"] authors = ["Travis Burtrum <admin.github@moparisthebest.com>", "Fletcher Nichol <fnichol@nichol.ca>"]
license = "MIT" license = "MIT"
readme = "README.md" readme = "README.md"
documentation = "http://fnichol.github.io/names/names/" documentation = "https://github.com/moparisthebest/adjective-adjective-animal"
repository = "https://github.com/fnichol/names.git" repository = "https://github.com/moparisthebest/adjective-adjective-animal.git"
homepage = "https://github.com/fnichol/names.git" homepage = "https://github.com/moparisthebest/adjective-adjective-animal"
keywords = ["name", "random"] keywords = ["name", "random", "adjective", "animal"]
description = """ description = """
A library to generate random name strings suitable for use in container A library to generate suitably random and reasonably unique human readable (and fairly adorable) ids,
instances, project names, application instances, etc. ala GiphyCat
""" """
exclude = ["cli"] exclude = ["cli"]
build = "build.rs" build = "build.rs"
[lib] [lib]
name = "names" name = "adjective_adjective_animal"
path = "src/lib.rs" path = "src/lib.rs"
[dependencies] [dependencies]
rand = "0.3.0" rand = "0.5.4"

View File

@ -1,3 +1,4 @@
Copyright (c) 2018 Travis Burtrum
Copyright (c) 2015 Fletcher Nichol Copyright (c) 2015 Fletcher Nichol
Permission is hereby granted, free of charge, to any Permission is hereby granted, free of charge, to any

View File

@ -1,28 +1,29 @@
# names # adjective_adjective_animal
[![Build Status](https://travis-ci.org/fnichol/names.svg?branch=master)](https://travis-ci.org/fnichol/names) [![](http://meritbadge.herokuapp.com/names)](https://crates.io/crates/names) [![license](http://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/fnichol/names/blob/master/LICENSE-MIT) [![Build Status](https://travis-ci.org/moparisthebest/adjective-adjective-animal.svg?branch=master)](https://travis-ci.org/moparisthebest/adjective-adjective-animal) [![license](http://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/moparisthebest/adjective-adjective-animal/blob/master/LICENSE-MIT)
Random name generator for Rust Rust library to generate suitably random and reasonably unique human readable (and fairly adorable) ids,
ala GiphyCat
* Crate: https://crates.io/crates/names * Crate: https://crates.io/crates/adjective_adjective_animal
* Documentation http://fnichol.github.io/names/names/ * Documentation https://docs.rs/crate/adjective_adjective_animal
* Source Code: https://github.com/fnichol/names * Source Code: https://github.com/moparisthebest/adjective-adjective-animal
## Usage ## Usage
This crate is [on crates.io](https://crates.io/crates/names) and can be This crate is [on crates.io](https://crates.io/crates/adjective_adjective_animal) and can be
used by adding `names` to your dependencies in your project's `Cargo.toml` used by adding `adjective_adjective_animal` to your dependencies in your project's `Cargo.toml`
file: file:
```toml ```toml
[dependencies] [dependencies]
names = "0.10.0" adjective_adjective_animal = "0.1.0"
``` ```
and this to your crate root: and this to your crate root:
```rust ```rust
extern crate names; extern crate adjective_adjective_animal;
``` ```
### Example: Painless defaults ### Example: Painless defaults
@ -31,43 +32,37 @@ The easiest way to get started is to use the default `Generator` to return
a name: a name:
```rust ```rust
use names::{Generator, Name}; use adjective_adjective_animal::Generator;
fn main() { fn main() {
let mut generator = Generator::with_naming(Name::Plain); let mut generator = Generator::default();
println!("Your project is: {}", generator.next().unwrap()); println!("Your project is: {}", generator.next().unwrap());
// #=> "Your project is: rusty-nail" // #=> "Your project is: IndustrialSecretiveSwan"
} }
```
If more randomness is required, you can generate a name with a trailing
4-digit number:
```rust
use names::{Generator, Name};
fn main() {
let mut generator = Generator::with_naming(Name::Numbered);
println!("Your project is: {}", generator.next().unwrap());
// #=> "Your project is: pushy-pencil-5602"
}
``` ```
# Example: with custom dictionaries # Example: with custom dictionaries
If you would rather supply your own custom adjective and noun word lists, If you would rather supply your own custom adjective and animal word lists,
you can provide your own by supplying 2 string slices. For example, you can provide your own by supplying 2 string slices. For example,
this returns only one result: this returns only one result:
``` ```
use names::{Generator, Name}; use adjective_adjective_animal::Generator;
fn main() { fn main() {
let adjectives = &["imaginary"]; let adjectives = &["Imaginary"];
let nouns = &["roll"]; let animals = &["Bear"];
let mut generator = Generator::new(adjectives, nouns, Name::Plain); let mut generator = Generator::new(adjectives, animals);
assert_eq!("imaginary-roll", generator.next().unwrap()); assert_eq!("ImaginaryImaginaryBear", generator.next().unwrap());
} }
``` ```
# Credits
* rust's [names](https://github.com/fnichol/names) crate, which this is forked from
* npm's [adjective-adjective-animal](https://github.com/a-type/adjective-adjective-animal) for lists
* `curl 'https://raw.githubusercontent.com/a-type/adjective-adjective-animal/master/lib/lists/animals.js' | grep -Eo '"[^"]+"' | tr -d '"' | tr '[:upper:]' '[:lower:]' | sed 's/.*/\u&/' | sort | uniq > animals.txt`
* `curl 'https://raw.githubusercontent.com/a-type/adjective-adjective-animal/master/lib/lists/adjectives.js' | grep -Eo '"[^"]+"' | tr -d '"' | tr '[:upper:]' '[:lower:]' | sed 's/.*/\u&/' | sort | uniq > adjectives.txt`

View File

@ -7,8 +7,8 @@ use std::path::Path;
fn main() { fn main() {
generate(Path::new("data").join("adjectives.txt").as_path(), generate(Path::new("data").join("adjectives.txt").as_path(),
Path::new(&env::var("OUT_DIR").unwrap()).join("adjectives.rs").as_path()); Path::new(&env::var("OUT_DIR").unwrap()).join("adjectives.rs").as_path());
generate(Path::new("data").join("nouns.txt").as_path(), generate(Path::new("data").join("animals.txt").as_path(),
Path::new(&env::var("OUT_DIR").unwrap()).join("nouns.rs").as_path()); Path::new(&env::var("OUT_DIR").unwrap()).join("animals.rs").as_path());
} }
fn generate(src_path: &Path, dst_path: &Path) { fn generate(src_path: &Path, dst_path: &Path) {

170
cli/Cargo.lock generated
View File

@ -1,170 +0,0 @@
[root]
name = "names-cli"
version = "0.11.0"
dependencies = [
"clap 2.27.1 (registry+https://github.com/rust-lang/crates.io-index)",
"names 0.11.0",
]
[[package]]
name = "ansi_term"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "atty"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
"termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "bitflags"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "bitflags"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "clap"
version = "2.27.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"ansi_term 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"atty 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
"bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
"strsim 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
"textwrap 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"unicode-width 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"vec_map 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "fuchsia-zircon"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"fuchsia-zircon-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "fuchsia-zircon-sys"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "kernel32-sys"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "libc"
version = "0.2.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "names"
version = "0.11.0"
dependencies = [
"rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "rand"
version = "0.3.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"fuchsia-zircon 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "redox_syscall"
version = "0.1.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "redox_termios"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"redox_syscall 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "strsim"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "termion"
version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
"redox_syscall 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)",
"redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "textwrap"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"unicode-width 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "unicode-width"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "vec_map"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "winapi"
version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "winapi-build"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
[metadata]
"checksum ansi_term 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "23ac7c30002a5accbf7e8987d0632fa6de155b7c3d39d0067317a391e00a2ef6"
"checksum atty 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "21e50800ec991574876040fff8ee46b136a53e985286fbe6a3bdfe6421b78860"
"checksum bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "aad18937a628ec6abcd26d1489012cc0e18c21798210f491af69ded9b881106d"
"checksum bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4efd02e230a02e18f92fc2735f44597385ed02ad8f831e7c1c1156ee5e1ab3a5"
"checksum clap 2.27.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1b8c532887f1a292d17de05ae858a8fe50a301e196f9ef0ddb7ccd0d1d00f180"
"checksum fuchsia-zircon 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f6c0581a4e363262e52b87f59ee2afe3415361c6ec35e665924eb08afe8ff159"
"checksum fuchsia-zircon-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "43f3795b4bae048dc6123a6b972cadde2e676f9ded08aef6bb77f5f157684a82"
"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
"checksum libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "5ba3df4dcb460b9dfbd070d41c94c19209620c191b0340b929ce748a2bcd42d2"
"checksum rand 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)" = "6475140dfd8655aeb72e1fd4b7a1cc1c202be65d71669476e392fe62532b9edd"
"checksum redox_syscall 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)" = "8dde11f18c108289bef24469638a04dce49da56084f2d50618b226e47eb04509"
"checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76"
"checksum strsim 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b4d15c810519a91cf877e7e36e63fe068815c678181439f2f29e2562147c3694"
"checksum termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096"
"checksum textwrap 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c0b59b6b4b44d867f1370ef1bd91bfb262bf07bf0ae65c202ea2fbc16153b693"
"checksum unicode-width 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "bf3a113775714a22dcb774d8ea3655c53a32debae63a063acc00a91cc586245f"
"checksum vec_map 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "887b5b631c2ad01628bbbaa7dd4c869f80d3186688f8d0b6f58774fbe324988c"
"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"

View File

@ -1,21 +1,21 @@
[package] [package]
name = "names-cli" name = "adjective_adjective_animal_cli"
version = "0.11.0" version = "0.1.0"
authors = ["Fletcher Nichol <fnichol@nichol.ca>"] authors = ["Travis Burtrum <admin.github@moparisthebest.com>", "Fletcher Nichol <fnichol@nichol.ca>"]
license = "MIT" license = "MIT"
repository = "https://github.com/fnichol/names.git" repository = "https://github.com/moparisthebest/adjective-adjective-animal.git"
homepage = "https://github.com/fnichol/names.git" homepage = "https://github.com/moparisthebest/adjective-adjective-animal"
description = """ description = """
A program to generate random names that look like 'used-jellyfish'. A program to generate random names that look like 'DeliriousHungryDolphin'.
""" """
[[bin]] [[bin]]
name = "names" name = "aaa"
path = "src/main.rs" path = "src/main.rs"
[dependencies.clap] [dependencies.clap]
version = "~2.27" version = "~2.27"
features = [ "suggestions", "color", "unstable" ] features = [ "suggestions", "color", "unstable" ]
[dependencies.names] [dependencies.adjective_adjective_animal]
path = ".." path = ".."

View File

@ -1,156 +1,65 @@
# names - cli # aaa - cli
[![Build Status](https://travis-ci.org/fnichol/names.svg?branch=master)](https://travis-ci.org/fnichol/names) [![license](http://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/fnichol/names/blob/master/LICENSE-MIT) [![Build Status](https://travis-ci.org/moparisthebest/adjective-adjective-animal.svg?branch=master)](https://travis-ci.org/moparisthebest/adjective-adjective-animal) [![license](http://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/moparisthebest/adjective-adjective-animal/blob/master/LICENSE-MIT)
Random name generator tool that gives you Heroku or Docker-style names. Random name generator tool that gives you suitably random and reasonably unique human readable
(and fairly adorable) ids, ala GiphyCat
## Usage ## Usage
Simple! Run without any parameters, you get a name: Simple! Run without any parameters, you get a name:
```sh ```sh
> names > aaa
selfish-change IndustrialSecretiveSwan
``` ```
Need more? Tell it how many: Need more? Tell it how many:
```sh ```sh
> names 10 > aaa 10
rustic-flag IronfistedSubhexagonalTern
nondescript-crayon HoroscopicDrowsyBlackfish
picayune-map QuarrelsomeDoubtfulCommabutterfly
elderly-cough UniqueHurtYaffle
skinny-jeans GrubbyBoskyIchthyosaurs
neat-rock BolsteredSyntheticTopi
aware-sponge PredespondentAssociativeOkapi
psychotic-coast StereotypedComfortableScaup
brawny-event CuratorialLacklustreWyvern
tender-oatmeal DazedStonyGiantschnauze
```
Not random enough? How about adding a 4-number pad:
```sh
> names --number 5
imported-rod-9680
thin-position-2344
hysterical-women-5647
volatile-pen-9210
diligent-grip-4520
``` ```
If you're ever confused, at least there's help: If you're ever confused, at least there's help:
```sh ```sh
> names --help > aaa --help
names 0.11.0 aaa 0.1.0
Author: Fletcher Nichol <fnichol@nichol.ca> Author: Travis Burtrum <admin.github@moparisthebest.com>
A random name generator with results like `DeliriousHungryDolphin'.
A random name generator with results like `delirious-pail'.
USAGE: USAGE:
names [FLAGS] [ARGS] aaa [amount]
FLAGS: FLAGS:
-h, --help Prints help information -h, --help Prints help information
-n, --number Adds a random number to the name(s)
-V, --version Prints version information -V, --version Prints version information
ARGS: ARGS:
[amount] Number of names to generate (default: 1) <amount> Number of names to generate (default: 1)
``` ```
## Installation ## Installation
### GitHub releases
There are binary builds for Mac OS X (referred to as "Darwin") and Linux (a small, self-contained static binary) available through the project's [GitHub releases](https://github.com/fnichol/names/releases).
### Docker images
If Docker is more your speed, there's a speedy teeny tiny image (~1MB) on the Docker hub at [fnichol/names](https://hub.docker.com/r/fnichol/names/). It's pretty easy to get started:
```sh
> docker run fnichol/names 4
furtive-polish
modern-business
alive-sun
tremendous-line
```
### Building from source ### Building from source
If you want (or need) to build the CLI from source, the following should not take too long. Note that you'll need a version of Rust (and Cargo which ships with the Rust distributions) before running: If you want (or need) to build the CLI from source, the following should not take too long. Note that you'll need a version of Rust (and Cargo which ships with the Rust distributions) before running:
```sh ```sh
> git clone https://github.com/fnichol/names.git > git clone https://github.com/moparisthebest/adjective-adjective-animal.git
> cd names/cli > cd adjective-adjective-animal/cli
> cargo build --release > cargo build --release
# test it out # test it out
> ./target/release/names > ./target/release/aaa
``` ```
#### A static binary on Linux?
This project was used by its author to experiment with producing static binaries on Linux from a Rust project that has no external dependencies. This was done using a special build of Rust that supports the [musl](http://www.musl-libc.org/) libc project, available via the [fnichol/rust:1.8.0-musl](https://hub.docker.com/r/fnichol/rust/) Docker image. Here's an example building the CLI to a static ELF binary on Linux:
```sh
> git clone https://github.com/fnichol/names.git
> cd names
> docker run --rm -ti -v `pwd`:/src -w /src/cli fnichol/rust:1.8.0-musl \
cargo build --release --target=x86_64-unknown-linux-musl
> docker run --rm -ti -v `pwd`:/src fnichol/rust:1.8.0-musl \
du -h ./cli/target/x86_64-unknown-linux-musl/release/names
1.5M ./cli/target/x86_64-unknown-linux-musl/release/names
> docker run --rm -ti -v `pwd`:/src fnichol/rust:1.8.0-musl \
ldd ./cli/target/x86_64-unknown-linux-musl/release/names
not a dynamic executable
> docker run --rm -ti -v `pwd`:/src fnichol/rust:1.8.0-musl \
file ./cli/target/x86_64-unknown-linux-musl/release/names
./cli/target/x86_64-unknown-linux-musl/release/names: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, BuildID[sha1]=6ad327ca3a5b21c42fa158832d89f6e9b0fc8e73, not stripped
```
A variant of this approach is used in the [build_linux.sh](https://github.com/fnichol/names/blob/master/cli/scripts/build_linux.sh) script, which additional strips the binary and produces a Zip archive and SHA 256 checksum:
```sh
> git clone https://github.com/fnichol/names.git
> cd names
> ./cli/scripts/build_linux.sh 0.11.0
> du -h ./cli/target/x86_64-unknown-linux-musl/release/names
996K ./cli/target/x86_64-unknown-linux-musl/release/names
> file ./cli/target/x86_64-unknown-linux-musl/release/names
./cli/target/x86_64-unknown-linux-musl/release/names: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, stripped
> du -csh ./cli/target/names*.zip*
396K cli/target/names_0.11.0_linux_x86_64.zip
4.0K cli/target/names_0.11.0_linux_x86_64.zip.sha256
400K total
```
## User feedback
### Issues
If you have any problems with or questions about this image, please contact us through a [GitHub issue](https://github.com/fnichol/names/issues).
### Contributing
You are invited to contribute new features, fixes, or updates, large or small; we are always thrilled to receive pull requests, and do our best to process them as fast as we can.
Before you start to code, we recommend discussing your plans through a [GitHub issue](https://github.com/fnichol/names/issues), especially for more ambitious contributions. This gives other contributors a chance to point you in the right direction, give you feedback on your design, and help you find out if someone else is working on the same thing.
## Authors
Created and maintained by [Fletcher Nichol](https://github.com/fnichol) (<fnichol@nichol.ca>)
## License
MIT (see [LICENSE-MIT](https://github.com/fnichol/names/blob/master/LICENSE-MIT))

View File

@ -1,24 +0,0 @@
#!/usr/bin/env bash
set -eu
if [ -n "${DEBUG:-}" ]; then set -x; fi
if [ "`uname`" != "Darwin" ]; then
echo ">>> $0 must be executed on Darwin platform, aborting"
exit 11
fi
VERSION="${1:-${VERSION}}"
echo "--> Building Darwin release artifact version $VERSION"
pushd `dirname $0`/../../
PLATFORM="`uname | tr [[:upper:]] [[:lower:]]`_`uname -m`"
BIN=target/release/names
cd cli
cargo build --verbose --release
strip "$BIN"
ZIPFILE="`pwd`/target/`basename $BIN`_${VERSION}_$PLATFORM.zip"
(cd "`dirname $BIN`"; zip -9 "$ZIPFILE" "`basename $BIN`")
cd `dirname $ZIPFILE`
shasum -a 256 `basename $ZIPFILE` > `basename $ZIPFILE`.sha256
popd
echo "--> Finished build Darwin release artifact version $VERSION."

View File

@ -1,43 +0,0 @@
#!/usr/bin/env bash
set -eu
if [ -n "${DEBUG:-}" ]; then set -x; fi
if ! command -v docker >/dev/null; then
echo ">>> $0 must be executed on a system with Docker installed, aborting"
exit 11
fi
on_exit() {
if [ -d "${docker_context:-}" ]; then
echo "Cleaning up Docker context $docker_context"
rm -rf "$docker_context"
fi
}
trap on_exit 1 2 3 15 ERR
VERSION="${1:-${VERSION}}"
docker_context="`mktemp -d -t build_docker-XXXX`"
repo="fnichol/names"
github_repo="https://github.com/$repo/releases/download"
echo "--> Building Docker release artifact version $VERSION"
pushd "$docker_context"
curl -fsSLO \
"$github_repo/v${VERSION}/names_${VERSION}_linux_x86_64.zip"
curl -fsSLO \
"$github_repo/v${VERSION}/names_${VERSION}_linux_x86_64.zip.sha256"
shasum -a 256 -c names_*.zip.sha256
unzip names_*.zip
rm -f names_*.zip
cat <<_DOCKERFILE_ >Dockerfile
FROM scratch
ADD names /names
ENTRYPOINT ["/names"]
_DOCKERFILE_
docker build -t "$repo:$VERSION" .
if [ -n "${LATEST:-}" ]; then docker build -t "$repo:latest" .; fi
popd
echo "--> Finished build Docker release artifact version $VERSION."

View File

@ -1,30 +0,0 @@
#!/usr/bin/env bash
set -eu
if [ -n "${DEBUG:-}" ]; then set -x; fi
if ! command -v docker >/dev/null; then
echo ">>> $0 must be executed on a system with Docker installed, aborting"
exit 11
fi
VERSION="${1:-${VERSION}}"
echo "--> Building Linux release artifact version $VERSION"
pushd `dirname $0`/../../
docker run --rm -v `pwd`:/src -e VERSION=$VERSION fnichol/rust:1.8.0-musl \
bash -c 'set -eux
apt-get update
apt-get install -y zip
PLATFORM="`uname | tr [[:upper:]] [[:lower:]]`_`uname -m`"
TARGET=x86_64-unknown-linux-musl
BIN=target/$TARGET/release/names
cd cli
cargo build --verbose --release --target=$TARGET
strip "$BIN"
ZIPFILE="`pwd`/target/`basename $BIN`_${VERSION}_$PLATFORM.zip"
(cd "`dirname $BIN`"; zip -9 "$ZIPFILE" "`basename $BIN`")
cd `dirname $ZIPFILE`
shasum -a 256 `basename $ZIPFILE` > `basename $ZIPFILE`.sha256
'
popd
echo "--> Finished build Linux release artifact version $VERSION."

View File

@ -1,31 +1,24 @@
#[macro_use] #[macro_use]
extern crate clap; extern crate clap;
extern crate names; extern crate adjective_adjective_animal;
use names::{Generator, Name}; use adjective_adjective_animal::Generator;
fn main() { fn main() {
let (naming, amount) = { let amount = {
let app = let app =
clap_app!(names => clap_app!(aaa =>
(version: &crate_version!()[..]) (version: &crate_version!()[..])
(author: "\nAuthor: Fletcher Nichol <fnichol@nichol.ca>\n") (author: "\nAuthor: Travis Burtrum <admin.github@moparisthebest.com>\n")
(about: "A random name generator with results like `delirious-pail'.") (about: "A random name generator with results like `DeliriousHungryDolphin'.")
(@setting ColoredHelp) (@setting ColoredHelp)
(@arg amount: "Number of names to generate (default: 1)") (@arg amount: "Number of names to generate (default: 1)")
(@arg number: -n --number "Adds a random number to the name(s)")
); );
let matches = app.get_matches(); let matches = app.get_matches();
let amount = value_t!(matches.value_of("amount"), usize).unwrap_or(1); value_t!(matches.value_of("amount"), usize).unwrap_or(1)
let naming: Name = if matches.is_present("number") {
Name::Numbered
} else {
Default::default()
};
(naming, amount)
}; };
let mut generator = Generator::with_naming(naming); let mut generator = Generator::default();
for _ in 0..amount { for _ in 0..amount {
println!("{}", generator.next().unwrap()); println!("{}", generator.next().unwrap());
} }

File diff suppressed because it is too large Load Diff

1748
data/animals.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,981 +0,0 @@
able
account
achieve
achiever
acoustics
act
action
activity
actor
addition
adjustment
advertisement
advice
aftermath
afternoon
afterthought
agreement
air
airplane
airport
alarm
alley
amount
amusement
anger
angle
animal
answer
ant
ants
apparatus
apparel
apple
apples
appliance
approval
arch
argument
arithmetic
arm
army
art
attack
attempt
attention
attraction
aunt
authority
babies
baby
back
badge
bag
bait
balance
ball
balloon
balls
banana
band
base
baseball
basin
basket
basketball
bat
bath
battle
bead
beam
bean
bear
bears
beast
bed
bedroom
beds
bee
beef
beetle
beggar
beginner
behavior
belief
believe
bell
bells
berry
bike
bikes
bird
birds
birth
birthday
bit
bite
blade
blood
blow
board
boat
boats
body
bomb
bone
book
books
boot
border
bottle
boundary
box
boy
boys
brain
brake
branch
brass
bread
breakfast
breath
brick
bridge
brother
brothers
brush
bubble
bucket
building
bulb
bun
burn
burst
bushes
business
butter
button
cabbage
cable
cactus
cake
cakes
calculator
calendar
camera
camp
can
cannon
canvas
cap
caption
car
card
care
carpenter
carriage
cars
cart
cast
cat
cats
cattle
cause
cave
celery
cellar
cemetery
cent
chain
chair
chairs
chalk
chance
change
channel
cheese
cherries
cherry
chess
chicken
chickens
children
chin
church
circle
clam
class
clock
clocks
cloth
cloud
clouds
clover
club
coach
coal
coast
coat
cobweb
coil
collar
color
comb
comfort
committee
company
comparison
competition
condition
connection
control
cook
copper
copy
cord
cork
corn
cough
country
cover
cow
cows
crack
cracker
crate
crayon
cream
creator
creature
credit
crib
crime
crook
crow
crowd
crown
crush
cry
cub
cup
current
curtain
curve
cushion
dad
daughter
day
death
debt
decision
deer
degree
design
desire
desk
destruction
detail
development
digestion
dime
dinner
dinosaurs
direction
dirt
discovery
discussion
disease
disgust
distance
distribution
division
dock
doctor
dog
dogs
doll
dolls
donkey
door
downtown
drain
drawer
dress
drink
driving
drop
drug
drum
duck
ducks
dust
ear
earth
earthquake
edge
education
effect
egg
eggnog
eggs
elbow
end
engine
error
event
example
exchange
existence
expansion
experience
expert
eye
eyes
face
fact
fairies
fall
family
fan
fang
farm
farmer
father
faucet
fear
feast
feather
feeling
feet
fiction
field
fifth
fight
finger
fire
fireman
fish
flag
flame
flavor
flesh
flight
flock
floor
flower
flowers
fly
fog
fold
food
foot
force
fork
form
fowl
frame
friction
friend
friends
frog
frogs
front
fruit
fuel
furniture
galley
game
garden
gate
geese
ghost
giants
giraffe
girl
girls
glass
glove
glue
goat
gold
goldfish
good-bye
goose
government
governor
grade
grain
grandfather
grandmother
grape
grass
grip
ground
group
growth
guide
guitar
gun
hair
haircut
hall
hammer
hand
hands
harbor
harmony
hat
hate
head
health
hearing
heart
heat
help
hen
hill
history
hobbies
hole
holiday
home
honey
hook
hope
horn
horse
horses
hose
hospital
hot
hour
house
houses
humor
hydrant
ice
icicle
idea
impulse
income
increase
industry
ink
insect
instrument
insurance
interest
invention
iron
island
jail
jam
jar
jeans
jelly
jellyfish
jewel
join
joke
journey
judge
juice
jump
kettle
key
kick
kiss
kite
kitten
kittens
kitty
knee
knife
knot
knowledge
laborer
lace
ladybug
lake
lamp
land
language
laugh
lawyer
lead
leaf
learning
leather
leg
legs
letter
letters
lettuce
level
library
lift
light
limit
line
linen
lip
liquid
list
lizards
loaf
lock
locket
look
loss
love
low
lumber
lunch
lunchroom
machine
magic
maid
mailbox
man
manager
map
marble
mark
market
mask
mass
match
meal
measure
meat
meeting
memory
men
metal
mice
middle
milk
mind
mine
minister
mint
minute
mist
mitten
mom
money
monkey
month
moon
morning
mother
motion
mountain
mouth
move
muscle
music
nail
name
nation
neck
need
needle
nerve
nest
net
news
night
noise
north
nose
note
notebook
number
nut
oatmeal
observation
ocean
offer
office
oil
operation
opinion
orange
oranges
order
organization
ornament
oven
owl
owner
page
pail
pain
paint
pan
pancake
paper
parcel
parent
park
part
partner
party
passenger
paste
patch
payment
peace
pear
pen
pencil
person
pest
pet
pets
pickle
picture
pie
pies
pig
pigs
pin
pipe
pizzas
place
plane
planes
plant
plantation
plants
plastic
plate
play
playground
pleasure
plot
plough
pocket
point
poison
police
polish
pollution
popcorn
porter
position
pot
potato
powder
power
price
print
prison
process
produce
profit
property
prose
protest
pull
pump
punishment
purpose
push
quarter
quartz
queen
question
quicksand
quiet
quill
quilt
quince
quiver
rabbit
rabbits
rail
railway
rain
rainstorm
rake
range
rat
rate
ray
reaction
reading
reason
receipt
recess
record
regret
relation
religion
representative
request
respect
rest
reward
rhythm
rice
riddle
rifle
ring
rings
river
road
robin
rock
rod
roll
roof
room
root
rose
route
rub
rule
run
sack
sail
salt
sand
scale
scarecrow
scarf
scene
scent
school
science
scissors
screw
sea
seashore
seat
secretary
seed
selection
self
sense
servant
shade
shake
shame
shape
sheep
sheet
shelf
ship
shirt
shock
shoe
shoes
shop
show
side
sidewalk
sign
silk
silver
sink
sister
sisters
size
skate
skin
skirt
sky
slave
sleep
sleet
slip
slope
smash
smell
smile
smoke
snail
snails
snake
snakes
sneeze
snow
soap
society
sock
soda
sofa
son
song
songs
sort
sound
soup
space
spade
spark
spiders
sponge
spoon
spot
spring
spy
square
squirrel
stage
stamp
star
start
statement
station
steam
steel
stem
step
stew
stick
sticks
stitch
stocking
stomach
stone
stop
store
story
stove
stranger
straw
stream
street
stretch
string
structure
substance
sugar
suggestion
suit
summer
sun
support
surprise
sweater
swim
swing
system
table
tail
talk
tank
taste
tax
teaching
team
teeth
temper
tendency
tent
territory
test
texture
theory
thing
things
thought
thread
thrill
throat
throne
thumb
thunder
ticket
tiger
time
tin
title
toad
toe
toes
tomatoes
tongue
tooth
toothbrush
toothpaste
top
touch
town
toy
toys
trade
trail
train
trains
tramp
transport
tray
treatment
tree
trees
trick
trip
trouble
trousers
truck
trucks
tub
turkey
turn
twig
twist
umbrella
uncle
underwear
unit
use
vacation
value
van
vase
vegetable
veil
vein
verse
vessel
vest
view
visitor
voice
volcano
volleyball
voyage
walk
wall
war
wash
waste
watch
water
wave
waves
wax
way
wealth
weather
week
weight
wheel
whip
whistle
wilderness
wind
window
wine
wing
winter
wire
wish
woman
women
wood
wool
word
work
worm
wound
wren
wrench
wrist
writer
writing
yak
yam
yard
yarn
year
yoke
zebra
zephyr
zinc
zipper
zoo

View File

@ -1,24 +1,24 @@
//! This crate provides a generate that constructs random name strings suitable //! This crate provides a generate that constructs suitably random and reasonably unique human
//! for use in container instances, project names, application instances, etc. //! readable (and fairly adorable) ids, ala GiphyCat.
//! //!
//! The name `Generator` implements the `Iterator` trait so it can be used with //! The name `Generator` implements the `Iterator` trait so it can be used with
//! adapters, consumers, and in loops. //! adapters, consumers, and in loops.
//! //!
//! # Usage //! # Usage
//! //!
//! This crate is [on crates.io](https://crates.io/crates/names) and can be //! This crate is [on crates.io](https://crates.io/crates/adjective_adjective_animal) and can be
//! used by adding `names` to your dependencies in your project's `Cargo.toml` //! used by adding `adjective_adjective_animal` to your dependencies in your project's `Cargo.toml`
//! file: //! file:
//! //!
//! ```toml //! ```toml
//! [dependencies] //! [dependencies]
//! names = "0.9.0" //! adjective_adjective_animal = "0.9.0"
//! ``` //! ```
//! //!
//! and this to your crate root: //! and this to your crate root:
//! //!
//! ``` //! ```
//! extern crate names; //! extern crate adjective_adjective_animal;
//! ``` //! ```
//! //!
//! # Example: painless defaults //! # Example: painless defaults
@ -27,38 +27,27 @@
//! a name: //! a name:
//! //!
//! ``` //! ```
//! use names::Generator; //! use adjective_adjective_animal::Generator;
//! //!
//! let mut generator = Generator::default(); //! let mut generator = Generator::default();
//! println!("Your project is: {}", generator.next().unwrap()); //! println!("Your project is: {}", generator.next().unwrap());
//! // #=> "Your project is: rusty-nail" //! // #=> "Your project is: IndustrialSecretiveSwan"
//! ```
//!
//! If more randomness is required, you can generate a name with a trailing
//! 4-digit number:
//!
//! ```
//! use names::{Generator, Name};
//!
//! let mut generator = Generator::with_naming(Name::Numbered);
//! println!("Your project is: {}", generator.next().unwrap());
//! // #=> "Your project is: pushy-pencil-5602"
//! ``` //! ```
//! //!
//! # Example: with custom dictionaries //! # Example: with custom dictionaries
//! //!
//! If you would rather supply your own custom adjective and noun word lists, //! If you would rather supply your own custom adjective and animal word lists,
//! you can provide your own by supplying 2 string slices. For example, //! you can provide your own by supplying 2 string slices. For example,
//! this returns only one result: //! this returns only one result:
//! //!
//! ``` //! ```
//! use names::{Generator, Name}; //! use adjective_adjective_animal::Generator;
//! //!
//! let adjectives = &["imaginary"]; //! let adjectives = &["Imaginary"];
//! let nouns = &["roll"]; //! let animals = &["Bear"];
//! let mut generator = Generator::new(adjectives, nouns, Name::default()); //! let mut generator = Generator::new(adjectives, animals);
//! //!
//! assert_eq!("imaginary-roll", generator.next().unwrap()); //! assert_eq!("ImaginaryImaginaryBear", generator.next().unwrap());
//! ``` //! ```
extern crate rand; extern crate rand;
@ -68,32 +57,16 @@ use rand::Rng;
pub const ADJECTIVES: &'static [&'static str] = pub const ADJECTIVES: &'static [&'static str] =
&include!(concat!(env!("OUT_DIR"), "/adjectives.rs")); &include!(concat!(env!("OUT_DIR"), "/adjectives.rs"));
pub const NOUNS: &'static [&'static str] = &include!(concat!(env!("OUT_DIR"), "/nouns.rs")); pub const ANIMALS: &'static [&'static str] = &include!(concat!(env!("OUT_DIR"), "/animals.rs"));
/// A naming strategy for the `Generator` /// A random name generator which combines an adjective, a animal, and an
pub enum Name {
/// This represents a plain naming strategy of the form `"ADJECTIVE-NOUN"`
Plain,
/// This represents a naming strategy with a random number appended to the
/// end, of the form `"ADJECTIVE-NOUN-NUMBER"`
Numbered,
}
impl Default for Name {
fn default() -> Self {
Name::Plain
}
}
/// A random name generator which combines an adjective, a noun, and an
/// optional number /// optional number
/// ///
/// A `Generator` takes a slice of adjective and noun words strings and has /// A `Generator` takes a slice of adjective and animal words strings and has
/// a naming strategy (with or without a number appended). /// a naming strategy (with or without a number appended).
pub struct Generator<'a> { pub struct Generator<'a> {
adjectives: &'a [&'a str], adjectives: &'a [&'a str],
nouns: &'a [&'a str], animals: &'a [&'a str],
naming: Name,
} }
impl<'a> Generator<'a> { impl<'a> Generator<'a> {
@ -102,54 +75,34 @@ impl<'a> Generator<'a> {
/// # Examples /// # Examples
/// ///
/// ``` /// ```
/// use names::{Generator, Name}; /// use adjective_adjective_animal::Generator;
/// ///
/// let adjectives = &["sassy"]; /// let adjectives = &["Sassy"];
/// let nouns = &["clocks"]; /// let animals = &["Fox"];
/// let naming = Name::Plain;
/// ///
/// let mut generator = Generator::new(adjectives, nouns, naming); /// let mut generator = Generator::new(adjectives, animals);
/// ///
/// assert_eq!("sassy-clocks", generator.next().unwrap()); /// assert_eq!("SassySassyFox", generator.next().unwrap());
/// ``` /// ```
pub fn new(adjectives: &'a [&'a str], nouns: &'a [&'a str], naming: Name) -> Self { pub fn new(adjectives: &'a [&'a str], animals: &'a [&'a str]) -> Self {
Generator { Generator {
adjectives: adjectives, adjectives: adjectives,
nouns: nouns, animals: animals,
naming: naming,
} }
} }
/// Construct and returns a default `Generator<'a>` containing a large
/// collection of adjectives and nouns
///
/// ```
/// use names::{Generator, Name};
///
/// let mut generator = Generator::with_naming(Name::Plain);
///
/// println!("My new name is: {}", generator.next().unwrap());
/// ```
pub fn with_naming(naming: Name) -> Self {
Generator::new(ADJECTIVES, NOUNS, naming)
}
fn rand_adj(&self) -> &str { fn rand_adj(&self) -> &str {
rand::thread_rng().choose(self.adjectives).unwrap() rand::thread_rng().choose(self.adjectives).unwrap()
} }
fn rand_noun(&self) -> &str { fn rand_animal(&self) -> &str {
rand::thread_rng().choose(self.nouns).unwrap() rand::thread_rng().choose(self.animals).unwrap()
}
fn rand_num(&self) -> u16 {
rand::thread_rng().gen_range(1, 10000)
} }
} }
impl<'a> Default for Generator<'a> { impl<'a> Default for Generator<'a> {
fn default() -> Self { fn default() -> Self {
Generator::new(ADJECTIVES, NOUNS, Name::default()) Generator::new(ADJECTIVES, ANIMALS)
} }
} }
@ -157,12 +110,6 @@ impl<'a> Iterator for Generator<'a> {
type Item = String; type Item = String;
fn next(&mut self) -> Option<String> { fn next(&mut self) -> Option<String> {
let adj = self.rand_adj(); Some(format!("{}{}{}", self.rand_adj(), self.rand_adj(), self.rand_animal()))
let noun = self.rand_noun();
Some(match self.naming {
Name::Plain => format!("{}-{}", adj, noun),
Name::Numbered => format!("{}-{}-{:04}", adj, noun, self.rand_num()),
})
} }
} }