concode 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +89 -0
- data/bin/concode +82 -0
- data/lib/concode.rb +5 -0
- data/lib/concode/dictionary.rb +89 -0
- data/lib/concode/generator.rb +82 -0
- data/lib/concode/version.rb +3 -0
- metadata +148 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: cd3faa4e73894a255484599c7ecd4de50ea792a3767b4628d31199174d68e6f1
|
4
|
+
data.tar.gz: 6804b4a00dd99af12b7d3d63ee84d71c4e3e05a74a141559962cb4ee8e86fdaf
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 10a902bb3ba086ee23bd84bc6bb385d59cf90f05ab7bf29a548182a46c87b107225c46c707d1a479641b8ff7480782857ef3b39c3d6db44c0ce06b31d808e7ab
|
7
|
+
data.tar.gz: e8dc493af8a2c0e5be8a2e82e4ca7fe39da0a769e30eb0107abae56672941514b70b42be98a5612ce73f568bb7215cb91055f407ee07dda93131261dd0db1a58
|
data/README.md
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
Concode
|
2
|
+
==================================================
|
3
|
+
|
4
|
+
---
|
5
|
+
|
6
|
+
Generate *consistent-codenames* from any string (Heroku style, aka Haiku).
|
7
|
+
|
8
|
+
This is a Ruby port of Python's [codenamize][1].
|
9
|
+
|
10
|
+
---
|
11
|
+
|
12
|
+
Installation
|
13
|
+
--------------------------------------------------
|
14
|
+
|
15
|
+
$ gem install concode
|
16
|
+
|
17
|
+
|
18
|
+
Feature Highlights
|
19
|
+
--------------------------------------------------
|
20
|
+
|
21
|
+
- Use as a Ruby library or from the command line
|
22
|
+
- Generate heroku-style / docker-style consistent codenames from any string (e.g. IP address, git commit
|
23
|
+
hash)
|
24
|
+
- Control the number of words, and number of letters in each word
|
25
|
+
- Compatibility with Python's codenamize (both libraries will generate the
|
26
|
+
same codes given the same string)
|
27
|
+
- Limitless combinations (over 1.7 million for 2 words, and 1.8 billion for 3
|
28
|
+
words)
|
29
|
+
|
30
|
+
|
31
|
+
Command Line Usage
|
32
|
+
--------------------------------------------------
|
33
|
+
|
34
|
+
```shell
|
35
|
+
$ concode
|
36
|
+
Usage: concode <string> [options]
|
37
|
+
|
38
|
+
Options:
|
39
|
+
-w, --words N Number of words to generate
|
40
|
+
-c, --chars N Max characters per word
|
41
|
+
-g, --glue CHAR Word separator
|
42
|
+
-C, --caps Capitalize words
|
43
|
+
-h, --help Show this message
|
44
|
+
--version Show version
|
45
|
+
```
|
46
|
+
|
47
|
+
### Examples
|
48
|
+
|
49
|
+
```shell
|
50
|
+
$ concode hello
|
51
|
+
plausible-term
|
52
|
+
|
53
|
+
$ concode hello --words 3
|
54
|
+
ancient-plausible-term
|
55
|
+
|
56
|
+
$ concode hello --words 3 --chars 3 --caps --glue ' '
|
57
|
+
Cut Red Bar
|
58
|
+
```
|
59
|
+
|
60
|
+
|
61
|
+
Library Usage
|
62
|
+
--------------------------------------------------
|
63
|
+
|
64
|
+
```ruby
|
65
|
+
require 'concode'
|
66
|
+
|
67
|
+
# Basic use:
|
68
|
+
|
69
|
+
generator = Concode::Generator.new
|
70
|
+
puts generator.generate 'something annoying'
|
71
|
+
# => annoyed-poem
|
72
|
+
|
73
|
+
# Or, with all the options:
|
74
|
+
|
75
|
+
generator = Concode::Generator.new words: 3, chars: 4, capitalize: true, glue: ' '
|
76
|
+
puts generator.generate 'something annoying'
|
77
|
+
# => Wise Rude Boot
|
78
|
+
```
|
79
|
+
|
80
|
+
|
81
|
+
Credits
|
82
|
+
--------------------------------------------------
|
83
|
+
|
84
|
+
Thanks to Jose Juan Montes ([@jjmontesl][2]) for developing and documenting
|
85
|
+
[codenamize][1].
|
86
|
+
|
87
|
+
|
88
|
+
[1]: https://github.com/jjmontesl/codenamize
|
89
|
+
[2]: https://github.com/jjmontesl
|
data/bin/concode
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'concode'
|
4
|
+
require 'optparse'
|
5
|
+
require 'ostruct'
|
6
|
+
require 'securerandom'
|
7
|
+
|
8
|
+
include Concode
|
9
|
+
|
10
|
+
options = OpenStruct.new words: 2, chars: 0,
|
11
|
+
caps: false, glue: '-', count: false
|
12
|
+
|
13
|
+
parser = OptionParser.new do |opts|
|
14
|
+
opts.program_name = 'concode'
|
15
|
+
opts.summary_width = 20
|
16
|
+
opts.summary_indent = ' '
|
17
|
+
|
18
|
+
opts.banner = [
|
19
|
+
"Usage:",
|
20
|
+
" #{opts.program_name} <string> [options]",
|
21
|
+
" #{opts.program_name} --random [options]",
|
22
|
+
" #{opts.program_name} --count [options]",
|
23
|
+
" #{opts.program_name} (-h|--help|-v|--version)",
|
24
|
+
].join "\n"
|
25
|
+
|
26
|
+
opts.separator ""
|
27
|
+
opts.separator "Options:"
|
28
|
+
|
29
|
+
opts.on("-w", "--words N", Integer, "Number of words to generate") do |v|
|
30
|
+
options[:words] = v
|
31
|
+
end
|
32
|
+
|
33
|
+
opts.on("-c", "--chars N", Integer, "Max characters per word") do |v|
|
34
|
+
options[:chars] = v
|
35
|
+
end
|
36
|
+
|
37
|
+
opts.on("-g", "--glue CHAR", "Word separator") do |v|
|
38
|
+
options[:glue] = v
|
39
|
+
end
|
40
|
+
|
41
|
+
opts.on("-C", "--caps", "Capitalize words") do |v|
|
42
|
+
options[:caps] = v
|
43
|
+
end
|
44
|
+
|
45
|
+
opts.on("-n", "--count", "Count possible combinations") do |v|
|
46
|
+
options[:count] = v
|
47
|
+
end
|
48
|
+
|
49
|
+
opts.on("-r", "--random", "Generate a random code") do |v|
|
50
|
+
ARGV << SecureRandom.hex
|
51
|
+
end
|
52
|
+
|
53
|
+
opts.on_tail("-h", "--help", "Show this message") do
|
54
|
+
puts opts
|
55
|
+
exit -1
|
56
|
+
end
|
57
|
+
|
58
|
+
opts.on_tail("-v", "--version", "Show version") do
|
59
|
+
puts VERSION
|
60
|
+
exit -1
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
parser.parse!
|
66
|
+
|
67
|
+
if ARGV.empty? and !options.count
|
68
|
+
puts parser.banner
|
69
|
+
exit -1
|
70
|
+
end
|
71
|
+
|
72
|
+
string = ARGV[0]
|
73
|
+
|
74
|
+
generator = Generator.new words: options.words, chars: options.chars,
|
75
|
+
glue: options.glue, capitalize: options.caps
|
76
|
+
|
77
|
+
if options.count
|
78
|
+
puts generator.word_count
|
79
|
+
else
|
80
|
+
puts generator.generate string
|
81
|
+
end
|
82
|
+
|
data/lib/concode.rb
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
module Concode
|
2
|
+
class Dictionary
|
3
|
+
class << self
|
4
|
+
def adjectives
|
5
|
+
@adjectives ||= adjectives!
|
6
|
+
end
|
7
|
+
|
8
|
+
def nouns
|
9
|
+
@nouns ||= nouns!
|
10
|
+
end
|
11
|
+
|
12
|
+
def adjective_lengths
|
13
|
+
@adjective_lengths ||= collect_lengths(adjectives)
|
14
|
+
end
|
15
|
+
|
16
|
+
def noun_lengths
|
17
|
+
@noun_lengths ||= collect_lengths(nouns)
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def adjectives!
|
23
|
+
[
|
24
|
+
"aback","abaft","abandoned","abashed","aberrant","abhorrent","abiding","abject","ablaze","able","abnormal","aboard","aboriginal","abortive","abounding","abrasive","abrupt","absent","absorbed","absorbing","abstracted","absurd","abundant","abusive","acceptable","accessible","accidental","accurate","acid","acidic","acoustic","acrid","actually","ad hoc","adamant","adaptable","addicted","adhesive","adjoining","adorable","adventurous","afraid","aggressive","agonizing","agreeable","ahead","ajar","alcoholic","alert","alike","alive","alleged","alluring","aloof","amazing","ambiguous","ambitious","amuck","amused","amusing","ancient","angry","animated","annoyed","annoying","anxious","apathetic","aquatic","aromatic","arrogant","ashamed","aspiring","assorted","astonishing","attractive","auspicious","automatic","available","average","awake","aware","awesome","awful","axiomatic",
|
25
|
+
"bad","barbarous","bashful","bawdy","beautiful","befitting","belligerent","beneficial","bent","berserk","best","better","bewildered","big","billowy","bitter","bizarre","black","bloody","blue","blushing","boiling","boorish","bored","boring","bouncy","boundless","brainy","brash","brave","brawny","breakable","breezy","brief","bright","bright","broad","broken","brown","bumpy","burly","bustling","busy",
|
26
|
+
"cagey","calculating","callous","calm","capable","capricious","careful","careless","caring","cautious","ceaseless","certain","changeable","charming","cheap","cheerful","chemical","chief","childlike","chilly","chivalrous","chubby","chunky","clammy","classy","clean","clear","clever","cloistered","cloudy","closed","clumsy","cluttered","coherent","cold","colorful","colossal","combative","comfortable","common","complete","complex","concerned","condemned","confused","conscious","cooing","cool","cooperative","coordinated","courageous","cowardly","crabby","craven","crazy","creepy","crooked","crowded","cruel","cuddly","cultured","cumbersome","curious","curly","curved","curvy","cut","cute","cute","cynical",
|
27
|
+
"daffy","daily","damaged","damaging","damp","dangerous","dapper","dark","dashing","dazzling","dead","deadpan","deafening","dear","debonair","decisive","decorous","deep","deeply","defeated","defective","defiant","delicate","delicious","delightful","demonic","delirious","dependent","depressed","deranged","descriptive","deserted","detailed","determined","devilish","didactic","different","difficult","diligent","direful","dirty","disagreeable","disastrous","discreet","disgusted","disgusting","disillusioned","dispensable","distinct","disturbed","divergent","dizzy","domineering","doubtful","drab","draconian","dramatic","dreary","drunk","dry","dull","dusty","dusty","dynamic","dysfunctional",
|
28
|
+
"eager","early","earsplitting","earthy","easy","eatable","economic","educated","efficacious","efficient","eight","elastic","elated","elderly","electric","elegant","elfin","elite","embarrassed","eminent","empty","enchanted","enchanting","encouraging","endurable","energetic","enormous","entertaining","enthusiastic","envious","equable","equal","erect","erratic","ethereal","evanescent","evasive","even","excellent","excited","exciting","exclusive","exotic","expensive","extra","exuberant","exultant",
|
29
|
+
"fabulous","faded","faint","fair","faithful","fallacious","false","familiar","famous","fanatical","fancy","fantastic","far","fascinated","fast","fat","faulty","fearful","fearless","feeble","feigned","female","fertile","festive","few","fierce","filthy","fine","finicky","first","five","fixed","flagrant","flaky","flashy","flat","flawless","flimsy","flippant","flowery","fluffy","fluttering","foamy","foolish","foregoing","forgetful","fortunate","four","frail","fragile","frantic","free","freezing","frequent","fresh","fretful","friendly","frightened","frightening","full","fumbling","functional","funny","furry","furtive","future","futuristic","fuzzy",
|
30
|
+
"gabby","gainful","gamy","gaping","garrulous","gaudy","general","gentle","giant","giddy","gifted","gigantic","glamorous","gleaming","glib","glistening","glorious","glossy","godly","good","goofy","gorgeous","graceful","grandiose","grateful","gratis","gray","greasy","great","greedy","green","grey","grieving","groovy","grotesque","grouchy","grubby","gruesome","grumpy","guarded","guiltless","gullible","gusty","guttural",
|
31
|
+
"habitual","half","hallowed","halting","handsome","handsomely","handy","hanging","hapless","happy","hard","harmonious","harsh","hateful","heady","healthy","heartbreaking","heavenly","heavy","hellish","helpful","helpless","hesitant","hideous","high","highfalutin","hilarious","hissing","historical","holistic","hollow","homeless","homely","honorable","horrible","hospitable","hot","huge","hulking","humdrum","humorous","hungry","hurried","hurt","hushed","husky","hypnotic","hysterical",
|
32
|
+
"icky","icy","idiotic","ignorant","ill","illegal","illustrious","imaginary","immense","imminent","impartial","imperfect","impolite","important","imported","impossible","incandescent","incompetent","inconclusive","industrious","incredible","inexpensive","infamous","innate","innocent","inquisitive","insidious","instinctive","intelligent","interesting","internal","invincible","irate","irritating","itchy",
|
33
|
+
"jaded","jagged","jazzy","jealous","jittery","jobless","jolly","joyous","judicious","juicy","jumbled","jumpy","juvenile",
|
34
|
+
"kaput","keen","kind","kindhearted","kindly","knotty","knowing","knowledgeable","known",
|
35
|
+
"labored","lackadaisical","lacking","lame","lamentable","languid","large","last","late","laughable","lavish","lazy","lean","learned","left","legal","lethal","level","lewd","light","like","likeable","limping","literate","little","lively","lively","living","lonely","long","longing","loose","lopsided","loud","loutish","lovely","loving","low","lowly","lucky","ludicrous","lumpy","lush","luxuriant","lying","lyrical",
|
36
|
+
"macabre","macho","maddening","madly","magenta","magical","magnificent","majestic","makeshift","male","malicious","mammoth","maniacal","many","marked","massive","married","marvelous","material","materialistic","mature","mean","measly","meaty","medical","meek","mellow","melodic","melted","merciful","mere","messy","mighty","military","milky","mindless","miniature","minor","miscreant","misty","mixed","moaning","modern","moldy","momentous","motionless","mountainous","muddled","mundane","murky","mushy","mute","mysterious",
|
37
|
+
"naive","nappy","narrow","nasty","natural","naughty","nauseating","near","neat","nebulous","necessary","needless","needy","neighborly","nervous","new","next","nice","nifty","nimble","nine","nippy","noiseless","noisy","nonchalant","nondescript","nonstop","normal","nostalgic","nosy","noxious","null","numberless","numerous","nutritious","nutty",
|
38
|
+
"oafish","obedient","obeisant","obese","obnoxious","obscene","obsequious","observant","obsolete","obtainable","oceanic","odd","offbeat","old","omniscient","one","onerous","open","opposite","optimal","orange","ordinary","organic","ossified","outgoing","outrageous","outstanding","oval","overconfident","overjoyed","overrated","overt","overwrought",
|
39
|
+
"painful","painstaking","pale","paltry","panicky","panoramic","parallel","parched","parsimonious","past","pastoral","pathetic","peaceful","penitent","perfect","periodic","permissible","perpetual","petite","petite","phobic","physical","picayune","pink","piquant","placid","plain","plant","plastic","plausible","pleasant","plucky","pointless","poised","polite","political","poor","possessive","possible","powerful","precious","premium","present","pretty","previous","pricey","prickly","private","probable","productive","profuse","protective","proud","psychedelic","psychotic","public","puffy","pumped","puny","purple","purring","pushy","puzzled","puzzling",
|
40
|
+
"quack","quaint","quarrelsome","questionable","quick","quickest","quiet","quirky","quixotic","quizzical",
|
41
|
+
"rabid","racial","ragged","rainy","rambunctious","rampant","rapid","rare","raspy","ratty","ready","real","rebel","receptive","recondite","red","redundant","reflective","regular","relieved","remarkable","reminiscent","repulsive","resolute","resonant","responsible","rhetorical","rich","right","righteous","rightful","rigid","ripe","ritzy","roasted","robust","romantic","roomy","rotten","rough","round","royal","ruddy","rude","rural","rustic","ruthless",
|
42
|
+
"sable","sad","safe","salty","same","sassy","satisfying","savory","scandalous","scarce","scared","scary","scattered","scientific","scintillating","scrawny","screeching","second","secret","secretive","sedate","seemly","selective","selfish","separate","serious","shaggy","shaky","shallow","sharp","shiny","shivering","shocking","short","shrill","shut","shy","sick","silent","silent","silky","silly","simple","simplistic","sincere","six","skillful","skinny","sleepy","slim","slimy","slippery","sloppy","slow","small","smart","smelly","smiling","smoggy","smooth","sneaky","snobbish","snotty","soft","soggy","solid","somber","sophisticated","sordid","sore","sore","sour","sparkling","special","spectacular","spicy","spiffy","spiky","spiritual","spiteful","splendid","spooky","spotless","spotted","spotty","spurious","squalid","square","squealing","squeamish","staking","stale","standing","statuesque","steadfast","steady","steep","stereotyped","sticky","stiff","stimulating","stingy","stormy","straight","strange","striped","strong","stupendous","stupid","sturdy","subdued","subsequent","substantial","successful","succinct","sudden","sulky","super","superb","superficial","supreme","swanky","sweet","sweltering","swift","symptomatic","synonymous",
|
43
|
+
"taboo","tacit","tacky","talented","tall","tame","tan","tangible","tangy","tart","tasteful","tasteless","tasty","tawdry","tearful","tedious","teeny","telling","temporary","ten","tender","tense","tense","tenuous","terrible","terrific","tested","testy","thankful","therapeutic","thick","thin","thinkable","third","thirsty","thirsty","thoughtful","thoughtless","threatening","three","thundering","tidy","tight","tightfisted","tiny","tired","tiresome","toothsome","torpid","tough","towering","tranquil","trashy","tremendous","tricky","trite","troubled","truculent","true","truthful","two","typical",
|
44
|
+
"ubiquitous","ugliest","ugly","ultra","unable","unaccountable","unadvised","unarmed","unbecoming","unbiased","uncovered","understood","undesirable","unequal","unequaled","uneven","unhealthy","uninterested","unique","unkempt","unknown","unnatural","unruly","unsightly","unsuitable","untidy","unused","unusual","unwieldy","unwritten","upbeat","uppity","upset","uptight","used","useful","useless","utopian","utter","uttermost",
|
45
|
+
"vacuous","vagabond","vague","valuable","various","vast","vengeful","venomous","verdant","versed","victorious","vigorous","violent","violet","vivacious","voiceless","volatile","voracious","vulgar",
|
46
|
+
"wacky","waggish","waiting","wakeful","wandering","wanting","warlike","warm","wary","wasteful","watery","weak","wealthy","weary","wet","whimsical","whispering","white","whole","wholesale","wicked","wide","wiggly","wild","willing","windy","wiry","wise","wistful","witty","woebegone","womanly","wonderful","wooden","woozy","workable","worried","worthless","wrathful","wretched","wrong","wry",
|
47
|
+
"xenophobic","yellow","yielding","young","youthful","yummy","zany","zealous","zesty","zippy","zonked",
|
48
|
+
].sort_by!(&:size)
|
49
|
+
end
|
50
|
+
|
51
|
+
def nouns!
|
52
|
+
[
|
53
|
+
"a","ability","abroad","abuse","access","accident","account","act","action","active","activity","actor","ad","addition","address","administration","adult","advance","advantage","advertising","advice","affair","affect","afternoon","age","agency","agent","agreement","air","airline","airport","alarm","alcohol","alternative","ambition","amount","analysis","analyst","anger","angle","animal","annual","answer","anxiety","anybody","anything","anywhere","apartment","appeal","appearance","apple","application","appointment","area","argument","arm","army","arrival","art","article","aside","ask","aspect","assignment","assist","assistance","assistant","associate","association","assumption","atmosphere","attack","attempt","attention","attitude","audience","author","average","award","awareness",
|
54
|
+
"baby","back","background","bad","bag","bake","balance","ball","band","bank","bar","base","baseball","basis","basket","bat","bath","bathroom","battle","beach","bear","beat","beautiful","bed","bedroom","beer","beginning","being","bell","belt","bench","bend","benefit","bet","beyond","bicycle","bid","big","bike","bill","bird","birth","birthday","bit","bite","bitter","black","blame","blank","blind","block","blood","blow","blue","board","boat","body","bone","bonus","book","boot","border","boss","bother","bottle","bottom","bowl","box","boy","boyfriend","brain","branch","brave","bread","break","breakfast","breast","breath","brick","bridge","brief","brilliant","broad","brother","brown","brush","buddy","budget","bug","building","bunch","burn","bus","business","button","buy","buyer",
|
55
|
+
"cabinet","cable","cake","calendar","call","calm","camera","camp","campaign","can","cancel","cancer","candidate","candle","candy","cap","capital","car","card","care","career","carpet","carry","case","cash","cat","catch","category","cause","celebration","cell","chain","chair","challenge","champion","championship","chance","change","channel","chapter","character","charge","charity","chart","check","cheek","chemical","chemistry","chest","chicken","child","childhood","chip","chocolate","choice","church","cigarette","city","claim","class","classic","classroom","clerk","click","client","climate","clock","closet","clothes","cloud","club","clue","coach","coast","coat","code","coffee","cold","collar","collection","college","combination","combine","comfort","comfortable","command","comment","commercial","commission","committee","common","communication","community","company","comparison","competition","complaint","complex","computer","concentrate","concept","concern","concert","conclusion","condition","conference","confidence","conflict","confusion","connection","consequence","consideration","consist","constant","construction","contact","contest","context","contract","contribution","control","conversation","convert","cook","cookie","copy","corner","cost","count","counter","country","county","couple","courage","course","court","cousin","cover","cow","crack","craft","crash","crazy","cream","creative","credit","crew","criticism","cross","cry","culture","cup","currency","current","curve","customer","cut","cycle",
|
56
|
+
"dad","damage","dance","dare","dark","data","database","date","daughter","day","dead","deal","dealer","dear","death","debate","debt","decision","deep","definition","degree","delay","delivery","demand","department","departure","dependent","deposit","depression","depth","description","design","designer","desire","desk","detail","development","device","devil","diamond","diet","difference","difficulty","dig","dimension","dinner","direction","director","dirt","disaster","discipline","discount","discussion","disease","dish","disk","display","distance","distribution","district","divide","doctor","document","dog","door","dot","double","doubt","draft","drag","drama","draw","drawer","drawing","dream","dress","drink","drive","driver","drop","drunk","due","dump","dust","duty",
|
57
|
+
"ear","earth","ease","east","eat","economics","economy","edge","editor","education","effect","effective","efficiency","effort","egg","election","elevator","emergency","emotion","emphasis","employ","employee","employer","employment","end","energy","engine","engineer","engineering","entertainment","enthusiasm","entrance","entry","environment","equal","equipment","equivalent","error","escape","essay","establishment","estate","estimate","evening","event","evidence","exam","examination","example","exchange","excitement","excuse","exercise","exit","experience","expert","explanation","expression","extension","extent","external","extreme","eye",
|
58
|
+
"face","fact","factor","fail","failure","fall","familiar","family","fan","farm","farmer","fat","father","fault","fear","feature","fee","feed","feedback","feel","feeling","female","few","field","fight","figure","file","fill","film","final","finance","finding","finger","finish","fire","fish","fishing","fix","flight","floor","flow","flower","fly","focus","fold","following","food","foot","football","force","forever","form","formal","fortune","foundation","frame","freedom","friend","friendship","front","fruit","fuel","fun","function","funeral","funny","future",
|
59
|
+
"gain","game","gap","garage","garbage","garden","gas","gate","gather","gear","gene","general","gift","girl","girlfriend","give","glad","glass","glove","go","goal","god","gold","golf","good","government","grab","grade","grand","grandfather","grandmother","grass","great","green","grocery","ground","group","growth","guarantee","guard","guess","guest","guidance","guide","guitar","guy",
|
60
|
+
"habit","hair","half","hall","hand","handle","hang","harm","hat","hate","head","health","hearing","heart","heat","heavy","height","hell","hello","help","hide","high","highlight","highway","hire","historian","history","hit","hold","hole","holiday","home","homework","honey","hook","hope","horror","horse","hospital","host","hotel","hour","house","housing","human","hunt","hurry","hurt","husband",
|
61
|
+
"ice","idea","ideal","if","illegal","image","imagination","impact","implement","importance","impress","impression","improvement","incident","income","increase","independence","independent","indication","individual","industry","inevitable","inflation","influence","information","initial","initiative","injury","insect","inside","inspection","inspector","instance","instruction","insurance","intention","interaction","interest","internal","international","internet","interview","introduction","investment","invite","iron","island","issue","it","item",
|
62
|
+
"jacket","job","join","joint","joke","judge","judgment","juice","jump","junior","jury",
|
63
|
+
"keep","key","kick","kid","kill","kind","king","kiss","kitchen","knee","knife","knowledge",
|
64
|
+
"lab","lack","ladder","lady","lake","land","landscape","language","laugh","law","lawyer","lay","layer","lead","leader","leadership","leading","league","leather","leave","lecture","leg","length","lesson","let","letter","level","library","lie","life","lift","light","limit","line","link","lip","list","listen","literature","living","load","loan","local","location","lock","log","long","look","loss","love","low","luck","lunch",
|
65
|
+
"machine","magazine","mail","main","maintenance","major","make","male","mall","man","management","manager","manner","manufacturer","many","map","march","mark","market","marketing","marriage","master","match","mate","material","math","matter","maximum","maybe","meal","meaning","measurement","meat","media","medicine","medium","meet","meeting","member","membership","memory","mention","menu","mess","message","metal","method","middle","midnight","might","milk","mind","mine","minimum","minor","minute","mirror","miss","mission","mistake","mix","mixture","mobile","mode","model","mom","moment","money","monitor","month","mood","morning","mortgage","most","mother","motor","mountain","mouse","mouth","move","movie","mud","muscle","music",
|
66
|
+
"nail","name","nasty","nation","national","native","natural","nature","neat","necessary","neck","negative","negotiation","nerve","net","network","news","newspaper","night","nobody","noise","normal","north","nose","note","nothing","notice","novel","number","nurse",
|
67
|
+
"object","objective","obligation","occasion","offer","office","officer","official","oil","one","opening","operation","opinion","opportunity","opposite","option","orange","order","ordinary","organization","original","other","outcome","outside","oven","owner",
|
68
|
+
"pace","pack","package","page","pain","paint","painting","pair","panic","paper","parent","park","parking","part","particular","partner","party","pass","passage","passenger","passion","past","path","patience","patient","pattern","pause","pay","payment","peace","peak","pen","penalty","pension","people","percentage","perception","performance","period","permission","permit","person","personal","personality","perspective","phase","philosophy","phone","photo","phrase","physical","physics","piano","pick","picture","pie","piece","pin","pipe","pitch","pizza","place","plan","plane","plant","plastic","plate","platform","play","player","pleasure","plenty","poem","poet","poetry","point","police","policy","politics","pollution","pool","pop","population","position","positive","possession","possibility","possible","post","pot","potato","potential","pound","power","practice","preference","preparation","presence","present","presentation","president","press","pressure","price","pride","priest","primary","principle","print","prior","priority","private","prize","problem","procedure","process","produce","product","profession","professional","professor","profile","profit","program","progress","project","promise","promotion","prompt","proof","property","proposal","protection","psychology","public","pull","punch","purchase","purple","purpose","push","put",
|
69
|
+
"quality","quantity","quarter","queen","question","quiet","quit","quote",
|
70
|
+
"race","radio","rain","raise","range","rate","ratio","raw","reach","reaction","read","reading","reality","reason","reception","recipe","recognition","recommendation","record","recording","recover","red","reference","reflection","refrigerator","refuse","region","register","regret","regular","relation","relationship","relative","release","relief","remote","remove","rent","repair","repeat","replacement","reply","report","representative","republic","reputation","request","requirement","research","reserve","resident","resist","resolution","resolve","resort","resource","respect","respond","response","responsibility","rest","restaurant","result","return","reveal","revenue","review","revolution","reward","rice","rich","ride","ring","rip","rise","risk","river","road","rock","role","roll","roof","room","rope","rough","round","routine","row","royal","rub","ruin","rule","run","rush",
|
71
|
+
"sad","safe","safety","sail","salad","salary","sale","salt","sample","sand","sandwich","satisfaction","save","savings","scale","scene","schedule","scheme","school","science","score","scratch","screen","screw","script","sea","search","season","seat","second","secret","secretary","section","sector","security","selection","self","sell","senior","sense","sensitive","sentence","series","serve","service","session","set","setting","sex","shake","shame","shape","share","she","shelter","shift","shine","ship","shirt","shock","shoe","shoot","shop","shopping","shot","shoulder","show","shower","sick","side","sign","signal","signature","significance","silly","silver","simple","sing","singer","single","sink","sir","sister","site","situation","size","skill","skin","skirt","sky","sleep","slice","slide","slip","smell","smile","smoke","snow","society","sock","soft","software","soil","solid","solution","somewhere","son","song","sort","sound","soup","source","south","space","spare","speaker","special","specialist","specific","speech","speed","spell","spend","spirit","spiritual","spite","split","sport","spot","spray","spread","spring","square","stable","staff","stage","stand","standard","star","start","state","statement","station","status","stay","steak","steal","step","stick","still","stock","stomach","stop","storage","store","storm","story","strain","stranger","strategy","street","strength","stress","stretch","strike","string","strip","stroke","structure","struggle","student","studio","study","stuff","stupid","style","subject","substance","success","suck","sugar","suggestion","suit","summer","sun","supermarket","support","surgery","surprise","surround","survey","suspect","sweet","swim","swimming","swing","switch","sympathy","system",
|
72
|
+
"table","tackle","tale","talk","tank","tap","target","task","taste","tax","tea","teach","teacher","teaching","team","tear","technology","telephone","television","tell","temperature","temporary","tennis","tension","term","test","text","thanks","theme","theory","thing","thought","throat","ticket","tie","till","time","tip","title","today","toe","tomorrow","tone","tongue","tonight","tool","tooth","top","topic","total","touch","tough","tour","tourist","towel","tower","town","track","trade","tradition","traffic","train","trainer","training","transition","transportation","trash","travel","treat","tree","trick","trip","trouble","truck","trust","truth","try","tune","turn","twist","two","type",
|
73
|
+
"uncle","understanding","union","unique","unit","university","upper","upstairs","use","user","usual",
|
74
|
+
"vacation","valuable","value","variation","variety","vast","vegetable","vehicle","version","video","view","village","virus","visit","visual","voice","volume",
|
75
|
+
"wait","wake","walk","wall","war","warning","wash","watch","water","wave","way","weakness","wealth","wear","weather","web","wedding","week","weekend","weight","weird","welcome","west","western","wheel","whereas","while","white","whole","wife","will","win","wind","window","wine","wing","winner","winter","wish","witness","woman","wonder","wood","word","work","worker","working","world","worry","worth","wrap","writer","writing",
|
76
|
+
"yard","year","yellow","yesterday","you","young","youth","zone"
|
77
|
+
].sort_by!(&:size)
|
78
|
+
end
|
79
|
+
|
80
|
+
def collect_lengths(source)
|
81
|
+
result = {}
|
82
|
+
(3..9).each do |len|
|
83
|
+
result[len] = source.select { |i| i.size <= len }.size
|
84
|
+
end
|
85
|
+
result
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'digest'
|
2
|
+
|
3
|
+
module Concode
|
4
|
+
class Generator
|
5
|
+
attr_reader :words, :chars, :glue, :capitalize
|
6
|
+
|
7
|
+
def initialize(words: 2, chars: 0, glue: '-', capitalize: false)
|
8
|
+
@words = words
|
9
|
+
@glue = glue
|
10
|
+
@capitalize = capitalize
|
11
|
+
@chars = chars
|
12
|
+
|
13
|
+
@chars = 3 if @chars.between? 1, 3
|
14
|
+
@chars = 0 if @chars > 9
|
15
|
+
end
|
16
|
+
|
17
|
+
def generate(text)
|
18
|
+
result = generate_particles text
|
19
|
+
result.map!(&:capitalize) if capitalize
|
20
|
+
result.join glue
|
21
|
+
end
|
22
|
+
|
23
|
+
def word_count
|
24
|
+
@word_count ||= particles.map(&:size).reduce(:*)
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def particles
|
30
|
+
@particles ||= particles!
|
31
|
+
end
|
32
|
+
|
33
|
+
def particles!
|
34
|
+
if chars == 0
|
35
|
+
result = [ nouns ]
|
36
|
+
adjective_count.times { result.push adjectives }
|
37
|
+
else
|
38
|
+
result = [ nouns[0...nouns_length] ]
|
39
|
+
adjective_count.times { result.push adjectives[0...adjectives_length] }
|
40
|
+
end
|
41
|
+
|
42
|
+
result
|
43
|
+
end
|
44
|
+
|
45
|
+
def generate_particles(text)
|
46
|
+
index = text_hash(text) % word_count
|
47
|
+
|
48
|
+
result = []
|
49
|
+
particles.each do |p|
|
50
|
+
result.push p[index % p.size]
|
51
|
+
index = (index / p.size).to_i
|
52
|
+
end
|
53
|
+
|
54
|
+
result.reverse
|
55
|
+
end
|
56
|
+
|
57
|
+
def text_hash(text)
|
58
|
+
text = text.to_s
|
59
|
+
Digest::MD5.hexdigest(text).to_i(16) * 36413321723440003717
|
60
|
+
end
|
61
|
+
|
62
|
+
def adjective_count
|
63
|
+
words - 1
|
64
|
+
end
|
65
|
+
|
66
|
+
def nouns_length
|
67
|
+
Dictionary.noun_lengths[chars]
|
68
|
+
end
|
69
|
+
|
70
|
+
def adjectives_length
|
71
|
+
Dictionary.adjective_lengths[chars]
|
72
|
+
end
|
73
|
+
|
74
|
+
def nouns
|
75
|
+
Dictionary.nouns
|
76
|
+
end
|
77
|
+
|
78
|
+
def adjectives
|
79
|
+
Dictionary.adjectives
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
metadata
ADDED
@@ -0,0 +1,148 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: concode
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Danny Ben Shitrit
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-06-21 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: byebug
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '10.0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '10.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: github_changelog_generator
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.14'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.14'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.6'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.6'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec_fixtures
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.3'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.3'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: runfile
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.10'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.10'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: runfile-tasks
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.4'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.4'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: simplecov
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0.15'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0.15'
|
111
|
+
description: Generate consistent-codenames from any string (Heroku style, aka Haiku)
|
112
|
+
email: db@dannyben.com
|
113
|
+
executables:
|
114
|
+
- concode
|
115
|
+
extensions: []
|
116
|
+
extra_rdoc_files: []
|
117
|
+
files:
|
118
|
+
- README.md
|
119
|
+
- bin/concode
|
120
|
+
- lib/concode.rb
|
121
|
+
- lib/concode/dictionary.rb
|
122
|
+
- lib/concode/generator.rb
|
123
|
+
- lib/concode/version.rb
|
124
|
+
homepage: https://github.com/dannyben/concode
|
125
|
+
licenses:
|
126
|
+
- MIT
|
127
|
+
metadata: {}
|
128
|
+
post_install_message:
|
129
|
+
rdoc_options: []
|
130
|
+
require_paths:
|
131
|
+
- lib
|
132
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
133
|
+
requirements:
|
134
|
+
- - ">="
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: 2.2.0
|
137
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
138
|
+
requirements:
|
139
|
+
- - ">="
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
requirements: []
|
143
|
+
rubyforge_project:
|
144
|
+
rubygems_version: 2.7.6
|
145
|
+
signing_key:
|
146
|
+
specification_version: 4
|
147
|
+
summary: Generate consistent-codenames from any string
|
148
|
+
test_files: []
|