random_name_generator 4.0.1 → 4.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f728099d28460a59f2c78c3d43ca48deed8588040141a0ba14fc52b0c8285185
4
- data.tar.gz: 32174e3c901a12ab6da5eaf23a4ebf6671f07679869e061b953e0460326f8a67
3
+ metadata.gz: d7374613642f2111c5c4f4cff427d6ee2c88a99cacc5d4755b2eed1584c293b7
4
+ data.tar.gz: 78e17730bcaa7e74632f7c2063caeb0f4b31cc7f8de61435ca872969dede788c
5
5
  SHA512:
6
- metadata.gz: 0bd991d716f21b3fd88d62766d8afbfe9dd8edc086dd14577ab5ad7f87fbd04d9b45fc2eb689cc8e54d6cb062cc34bb414f6602e8538c2f28f17e7cd7584dd2d
7
- data.tar.gz: a78b01b414bbf735775449d67a7888c41f8193158cd8b3314a62b65459a609c1e3e8782c1672371880f36a4cb50fb9b5e666a528fe33778ec79c639fd687aa05
6
+ metadata.gz: 409911e7d194ebabe10d1d88d44df023a6025092100885db770742f0f4a1b1fe3a538a37f67a20fb966a67f7d415c5d541311c232ab981bed751c387f4e7b231
7
+ data.tar.gz: b60b0794a0fb21bfd45c3b641bc16a9a5f38fe9d105a86ca73e63ad80a6e130376ad377a124b76df5d148037b9503a963caafbbe143150c511c377da3e834add
@@ -28,7 +28,7 @@ jobs:
28
28
  - ruby-version: head
29
29
  allow-failure: true
30
30
  steps:
31
- - uses: actions/checkout@v4
31
+ - uses: actions/checkout@v5
32
32
  - name: Set up Ruby
33
33
  uses: ruby/setup-ruby@v1
34
34
  with:
data/AI-BOM.md ADDED
@@ -0,0 +1,85 @@
1
+ # AI Bill of Materials — random_name_generator
2
+
3
+ _Last updated: 2026-07-19 · random_name_generator v4.0.2_
4
+
5
+ An inventory of every AI component associated with this repository — development
6
+ tools used to build it, AI-generated content shipped within it, and external AI
7
+ services it integrates with (current or planned). Modeled on the SBOM concept
8
+ applied to AI systems.
9
+
10
+ **AI was first used in the `4.0.0` release.** Everything through the `3.x` line
11
+ was authored without AI assistance.
12
+
13
+ ---
14
+
15
+ ## 1. Development Tools
16
+
17
+ AI tools used to author this codebase. Not part of the shipped gem, but relevant
18
+ to provenance.
19
+
20
+ | Tool | Vendor | Role | Notes |
21
+ |------|--------|------|-------|
22
+ | Claude Code | Anthropic | AI coding assistant | Introduced in 4.0.0; drives the [`lang-gen`](./.claude/skills/lang-gen/SKILL.md) skill and general maintenance |
23
+
24
+ ---
25
+
26
+ ## 2. AI Audits
27
+
28
+ Formal code reviews performed by AI models. Full reports in `docs/`.
29
+
30
+ | Date | Model | Report | Version |
31
+ |------|-------|--------|---------|
32
+ | 2026-07-19 | Claude Fable 5 | [`docs/AUDIT_Fable_5.md`](./docs/AUDIT_Fable_5.md) | v4.0.2 |
33
+
34
+ ---
35
+
36
+ ## 3. AI-Generated Content
37
+
38
+ Syllable data and tooling produced with AI assistance and shipped in the gem.
39
+ All output was human-reviewed before commit.
40
+
41
+ | Artifact | Type | Tool | Notes |
42
+ |----------|------|------|-------|
43
+ | [`lang-gen`](./.claude/skills/lang-gen/SKILL.md) | Claude Code skill | — | Generates a fully integrated language from a plain-English theme |
44
+ | [German Curse](./lib/languages/experimental/german-curse.txt) (`GERMAN_CURSE`) | Language syllable file | `lang-gen` | Experimental; seeded from real roots, extended with invented syllables |
45
+ | [Demonic](./lib/languages/experimental/demonic.txt) (`DEMONIC`) | Language syllable file | `lang-gen` | Experimental; completed from infernal-name source lists |
46
+ | [Portable lang-gen prompt](./docs/superpowers/specs/2026-07-19-lang-gen-portable-prompt.md) | Text prompt | — | LLM-agnostic version of the skill |
47
+
48
+ ---
49
+
50
+ ## 4. Algorithms Implemented
51
+
52
+ Generative logic built directly into the gem. **No machine-learning models and
53
+ no external ML dependencies** — all name generation is deterministic,
54
+ in-process, and driven by plain syllable-adjacency rules.
55
+
56
+ | Algorithm | Location | Notes |
57
+ |-----------|----------|-------|
58
+ | Probabilistic syllable composition | `RandomNameGenerator::Generator` | Random prefix/middle/suffix assembly honoring `+v`/`+c`/`-v`/`-c` adjacency flags |
59
+ | Syllable parsing / classification | `RandomNameGenerator::Syllable` | Parses each language-file line into a flagged syllable |
60
+
61
+ This is a rules-based random generator, not an AI/ML system. It is listed here
62
+ for completeness so the boundary between "AI-assisted authoring" and "AI at
63
+ runtime" is explicit.
64
+
65
+ ---
66
+
67
+ ## 5. External AI Integrations
68
+
69
+ random_name_generator ships **zero external AI service dependencies**. It makes
70
+ no network calls and requires no API keys. None are planned.
71
+
72
+ | Service | Type | Status |
73
+ |---------|------|--------|
74
+ | — | — | None (current or planned) |
75
+
76
+ ---
77
+
78
+ ## 6. References
79
+
80
+ | Document | Purpose |
81
+ |----------|---------|
82
+ | [`docs/AUDIT_Fable_5.md`](./docs/AUDIT_Fable_5.md) | Full-codebase audit with empirically verified findings |
83
+ | [`.claude/skills/lang-gen/SKILL.md`](./.claude/skills/lang-gen/SKILL.md) | The lang-gen language-generation skill |
84
+ | [`README.md`](./README.md) | Project overview, including the lang-gen workflow |
85
+ | [`docs/superpowers/specs/2026-07-19-lang-gen-portable-prompt.md`](./docs/superpowers/specs/2026-07-19-lang-gen-portable-prompt.md) | Paste-into-any-LLM version of the prompt |
data/Gemfile CHANGED
@@ -7,14 +7,13 @@ gemspec
7
7
 
8
8
  gem "pry"
9
9
  gem "rake", "~> 13.4"
10
- gem "slop", "~> 4.10.1"
11
10
 
12
11
  group :development do
12
+ gem "logger" # logger leaves the default gems in Ruby 4.0; Reek (via dry-core) requires it implicitly.
13
13
  gem "reek"
14
14
  gem "rspec", "~> 3.12.0"
15
15
  gem "rubocop"
16
16
  gem "rubocop-rake", require: false
17
17
  gem "rubocop-rspec", require: false
18
- # tsort left the default gems in Ruby 4.1; RuboCop requires it implicitly.
19
- gem "tsort"
18
+ gem "tsort" # tsort left the default gems in Ruby 4.1; RuboCop requires it implicitly.
20
19
  end
data/Gemfile.lock CHANGED
@@ -1,7 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- random_name_generator (4.0.1)
4
+ random_name_generator (4.0.3)
5
+ slop (~> 4.10)
5
6
 
6
7
  GEM
7
8
  remote: https://rubygems.org/
@@ -40,6 +41,7 @@ GEM
40
41
  zeitwerk (~> 2.6)
41
42
  json (2.7.2)
42
43
  language_server-protocol (3.17.0.3)
44
+ logger (1.7.0)
43
45
  method_source (1.1.0)
44
46
  parallel (1.26.3)
45
47
  parser (3.3.5.0)
@@ -100,6 +102,7 @@ PLATFORMS
100
102
  x86_64-linux
101
103
 
102
104
  DEPENDENCIES
105
+ logger
103
106
  pry
104
107
  rake (~> 13.4)
105
108
  random_name_generator!
@@ -108,7 +111,6 @@ DEPENDENCIES
108
111
  rubocop
109
112
  rubocop-rake
110
113
  rubocop-rspec
111
- slop (~> 4.10.1)
112
114
  tsort
113
115
 
114
116
  BUNDLED WITH
data/README.md CHANGED
@@ -4,6 +4,7 @@
4
4
  [![Build and Test](https://github.com/folkengine/random_name_generator/actions/workflows/ruby.yml/badge.svg)](https://github.com/folkengine/random_name_generator/actions/workflows/ruby.yml)
5
5
  [![Code Climate](https://codeclimate.com/github/folkengine/random_name_generator/badges/gpa.svg)](https://codeclimate.com/github/folkengine/random_name_generator)
6
6
  [![Inline docs](http://inch-ci.org/github/folkengine/random_name_generator.svg?branch=master)](http://inch-ci.org/github/folkengine/random_name_generator)
7
+ [![AI BOM](https://img.shields.io/badge/AI--BOM-tracked-blueviolet)](./AI-BOM.md)
7
8
 
8
9
  Ruby port of
9
10
  [java-random-name-generator](https://github.com/folkengine/java-random-name-generator),
@@ -40,7 +41,7 @@ Or install it yourself as:
40
41
  generate a first and last name for you:
41
42
 
42
43
  ```shell
43
- $> exe/random_name_generator [-egrfcxß?]
44
+ $> exe/random_name_generator [-egrkfcxdß?]
44
45
  ```
45
46
 
46
47
  You can also install it so that it's instantly available to you:
@@ -57,12 +58,13 @@ RandomNameGenerator comes with several styles of syllable files:
57
58
  [Elven](https://github.com/folkengine/random_name_generator/blob/master/lib/languages/elven.txt),
58
59
  [Fantasy](https://github.com/folkengine/random_name_generator/blob/master/lib/languages/fantasy.txt),
59
60
  [Goblin](https://github.com/folkengine/random_name_generator/blob/master/lib/languages/goblin.txt),
61
+ [Roman](https://github.com/folkengine/random_name_generator/blob/master/lib/languages/roman.txt),
60
62
  and
61
- [Roman](https://github.com/folkengine/random_name_generator/blob/master/lib/languages/roman.txt).
63
+ [Klingon](https://github.com/folkengine/random_name_generator/blob/master/lib/languages/klingon.txt).
62
64
  By default it uses Fantasy. Instantiate RandomNameGenerator and then
63
65
  call compose on the object to generate a random name. If you don't pass
64
66
  in the number of syllables you want for your name to compose, it will
65
- randomly pick between 3 and 6.
67
+ randomly pick between 2 and 5.
66
68
 
67
69
  ```ruby
68
70
  require 'random_name_generator'
@@ -99,7 +101,9 @@ for the required specification.
99
101
  Edgier, less curated syllable sets live under `lib/languages/experimental/`
100
102
  and are opt-in via their own constants:
101
103
  [Curse](https://github.com/folkengine/random_name_generator/blob/master/lib/languages/experimental/curse.txt)
102
- (`RandomNameGenerator::CURSE`) and
104
+ (`RandomNameGenerator::CURSE`),
105
+ [Demonic](https://github.com/folkengine/random_name_generator/blob/master/lib/languages/experimental/demonic.txt)
106
+ (`RandomNameGenerator::DEMONIC`), and
103
107
  [German Curse](https://github.com/folkengine/random_name_generator/blob/master/lib/languages/experimental/german-curse.txt)
104
108
  (`RandomNameGenerator::GERMAN_CURSE`).
105
109
 
@@ -149,9 +153,9 @@ https://github.com/folkengine/random_name_generator.
149
153
  This ships with a skill designed to work with [Claude Code](https://claude.com/claude-code)
150
154
  and other LLMs under `.claude/skills/`.
151
155
 
152
- - [lang-gen](.claude/skills/lang-gen/SKILL.md) Generate a new random_name_generator language from a free-text theme (e.g. "german curse words") assembles flagged pre/mid/sur syllable collections, registers the File constant, adds a smoke spec and README entry, and samples names to verify.
156
+ - [lang-gen](.claude/skills/lang-gen/SKILL.md): Generate a new random_name_generator language from a free-text theme (e.g. "german curse words"), assembles flagged pre/mid/sur syllable collections, registers the File constant, adds a smoke spec and README entry, and samples names to verify.
153
157
 
154
- There is also [a text version](docs/superpowers/specs/2026-07-19-lang-gen-portable-prompt.md) of the prompt that can be pasted into an LLM.
158
+ There is also [a text version](docs/superpowers/specs/2026-07-19-lang-gen-portable-prompt.md) of the prompt that can be pasted into an LLM.
155
159
 
156
160
  ### lang-gen
157
161
 
@@ -0,0 +1,151 @@
1
+ # random_name_generator Repository Audit — Claude Fable 5
2
+
3
+ _Date:_ 2026-07-19
4
+ _Repo:_ `random_name_generator` v4.0.2 (working tree, including the in-flight Demonic language and CLI additions)
5
+ _Model:_ Claude Fable 5 (`claude-fable-5`)
6
+ _Audit basis:_ Full codebase read + empirical verification — every defect below was reproduced with a live repro before being reported.
7
+
8
+ > **Remediation:** all nine findings were fixed on 2026-07-19, immediately following
9
+ > this audit, with regression specs added for each (suite grew from 61 to 168
10
+ > examples). The findings below describe the codebase as audited.
11
+
12
+ ---
13
+
14
+ ## Executive Summary
15
+
16
+ `random_name_generator` is a small, clean, dependency-light gem that does what it says: green test suite (61 examples, 0 failures), RuboCop clean at repo settings (11 files, no offenses), no runtime gem dependencies, and a simple two-class core (`Generator`, `Syllable`) that is easy to hold in your head.
17
+
18
+ The audit found **3 high-severity defects** — one packaging, two runtime — and a cluster of medium/low issues concentrated in `Syllable`'s letter classification and error paths. None affect the happy path exercised by the specs, which is precisely why they have survived: the suite tests that names compose, not what happens at the edges.
19
+
20
+ | # | Finding | Severity | Effort to fix |
21
+ |---|---------|----------|---------------|
22
+ | 1 | CLI requires `slop`, but the gemspec declares no runtime dependency on it | High | Low |
23
+ | 2 | `compose(1)` crashes (`String#map`) despite documented single-syllable support | High | Low |
24
+ | 3 | Unsatisfiable adjacency flags hang the process in an infinite loop | High | Medium |
25
+ | 4 | Blank line in a language file crashes `Generator#refresh` | Medium | Low |
26
+ | 5 | Documented `Syllable` clone constructor crashes | Medium | Low |
27
+ | 6 | Cyrillic letters are in neither letter set — all flags in the four `-ru` files are silent no-ops | Medium | Medium |
28
+ | 7 | Empty-syllable guard is doubly broken (unreachable + malformed `raise`) | Low | Low |
29
+ | 8 | `y` classified as both vowel and consonant | Low | Low |
30
+ | 9 | Documentation drift on syllable-count range (README vs code vs spec) | Low | Low |
31
+
32
+ ---
33
+
34
+ ## Scope and Method
35
+
36
+ **Verified by direct read (complete files):**
37
+
38
+ - `lib/random_name_generator.rb`
39
+ - `lib/random_name_generator/syllable.rb`
40
+ - `lib/random_name_generator/version.rb`
41
+ - `exe/random_name_generator`
42
+ - `spec/random_name_generator_spec.rb` and both spec fixture languages
43
+ - `random_name_generator.gemspec`, `Gemfile`, `Rakefile`
44
+ - `.github/workflows/ruby.yml`
45
+ - All 13 language files (curated, `-ru`, and experimental)
46
+
47
+ **Verified empirically:** every High/Medium finding was reproduced by executing the failing call under the bundle, including a `Timeout`-guarded repro for the infinite loop and a crafted two-line language file for the blank-line crash (which was also hit organically during this session, completing the WIP `demonic.txt`).
48
+
49
+ **Health signals:**
50
+
51
+ - `bundle exec rspec`: **61 examples, 0 failures**
52
+ - `bundle exec rubocop`: **11 files inspected, no offenses**
53
+ - `bundle exec rake` (default: spec + rubocop): green
54
+ - Runtime dependencies: none declared (see Finding 1 for the catch)
55
+
56
+ ---
57
+
58
+ ## Findings
59
+
60
+ ### 1. Missing runtime dependency: the installed CLI cannot start (High)
61
+
62
+ `exe/random_name_generator` line 6 does `require "slop"`, but `slop` is declared only in the **Gemfile** (`gem "slop", "~> 4.10.1"`), which end users never see. The gemspec's dependency section is an empty template comment.
63
+
64
+ Consequence: after `gem install random_name_generator`, running `random_name_generator` raises `LoadError: cannot load such file -- slop` on any machine that doesn't coincidentally have slop installed. Every CI run and local dev invocation goes through Bundler, so this is invisible to the test suite by construction.
65
+
66
+ **Fix (low effort):** add `spec.add_dependency "slop", "~> 4.10"` to the gemspec and remove it from the Gemfile.
67
+
68
+ ### 2. `compose(1)` crashes despite documented support (High)
69
+
70
+ `syllable.rb`'s header documentation states: *"In case of 1 syllable, name will be chosen from amongst the prefixes."* The code disagrees:
71
+
72
+ - `Generator#compose_array` (`lib/random_name_generator.rb:89`) returns a **String** (`@pre.to_s.capitalize`) when `count < 2`, an Array otherwise.
73
+ - `Generator#compose` (`lib/random_name_generator.rb:97`) unconditionally calls `.map` on that result.
74
+
75
+ Repro: `RandomNameGenerator.new(ELVEN).compose(1)` → `NoMethodError: undefined method 'map' for an instance of String`.
76
+
77
+ The type-splitting return also makes `compose_array(1)` a misnomer — callers get a String from a method named `_array`. **Fix:** have `compose_array` return `[@pre]` for `count < 2`; both bugs disappear and the return type becomes honest.
78
+
79
+ ### 3. Unsatisfiable flag combinations hang the process (High)
80
+
81
+ `Generator#determine_next_syllable` (`lib/random_name_generator.rb:126-133`) is a bare `loop` that resamples until it draws a compatible syllable. If **no** syllable in the target bucket is compatible, it spins forever.
82
+
83
+ Repro (hangs, killed by timeout): a language whose only prefix is `-ba +v` (next must start with a vowel) and whose only suffix is `+kar`. Since the README explicitly invites users to supply their own syllable files, this is reachable input, not just an authoring mistake — one bad file freezes the host application with no diagnostic.
84
+
85
+ **Fix (medium effort):** track attempts (or pre-filter the bucket by compatibility) and raise a descriptive error when no compatible syllable exists.
86
+
87
+ ### 4. Blank lines in language files crash loading (Medium)
88
+
89
+ `Generator#refresh` (`lib/random_name_generator.rb:138`) guards with `line.empty?`, but lines from `readlines` retain `"\n"`, so the guard never fires; `Syllable#parse_args` then splits the whitespace-only string into `[]` and calls `nil.empty?` (`syllable.rb:137`) → `NoMethodError`.
90
+
91
+ This is not hypothetical: the committed WIP `demonic.txt` used blank lines as bucket separators and crashed on load — likely part of why that file sat unfinished. **Fix:** `line.strip.empty?` in `refresh` (one word), or skip whitespace-only lines in `Syllable`.
92
+
93
+ ### 5. Documented `Syllable` clone constructor crashes (Medium)
94
+
95
+ The `Syllable` header advertises `Syllable.new(syllable)` as a cloning idiom, and `initialize` has an explicit `args.is_a?(Syllable)` branch for it (`syllable.rb:56-60`). But line 49 — `@raw = args.strip` — executes first, and `Syllable` defines no `strip`.
96
+
97
+ Repro: `Syllable.new(Syllable.new("-foo +c"))` → `NoMethodError: undefined method 'strip' for an instance of RandomNameGenerator::Syllable`. The clone path is dead code; nothing in the gem or specs exercises it. **Fix:** `@raw = args.to_s.strip` (Syllable already implements `to_s`), plus a spec.
98
+
99
+ ### 6. Adjacency flags are silent no-ops for Cyrillic (Medium)
100
+
101
+ `Syllable::VOWELS` and `CONSONANTS` (`syllable.rb:45-46`) contain only Latin/IPA characters. For a Cyrillic syllable, `vowel_first?`, `consonant_first?`, `vowel_last?`, and `consonant_last?` are all **false** (verified: `-анг` reports neither vowel- nor consonant-final).
102
+
103
+ Consequence: in `next_incompatible?`/`previous_incompatible?`, nothing can ever be incompatible, so every `+v/+c/-v/-c` flag in the four `-ru` language files — and all four carry them — is dead weight. Names still generate; they just ignore constraints the language authors wrote, silently. **Fix:** add Cyrillic vowels (а е ё и о у ы э ю я) and consonants to the sets, or classify by Unicode-aware rules.
104
+
105
+ ### 7. The empty-syllable guard is doubly broken (Low)
106
+
107
+ `syllable.rb:137`: `raise ArgumentError "Empty String is not allowed." if syll.empty?`
108
+
109
+ - **Unreachable as intended:** an empty or whitespace input produces `args[0] == nil`, so `syll.empty?` raises `NoMethodError` on `nil` before the guard can act (this is the crash surfacing in Findings 4 and the `Syllable.new("")` repro).
110
+ - **Malformed if it were reached:** the missing comma means `ArgumentError "…"` is parsed as a method call, which would itself raise `NoMethodError`, not the intended `ArgumentError`.
111
+
112
+ **Fix:** `raise ArgumentError, "…" if syll.nil? || syll.empty?`.
113
+
114
+ ### 8. `y` is both a vowel and a consonant (Low)
115
+
116
+ `y` appears in both letter sets, so `+v` and `+c` flags each accept y-initial syllables. Linguistically defensible for a semivowel, but it's undocumented and asymmetric (no other letter is dual-classified). Worth a comment if intentional.
117
+
118
+ ### 9. Documentation drift on syllable counts (Low)
119
+
120
+ Three sources disagree with the code (`pick_number_of_syllables` samples from a weighted 2–5 distribution):
121
+
122
+ - README: "it will randomly pick between 3 and 6"
123
+ - Module doc in `random_name_generator.rb`: "between 2 and 5" ✓ (correct)
124
+ - Spec title: "returns an integer between 1 and 6" (assertion actually checks 1..5)
125
+
126
+ Also cosmetic: the CLI help text spells "syllable" as "eyllable" in four option descriptions.
127
+
128
+ ---
129
+
130
+ ## Test Coverage Assessment
131
+
132
+ The suite is a smoke suite: it proves every bundled language loads and composes, and that syllable counts come out right. It does **not** cover:
133
+
134
+ - Adjacency-flag semantics (no spec would catch Finding 6 — the flags could be deleted entirely and the suite stays green)
135
+ - Any error path (Findings 2, 4, 5, 7 are all crashes in paths with zero coverage)
136
+ - The CLI (`exe/` has no test at all; Finding 1 ships silently)
137
+
138
+ The fixture languages (`test-micro.txt`, `test-tiny.txt`) are well-designed for flag testing — `test-tiny.txt` deliberately exercises every flag combination — but no assertion actually inspects flag behavior.
139
+
140
+ ---
141
+
142
+ ## Recommendations (priority order)
143
+
144
+ 1. **Gemspec:** declare the `slop` runtime dependency. One line; unbreaks the installed CLI.
145
+ 2. **`compose_array`:** return `[@pre]` for `count < 2`. Fixes `compose(1)` and the return-type lie.
146
+ 3. **`refresh`:** strip lines before the empty check. Fixes blank-line crashes and makes hand-authored files forgiving.
147
+ 4. **`determine_next_syllable`:** bound the retry loop with a clear error. Turns a hang into a diagnosis.
148
+ 5. **Letter sets:** add Cyrillic ranges so the `-ru` flags do what their authors intended; add a flag-behavior spec pinned to `test-tiny.txt`.
149
+ 6. **Cleanups:** fix the `raise` syntax and clone constructor, correct the README/spec-title ranges, fix "eyllable".
150
+
151
+ None of these threaten the gem's architecture, which is sound for its size. The pattern across all findings is the same: the edges were never walked. A dozen targeted specs would lock in every fix above.
@@ -8,12 +8,14 @@ require "slop"
8
8
  lang = RandomNameGenerator::FANTASY
9
9
 
10
10
  opts = Slop.parse do |o|
11
- o.bool "-e", "--elven", "Use Elven eyllable file"
12
- o.bool "-g", "--goblin", "Use Goblin eyllable file"
13
- o.bool "-r", "--roman", "Use Roman eyllable file"
11
+ o.bool "-e", "--elven", "Use Elven syllable file"
12
+ o.bool "-g", "--goblin", "Use Goblin syllable file"
13
+ o.bool "-r", "--roman", "Use Roman syllable file"
14
+ o.bool "-k", "--klingon", "Use Klingon syllable file"
14
15
  o.bool "-f", "--flipmode", "Flip mode in effect"
15
16
  o.bool "-c", "--cyrillic", "Use Cyrillic mode"
16
17
  o.bool "-x", "--xrated", "Generate Curse words [NEEDS WORK]"
18
+ o.bool "-d", "--demonic", "Generate Demonic names"
17
19
  o.bool "-ß", "--german-curse", "Generate German Curse words [NEEDS WORK]"
18
20
  o.bool "-?", "--help", "How to"
19
21
  end
@@ -27,7 +29,9 @@ else
27
29
  lang = RandomNameGenerator::ELVEN if opts.elven?
28
30
  lang = RandomNameGenerator::GOBLIN if opts.goblin?
29
31
  lang = RandomNameGenerator::ROMAN if opts.roman?
32
+ lang = RandomNameGenerator::KLINGON if opts.klingon?
30
33
  lang = RandomNameGenerator::CURSE if opts.xrated?
34
+ lang = RandomNameGenerator::DEMONIC if opts.demonic?
31
35
  lang = RandomNameGenerator::GERMAN_CURSE if opts.german_curse?
32
36
  end
33
37