namelab 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dry/container"
4
+ require "namelab/list_ref"
5
+
6
+ module Namelab
7
+ module Registry
8
+ extend Dry::Container::Mixin
9
+
10
+ namespace :syls do
11
+ register :sample, call: false do |proc = nil|
12
+ ref = proc.is_a?(Proc) ? resolve(:ref).filter(&proc) : resolve(:ref)
13
+ ref.sample
14
+ end
15
+
16
+ register :ref, memoize: true do
17
+ ListRef.new(resolve(:io_proc))
18
+ end
19
+
20
+ register :io_proc, call: false do
21
+ File.new(resolve(:path), textmode: true)
22
+ end
23
+
24
+ register :path, File.expand_path("../syls.data", __dir__)
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,3 @@
1
+ module Namelab
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dry-initializer"
4
+ require "dry-types"
5
+ require "yieldable"
6
+
7
+ module Namelab
8
+ # The word generator class.
9
+ class WordGenerator
10
+ include Dry::Initializer.define -> do
11
+ param :target_length, type: Dry::Types['params.integer']
12
+ option :normalize, type: Dry::Types['params.bool'], default: proc { true }
13
+ end
14
+
15
+ extend Yieldable[:new]
16
+
17
+ attr_reader :word
18
+
19
+ def word
20
+ @word ||= String.new
21
+ end
22
+
23
+ # Generates word and cleanups instance variables.
24
+ def generate
25
+ while chars_left > 0
26
+ word << sample_syllable
27
+ normalize! if normalize
28
+ end
29
+ return @word.capitalize
30
+ ensure
31
+ cleanup!
32
+ end
33
+
34
+ alias_method :call, :generate
35
+
36
+ # Calculates how many chars are left to generate.
37
+ def chars_left
38
+ @target_length - word.length
39
+ end
40
+
41
+ LengthFilter = -> (op, len, syl) { syl.length.send(op, len) }.freeze.curry(3).freeze
42
+
43
+ # Fetches random syllable.
44
+ def sample_syllable
45
+ filter = LengthFilter[:<=, chars_left.next] if chars_left <= 3
46
+ Registry['syls.sample'][filter].to_s
47
+ end
48
+
49
+ private
50
+
51
+ def normalize!
52
+ @word.sub!(/([^aeiouy]{2})[^aeiouy]/, '\1')
53
+ @word = @word[0, @target_length]
54
+ end
55
+
56
+ def cleanup!
57
+ remove_instance_variable(:@word)
58
+ end
59
+ end
60
+ end
data/lib/syls.data ADDED
@@ -0,0 +1,1145 @@
1
+ ab
2
+ abs
3
+ abst
4
+ ac
5
+ acc
6
+ ach
7
+ ad
8
+ add
9
+ ads
10
+ af
11
+ aff
12
+ ag
13
+ agg
14
+ ah
15
+ ak
16
+ al
17
+ alp
18
+ am
19
+ amb
20
+ amp
21
+ an
22
+ and
23
+ ang
24
+ ans
25
+ ant
26
+ anth
27
+ ap
28
+ app
29
+ ar
30
+ arc
31
+ arch
32
+ ard
33
+ ars
34
+ art
35
+ arth
36
+ as
37
+ asp
38
+ ast
39
+ at
40
+ ath
41
+ ats
42
+ att
43
+ aw
44
+ ba
45
+ bab
46
+ bac
47
+ back
48
+ backs
49
+ bad
50
+ bag
51
+ bal
52
+ ball
53
+ ban
54
+ band
55
+ bap
56
+ bar
57
+ bart
58
+ bas
59
+ bat
60
+ batt
61
+ be
62
+ bec
63
+ bed
64
+ bel
65
+ ben
66
+ ber
67
+ berg
68
+ bert
69
+ bes
70
+ bet
71
+ bi
72
+ bib
73
+ bic
74
+ bid
75
+ big
76
+ bil
77
+ bin
78
+ bing
79
+ bird
80
+ bis
81
+ bit
82
+ bo
83
+ bom
84
+ bon
85
+ bor
86
+ bos
87
+ bot
88
+ bott
89
+ bow
90
+ box
91
+ bu
92
+ buc
93
+ buck
94
+ buf
95
+ bug
96
+ bul
97
+ bull
98
+ bun
99
+ bur
100
+ burg
101
+ bus
102
+ but
103
+ by
104
+ ca
105
+ cab
106
+ cac
107
+ cad
108
+ cal
109
+ cam
110
+ camp
111
+ can
112
+ cand
113
+ cant
114
+ cap
115
+ car
116
+ carp
117
+ cart
118
+ cas
119
+ cast
120
+ cat
121
+ ce
122
+ ced
123
+ cel
124
+ cen
125
+ cent
126
+ cep
127
+ cer
128
+ ces
129
+ ci
130
+ cid
131
+ cil
132
+ cin
133
+ cing
134
+ cip
135
+ cir
136
+ cis
137
+ cism
138
+ cist
139
+ cit
140
+ co
141
+ coc
142
+ cock
143
+ cof
144
+ cog
145
+ col
146
+ com
147
+ comp
148
+ con
149
+ conc
150
+ conf
151
+ cong
152
+ cons
153
+ const
154
+ cont
155
+ cop
156
+ cor
157
+ corn
158
+ cos
159
+ cot
160
+ cow
161
+ cu
162
+ cul
163
+ cum
164
+ cun
165
+ cup
166
+ cur
167
+ cus
168
+ cut
169
+ cy
170
+ cyc
171
+ cyp
172
+ cys
173
+ da
174
+ dab
175
+ dac
176
+ dal
177
+ dam
178
+ dan
179
+ dant
180
+ dap
181
+ dar
182
+ de
183
+ dec
184
+ ded
185
+ def
186
+ deg
187
+ del
188
+ den
189
+ dend
190
+ dent
191
+ dep
192
+ der
193
+ ders
194
+ des
195
+ dest
196
+ det
197
+ dext
198
+ di
199
+ dib
200
+ dic
201
+ dich
202
+ dif
203
+ dig
204
+ din
205
+ ding
206
+ dip
207
+ dis
208
+ disc
209
+ dish
210
+ dism
211
+ disp
212
+ dist
213
+ do
214
+ doc
215
+ dog
216
+ dol
217
+ dom
218
+ don
219
+ dop
220
+ dor
221
+ dos
222
+ dow
223
+ down
224
+ du
225
+ duc
226
+ dul
227
+ dum
228
+ dun
229
+ dup
230
+ dus
231
+ dust
232
+ dy
233
+ dys
234
+ dysp
235
+ eb
236
+ ec
237
+ ed
238
+ ef
239
+ eg
240
+ ek
241
+ el
242
+ eld
243
+ em
244
+ emb
245
+ emp
246
+ en
247
+ enc
248
+ end
249
+ eng
250
+ ens
251
+ ent
252
+ ep
253
+ er
254
+ ers
255
+ es
256
+ esc
257
+ est
258
+ et
259
+ eth
260
+ ex
261
+ exc
262
+ exp
263
+ ext
264
+ fa
265
+ fac
266
+ fal
267
+ fan
268
+ far
269
+ fas
270
+ fat
271
+ fe
272
+ fec
273
+ fed
274
+ fel
275
+ fen
276
+ fer
277
+ fes
278
+ fi
279
+ fib
280
+ fic
281
+ fil
282
+ fin
283
+ fir
284
+ fis
285
+ fish
286
+ fit
287
+ fo
288
+ fol
289
+ fold
290
+ fon
291
+ for
292
+ ford
293
+ form
294
+ fos
295
+ fu
296
+ ful
297
+ fun
298
+ fur
299
+ fus
300
+ fy
301
+ ga
302
+ gal
303
+ gam
304
+ gan
305
+ gang
306
+ gar
307
+ gard
308
+ gas
309
+ gast
310
+ gat
311
+ ge
312
+ ged
313
+ gel
314
+ gen
315
+ gent
316
+ ger
317
+ ges
318
+ get
319
+ gi
320
+ gib
321
+ gic
322
+ gil
323
+ gin
324
+ ging
325
+ gis
326
+ gish
327
+ gist
328
+ git
329
+ go
330
+ god
331
+ gol
332
+ gold
333
+ gon
334
+ gop
335
+ gor
336
+ gos
337
+ got
338
+ gu
339
+ gum
340
+ gun
341
+ gus
342
+ gut
343
+ gy
344
+ gym
345
+ ha
346
+ hab
347
+ hac
348
+ had
349
+ hag
350
+ hal
351
+ ham
352
+ han
353
+ hand
354
+ hant
355
+ hap
356
+ har
357
+ hard
358
+ has
359
+ hat
360
+ haw
361
+ he
362
+ heb
363
+ hec
364
+ hed
365
+ hel
366
+ hell
367
+ hen
368
+ her
369
+ hes
370
+ hest
371
+ het
372
+ hi
373
+ hic
374
+ hick
375
+ high
376
+ hil
377
+ hild
378
+ him
379
+ hin
380
+ hing
381
+ hip
382
+ hir
383
+ his
384
+ hism
385
+ hist
386
+ hit
387
+ ho
388
+ hob
389
+ hoc
390
+ hog
391
+ hol
392
+ hom
393
+ hon
394
+ hond
395
+ hop
396
+ hor
397
+ horn
398
+ hort
399
+ hos
400
+ hosp
401
+ hot
402
+ how
403
+ hu
404
+ hum
405
+ hun
406
+ hur
407
+ hus
408
+ hy
409
+ hyd
410
+ hyg
411
+ hyl
412
+ hyp
413
+ hys
414
+ ic
415
+ id
416
+ ig
417
+ igh
418
+ ight
419
+ il
420
+ im
421
+ imp
422
+ in
423
+ inc
424
+ inf
425
+ ing
426
+ ins
427
+ inst
428
+ int
429
+ ir
430
+ is
431
+ isc
432
+ ish
433
+ ism
434
+ ist
435
+ it
436
+ ja
437
+ jac
438
+ jack
439
+ jam
440
+ je
441
+ jec
442
+ jer
443
+ ji
444
+ jo
445
+ ju
446
+ jun
447
+ junc
448
+ jus
449
+ ka
450
+ kab
451
+ kan
452
+ kat
453
+ ke
454
+ ked
455
+ kel
456
+ ken
457
+ ker
458
+ kes
459
+ ket
460
+ ki
461
+ kim
462
+ kin
463
+ king
464
+ kish
465
+ ko
466
+ ku
467
+ ky
468
+ la
469
+ lab
470
+ lac
471
+ lack
472
+ lad
473
+ lag
474
+ lah
475
+ lam
476
+ lamp
477
+ lan
478
+ lanc
479
+ land
480
+ lands
481
+ lant
482
+ lap
483
+ lar
484
+ las
485
+ lash
486
+ lass
487
+ last
488
+ lat
489
+ law
490
+ le
491
+ leb
492
+ lec
493
+ lect
494
+ led
495
+ leg
496
+ lem
497
+ len
498
+ lent
499
+ lep
500
+ ler
501
+ les
502
+ less
503
+ let
504
+ lex
505
+ li
506
+ lib
507
+ lic
508
+ lid
509
+ lif
510
+ lig
511
+ ligh
512
+ light
513
+ lim
514
+ lin
515
+ lind
516
+ ling
517
+ lip
518
+ lis
519
+ lish
520
+ lism
521
+ list
522
+ lit
523
+ lith
524
+ lo
525
+ loc
526
+ lock
527
+ lod
528
+ log
529
+ lon
530
+ long
531
+ lop
532
+ lor
533
+ los
534
+ lot
535
+ loth
536
+ low
537
+ lu
538
+ lub
539
+ luc
540
+ lug
541
+ lum
542
+ lun
543
+ lur
544
+ lus
545
+ lust
546
+ lut
547
+ ly
548
+ lymp
549
+ lyp
550
+ lys
551
+ ma
552
+ mab
553
+ mac
554
+ mad
555
+ mag
556
+ mal
557
+ mam
558
+ man
559
+ mann
560
+ mans
561
+ mant
562
+ mar
563
+ marb
564
+ marc
565
+ mark
566
+ mas
567
+ mat
568
+ match
569
+ me
570
+ mec
571
+ med
572
+ mel
573
+ men
574
+ ment
575
+ mep
576
+ mer
577
+ mes
578
+ met
579
+ mi
580
+ mic
581
+ mid
582
+ mig
583
+ mil
584
+ min
585
+ ming
586
+ mip
587
+ mis
588
+ mism
589
+ mist
590
+ mit
591
+ mith
592
+ mo
593
+ moc
594
+ mog
595
+ mol
596
+ mon
597
+ monst
598
+ mop
599
+ mor
600
+ morp
601
+ mos
602
+ most
603
+ mot
604
+ mu
605
+ mug
606
+ mul
607
+ mum
608
+ mun
609
+ mur
610
+ mus
611
+ mut
612
+ my
613
+ myg
614
+ myr
615
+ mys
616
+ myt
617
+ na
618
+ nab
619
+ nac
620
+ nad
621
+ nag
622
+ nal
623
+ nam
624
+ nan
625
+ nant
626
+ nap
627
+ napp
628
+ nar
629
+ narc
630
+ nas
631
+ nat
632
+ ne
633
+ neb
634
+ nec
635
+ ned
636
+ nef
637
+ neg
638
+ nel
639
+ nen
640
+ nent
641
+ neph
642
+ ner
643
+ nes
644
+ ness
645
+ nest
646
+ net
647
+ new
648
+ news
649
+ nex
650
+ nexp
651
+ ni
652
+ nic
653
+ nics
654
+ nig
655
+ night
656
+ nim
657
+ nin
658
+ ning
659
+ nip
660
+ nis
661
+ nish
662
+ nism
663
+ nist
664
+ nit
665
+ no
666
+ nob
667
+ noc
668
+ nog
669
+ nol
670
+ non
671
+ nonp
672
+ nons
673
+ nop
674
+ nor
675
+ nort
676
+ north
677
+ nos
678
+ not
679
+ now
680
+ nu
681
+ nuc
682
+ num
683
+ nun
684
+ nur
685
+ nus
686
+ nut
687
+ ny
688
+ nyl
689
+ nym
690
+ nymp
691
+ ob
692
+ obs
693
+ obst
694
+ oc
695
+ od
696
+ of
697
+ og
698
+ ok
699
+ ol
700
+ om
701
+ on
702
+ ons
703
+ op
704
+ or
705
+ orc
706
+ ort
707
+ os
708
+ ost
709
+ ot
710
+ oth
711
+ pa
712
+ pab
713
+ pac
714
+ pal
715
+ pan
716
+ panc
717
+ pant
718
+ par
719
+ part
720
+ pas
721
+ pat
722
+ pe
723
+ pec
724
+ pect
725
+ ped
726
+ pel
727
+ pen
728
+ pep
729
+ per
730
+ pers
731
+ pert
732
+ pes
733
+ pest
734
+ pet
735
+ pi
736
+ pic
737
+ pid
738
+ pig
739
+ pil
740
+ pin
741
+ ping
742
+ pip
743
+ pis
744
+ pish
745
+ pist
746
+ pit
747
+ po
748
+ poc
749
+ pod
750
+ pog
751
+ pol
752
+ pom
753
+ pon
754
+ pop
755
+ por
756
+ port
757
+ pos
758
+ post
759
+ pot
760
+ pow
761
+ pu
762
+ pub
763
+ pul
764
+ pun
765
+ punc
766
+ pur
767
+ pus
768
+ put
769
+ py
770
+ pyt
771
+ qa
772
+ qu
773
+ ra
774
+ rab
775
+ rac
776
+ rach
777
+ rack
778
+ ract
779
+ rad
780
+ raf
781
+ raft
782
+ rag
783
+ ragg
784
+ rah
785
+ ral
786
+ ram
787
+ ran
788
+ ranc
789
+ rand
790
+ rang
791
+ rank
792
+ rans
793
+ rant
794
+ rap
795
+ raph
796
+ ras
797
+ rass
798
+ rat
799
+ raw
800
+ re
801
+ reb
802
+ rec
803
+ red
804
+ ref
805
+ reg
806
+ rel
807
+ ren
808
+ renc
809
+ rench
810
+ rent
811
+ rep
812
+ rer
813
+ res
814
+ resh
815
+ ress
816
+ rest
817
+ ret
818
+ rew
819
+ ri
820
+ rib
821
+ ric
822
+ rich
823
+ rick
824
+ rid
825
+ rif
826
+ rig
827
+ righ
828
+ right
829
+ ril
830
+ rill
831
+ rim
832
+ rin
833
+ ring
834
+ rink
835
+ rint
836
+ rip
837
+ ris
838
+ rish
839
+ rism
840
+ rist
841
+ rit
842
+ rix
843
+ ro
844
+ rob
845
+ roc
846
+ rod
847
+ rof
848
+ rog
849
+ rol
850
+ roll
851
+ rom
852
+ ron
853
+ ronc
854
+ rong
855
+ rop
856
+ ror
857
+ ros
858
+ ross
859
+ rost
860
+ rot
861
+ roth
862
+ row
863
+ rown
864
+ ru
865
+ rub
866
+ ruc
867
+ rud
868
+ rum
869
+ run
870
+ rup
871
+ rupt
872
+ rus
873
+ rush
874
+ rust
875
+ rut
876
+ ry
877
+ ryn
878
+ ryp
879
+ rys
880
+ ryth
881
+ sa
882
+ sab
883
+ sac
884
+ sacc
885
+ sal
886
+ salt
887
+ sam
888
+ san
889
+ sanc
890
+ sand
891
+ sant
892
+ sap
893
+ sapp
894
+ sar
895
+ sas
896
+ saw
897
+ se
898
+ sec
899
+ sed
900
+ seg
901
+ sel
902
+ semb
903
+ sen
904
+ sent
905
+ sep
906
+ ser
907
+ ses
908
+ set
909
+ sex
910
+ si
911
+ sib
912
+ sic
913
+ sig
914
+ sil
915
+ simp
916
+ sin
917
+ sing
918
+ sip
919
+ sis
920
+ sit
921
+ six
922
+ so
923
+ sol
924
+ som
925
+ son
926
+ sop
927
+ sor
928
+ sot
929
+ su
930
+ sub
931
+ subs
932
+ subt
933
+ suc
934
+ suf
935
+ sul
936
+ sulp
937
+ sum
938
+ sun
939
+ sup
940
+ supp
941
+ sur
942
+ surp
943
+ sus
944
+ sy
945
+ syc
946
+ syl
947
+ sym
948
+ symp
949
+ syn
950
+ sync
951
+ synch
952
+ sys
953
+ ta
954
+ tab
955
+ tac
956
+ tag
957
+ tal
958
+ tam
959
+ tan
960
+ tand
961
+ tang
962
+ tant
963
+ tap
964
+ tar
965
+ tard
966
+ tas
967
+ tat
968
+ te
969
+ tec
970
+ tech
971
+ ted
972
+ teg
973
+ tel
974
+ tem
975
+ temp
976
+ ten
977
+ tent
978
+ tep
979
+ ter
980
+ terc
981
+ tern
982
+ terp
983
+ ters
984
+ tes
985
+ tet
986
+ ti
987
+ tib
988
+ tic
989
+ tick
990
+ tics
991
+ tid
992
+ tif
993
+ tig
994
+ til
995
+ till
996
+ tin
997
+ ting
998
+ tip
999
+ tir
1000
+ tis
1001
+ tish
1002
+ tism
1003
+ tist
1004
+ tit
1005
+ to
1006
+ toc
1007
+ tock
1008
+ tog
1009
+ tom
1010
+ ton
1011
+ top
1012
+ tor
1013
+ tors
1014
+ tos
1015
+ tot
1016
+ tow
1017
+ tu
1018
+ tum
1019
+ tun
1020
+ tur
1021
+ tus
1022
+ ty
1023
+ typ
1024
+ ub
1025
+ uc
1026
+ uch
1027
+ ud
1028
+ ug
1029
+ ugh
1030
+ ught
1031
+ ul
1032
+ ult
1033
+ um
1034
+ un
1035
+ unb
1036
+ unc
1037
+ und
1038
+ unf
1039
+ ung
1040
+ unp
1041
+ uns
1042
+ unt
1043
+ up
1044
+ ur
1045
+ us
1046
+ ust
1047
+ ut
1048
+ uth
1049
+ uts
1050
+ va
1051
+ vab
1052
+ vac
1053
+ val
1054
+ van
1055
+ var
1056
+ vas
1057
+ ve
1058
+ ved
1059
+ vel
1060
+ ven
1061
+ vent
1062
+ ver
1063
+ verc
1064
+ verp
1065
+ vers
1066
+ vert
1067
+ ves
1068
+ vet
1069
+ vi
1070
+ vib
1071
+ vic
1072
+ vich
1073
+ vid
1074
+ vil
1075
+ vin
1076
+ ving
1077
+ vir
1078
+ vis
1079
+ vism
1080
+ vit
1081
+ vo
1082
+ vol
1083
+ vor
1084
+ vu
1085
+ vul
1086
+ vy
1087
+ wa
1088
+ wag
1089
+ wal
1090
+ wan
1091
+ war
1092
+ ward
1093
+ wards
1094
+ was
1095
+ we
1096
+ web
1097
+ wed
1098
+ wel
1099
+ well
1100
+ wer
1101
+ wes
1102
+ wi
1103
+ wic
1104
+ wil
1105
+ win
1106
+ wind
1107
+ wing
1108
+ wis
1109
+ wit
1110
+ wo
1111
+ wolf
1112
+ won
1113
+ wor
1114
+ word
1115
+ work
1116
+ worm
1117
+ wort
1118
+ wy
1119
+ xa
1120
+ xant
1121
+ xe
1122
+ xed
1123
+ xer
1124
+ xi
1125
+ xil
1126
+ xin
1127
+ xis
1128
+ xo
1129
+ xor
1130
+ xu
1131
+ xy
1132
+ ys
1133
+ za
1134
+ zab
1135
+ zar
1136
+ ze
1137
+ zed
1138
+ zen
1139
+ zer
1140
+ zi
1141
+ zing
1142
+ zo
1143
+ zon
1144
+ zu
1145
+ zy