patter 1.0.5 → 1.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/patter +10 -11
- data/lib/patter/pattern.rb +56 -56
- data/lib/patter/sample.rb +20 -16
- data/lib/patter/source.rb +7 -7
- data/lib/patter/source_provider.rb +27 -27
- data/lib/patter/version.rb +3 -0
- data/lib/patter.rb +1 -0
- data/words/adjectives.txt +0 -34
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5c1584eb8bd0834327c709b84b6b1e4494e2344a34cd37f23a0b9015b86ef86b
|
4
|
+
data.tar.gz: 76501c3b62bc86fe4a4bceca35f66a64b2eb6825d32d40a341b12ef2656b2187
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6608809934a669797993d55796caf297f80fcbcfcf233a224404eb5db7960da315bf3d63e6a377cefb79684977ebb9b5889066ce4ea04e029317f45334a2ac0a
|
7
|
+
data.tar.gz: 1f9653182a4ce835485990857639fa1455c0bc2172783eddd603fee0e3919e7a5b780d22d5bae6f389da686505727aedf1d9ca9f1f4be9614fdb52d6a1f750b1
|
data/bin/patter
CHANGED
@@ -1,28 +1,27 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'patter'
|
4
|
-
include Patter
|
5
|
-
|
6
4
|
require 'docopt'
|
7
5
|
|
8
6
|
str = <<~EOF
|
9
|
-
|
7
|
+
Usage: #{File.basename $0} [options] <pattern>
|
10
8
|
|
11
|
-
|
9
|
+
Generate strings from <pattern>.
|
12
10
|
|
13
|
-
|
14
|
-
|
11
|
+
-n, --count N Number of patterns to generate [default: 10].
|
12
|
+
-h, --help Show this help.
|
13
|
+
-v, --version Show version.
|
15
14
|
|
16
|
-
|
15
|
+
#{Patter::Pattern.help}
|
17
16
|
EOF
|
18
17
|
|
19
18
|
begin
|
20
|
-
|
19
|
+
opts = Docopt::docopt(str, { version: Patter::VERSION })
|
21
20
|
rescue Docopt::Exit => e
|
22
|
-
|
23
|
-
|
21
|
+
puts e.message
|
22
|
+
exit
|
24
23
|
end
|
25
24
|
|
26
25
|
opts['--count'].to_i.times do
|
27
|
-
|
26
|
+
puts Patter::Pattern.new(opts['<pattern>']).to_s
|
28
27
|
end
|
data/lib/patter/pattern.rb
CHANGED
@@ -1,73 +1,73 @@
|
|
1
1
|
module Patter
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
2
|
+
TAGS = {
|
3
|
+
'S' => :symbols,
|
4
|
+
'A' => :adjectives,
|
5
|
+
'D' => :digits,
|
6
|
+
'C' => :chars,
|
7
|
+
'N' => :nouns,
|
8
|
+
}
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
10
|
+
MODIFIERS = {
|
11
|
+
's' => :pluralize,
|
12
|
+
'a' => :altcase,
|
13
|
+
'l' => :downcase,
|
14
|
+
'u' => :upcase,
|
15
|
+
't' => :titleize,
|
16
|
+
}
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
18
|
+
class Pattern
|
19
|
+
def initialize(pattern)
|
20
|
+
@pattern = pattern
|
21
|
+
end
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
23
|
+
def to_s
|
24
|
+
@pattern.gsub(/\{([#{TAGS.keys.join}])(:(\w+))?\}/) do
|
25
|
+
tag, modifiers = $1, $3
|
26
|
+
source = SourceProvider.instance.get_source(TAGS[tag])
|
27
27
|
|
28
|
-
|
28
|
+
next source.get_sample if !modifiers
|
29
29
|
|
30
|
-
|
31
|
-
|
32
|
-
|
30
|
+
re = /([#{MODIFIERS.keys.join}])|([0-9]+)/
|
31
|
+
chain = []
|
32
|
+
n = 1
|
33
33
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
34
|
+
modifiers.split(re).reject(&:empty?).each do |modifier|
|
35
|
+
n = $1.to_i if modifier =~ /([0-9]+)/
|
36
|
+
chain << MODIFIERS[modifier] if MODIFIERS[modifier]
|
37
|
+
end
|
38
38
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
39
|
+
samples = source.get_samples(n)
|
40
|
+
chain.each { |tran| samples.each &tran }
|
41
|
+
samples.join
|
42
|
+
end
|
43
|
+
end
|
44
44
|
|
45
|
-
|
46
|
-
|
47
|
-
|
45
|
+
def self.help
|
46
|
+
return <<~EOF
|
47
|
+
TAGS
|
48
48
|
|
49
|
-
|
50
|
-
|
51
|
-
|
49
|
+
{A} adjective {N} noun
|
50
|
+
{S} symbol {D} digit
|
51
|
+
{C} character
|
52
52
|
|
53
|
-
|
53
|
+
MODIFIERS
|
54
54
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
55
|
+
s: plural t: titlecase
|
56
|
+
u: uppercase l: lowercase
|
57
|
+
a: AlTeRnAtE case
|
58
|
+
<number>: repeat <number> times
|
59
59
|
|
60
|
-
|
60
|
+
Apply modifiers using a colon after the tag name.
|
61
61
|
|
62
|
-
|
62
|
+
EXAMPLES
|
63
63
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
64
|
+
Ten random uppercase letters: {C:10u}
|
65
|
+
Three camelcase nouns: {N:3t}
|
66
|
+
Plural, titlecase noun: {N:ts}
|
67
|
+
Uppercase adjective: {A:u}
|
68
|
+
Five random digits: {D:5}
|
69
|
+
A username: {A}_{N}
|
70
|
+
EOF
|
71
|
+
end
|
71
72
|
end
|
72
|
-
end
|
73
73
|
end
|
data/lib/patter/sample.rb
CHANGED
@@ -1,22 +1,26 @@
|
|
1
1
|
module Patter
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
2
|
+
class Sample
|
3
|
+
def initialize(str)
|
4
|
+
@str = str
|
5
|
+
end
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
def method_missing(method_symbol)
|
8
|
+
@str = @str.send(method_symbol)
|
9
|
+
end
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
11
|
+
def altcase
|
12
|
+
@str = @str.chars.each_with_index.map do |char, i|
|
13
|
+
if i % 2 == 0 then
|
14
|
+
char.upcase
|
15
|
+
else
|
16
|
+
char.downcase
|
17
|
+
end
|
18
|
+
end.join
|
19
|
+
end
|
16
20
|
|
17
|
-
|
18
|
-
|
21
|
+
def to_s
|
22
|
+
@str
|
23
|
+
end
|
24
|
+
alias_method :to_str, :to_s
|
19
25
|
end
|
20
|
-
alias_method :to_str, :to_s
|
21
|
-
end
|
22
26
|
end
|
data/lib/patter/source.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
module Patter
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
2
|
+
class Source < Array
|
3
|
+
def get_samples(n)
|
4
|
+
sample(n).map { |str| Sample.new(str) }
|
5
|
+
end
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
def get_sample
|
8
|
+
get_samples(1).first
|
9
|
+
end
|
9
10
|
end
|
10
|
-
end
|
11
11
|
end
|
@@ -1,39 +1,39 @@
|
|
1
1
|
module Patter
|
2
|
-
|
3
|
-
|
2
|
+
class SourceProvider
|
3
|
+
include Singleton
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
def get_source(type)
|
6
|
+
Source.new(send(type))
|
7
|
+
end
|
8
8
|
|
9
|
-
|
9
|
+
private
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
11
|
+
def gem_root
|
12
|
+
__dir__ + "/../../"
|
13
|
+
end
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
def get_wordlist(type)
|
16
|
+
File.read(gem_root + "/words/#{type}.txt").split
|
17
|
+
end
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
def chars
|
20
|
+
'abcdefghijklmnopqrstuvwxyz'.split('').shuffle
|
21
|
+
end
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
23
|
+
def adjectives
|
24
|
+
@adjectives ||= get_wordlist('adjectives')
|
25
|
+
end
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
|
27
|
+
def nouns
|
28
|
+
@nouns ||= get_wordlist('nouns')
|
29
|
+
end
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
|
31
|
+
def symbols
|
32
|
+
'!#$%&()*+,-=./:;<?>@[\]^_'.split('')
|
33
|
+
end
|
34
34
|
|
35
|
-
|
36
|
-
|
35
|
+
def digits
|
36
|
+
'123456789'.split('')
|
37
|
+
end
|
37
38
|
end
|
38
|
-
end
|
39
39
|
end
|
data/lib/patter.rb
CHANGED
data/words/adjectives.txt
CHANGED
@@ -92,12 +92,9 @@ better
|
|
92
92
|
best
|
93
93
|
bewitched
|
94
94
|
big
|
95
|
-
big-hearted
|
96
95
|
biodegradable
|
97
|
-
bite-sized
|
98
96
|
bitter
|
99
97
|
black
|
100
|
-
black-and-white
|
101
98
|
bland
|
102
99
|
blank
|
103
100
|
blaring
|
@@ -160,7 +157,6 @@ circular
|
|
160
157
|
classic
|
161
158
|
clean
|
162
159
|
clear
|
163
|
-
clear-cut
|
164
160
|
clever
|
165
161
|
close
|
166
162
|
closed
|
@@ -299,7 +295,6 @@ eager
|
|
299
295
|
earnest
|
300
296
|
early
|
301
297
|
easy
|
302
|
-
easy-going
|
303
298
|
ecstatic
|
304
299
|
edible
|
305
300
|
educated
|
@@ -348,8 +343,6 @@ experienced
|
|
348
343
|
expert
|
349
344
|
extraneous
|
350
345
|
extroverted
|
351
|
-
extra-large
|
352
|
-
extra-small
|
353
346
|
fabulous
|
354
347
|
failing
|
355
348
|
faint
|
@@ -363,8 +356,6 @@ fancy
|
|
363
356
|
fantastic
|
364
357
|
far
|
365
358
|
faraway
|
366
|
-
far-flung
|
367
|
-
far-off
|
368
359
|
fast
|
369
360
|
fat
|
370
361
|
fatal
|
@@ -460,7 +451,6 @@ glossy
|
|
460
451
|
glum
|
461
452
|
golden
|
462
453
|
good
|
463
|
-
good-natured
|
464
454
|
gorgeous
|
465
455
|
graceful
|
466
456
|
gracious
|
@@ -497,9 +487,7 @@ handmade
|
|
497
487
|
handsome
|
498
488
|
handy
|
499
489
|
happy
|
500
|
-
happy-go-lucky
|
501
490
|
hard
|
502
|
-
hard-to-find
|
503
491
|
harmful
|
504
492
|
harmless
|
505
493
|
harmonious
|
@@ -518,7 +506,6 @@ helpless
|
|
518
506
|
hidden
|
519
507
|
hideous
|
520
508
|
high
|
521
|
-
high-level
|
522
509
|
hilarious
|
523
510
|
hoarse
|
524
511
|
hollow
|
@@ -549,8 +536,6 @@ idolized
|
|
549
536
|
ignorant
|
550
537
|
ill
|
551
538
|
illegal
|
552
|
-
ill-fated
|
553
|
-
ill-informed
|
554
539
|
illiterate
|
555
540
|
illustrious
|
556
541
|
imaginary
|
@@ -608,7 +593,6 @@ irritating
|
|
608
593
|
itchy
|
609
594
|
jaded
|
610
595
|
jagged
|
611
|
-
jam-packed
|
612
596
|
jaunty
|
613
597
|
jealous
|
614
598
|
jittery
|
@@ -671,7 +655,6 @@ loathsome
|
|
671
655
|
lone
|
672
656
|
lonely
|
673
657
|
long
|
674
|
-
long-term
|
675
658
|
loose
|
676
659
|
lopsided
|
677
660
|
lost
|
@@ -688,7 +671,6 @@ lumpy
|
|
688
671
|
lustrous
|
689
672
|
luxurious
|
690
673
|
mad
|
691
|
-
made-up
|
692
674
|
magnificent
|
693
675
|
majestic
|
694
676
|
major
|
@@ -792,7 +774,6 @@ offbeat
|
|
792
774
|
offensive
|
793
775
|
official
|
794
776
|
old
|
795
|
-
old-fashioned
|
796
777
|
only
|
797
778
|
open
|
798
779
|
optimal
|
@@ -904,7 +885,6 @@ queasy
|
|
904
885
|
querulous
|
905
886
|
questionable
|
906
887
|
quick
|
907
|
-
quick-witted
|
908
888
|
quiet
|
909
889
|
quintessential
|
910
890
|
quirky
|
@@ -981,10 +961,7 @@ scratchy
|
|
981
961
|
scrawny
|
982
962
|
second
|
983
963
|
secondary
|
984
|
-
second-hand
|
985
964
|
secret
|
986
|
-
self-assured
|
987
|
-
self-reliant
|
988
965
|
selfish
|
989
966
|
sentimental
|
990
967
|
separate
|
@@ -1006,7 +983,6 @@ shocked
|
|
1006
983
|
shocking
|
1007
984
|
shoddy
|
1008
985
|
short
|
1009
|
-
short-term
|
1010
986
|
showy
|
1011
987
|
shrill
|
1012
988
|
shy
|
@@ -1111,7 +1087,6 @@ superb
|
|
1111
1087
|
superficial
|
1112
1088
|
superior
|
1113
1089
|
supportive
|
1114
|
-
sure-footed
|
1115
1090
|
surprised
|
1116
1091
|
suspicious
|
1117
1092
|
svelte
|
@@ -1285,14 +1260,6 @@ weepy
|
|
1285
1260
|
weighty
|
1286
1261
|
weird
|
1287
1262
|
welcome
|
1288
|
-
well-documented
|
1289
|
-
well-groomed
|
1290
|
-
well-informed
|
1291
|
-
well-lit
|
1292
|
-
well-made
|
1293
|
-
well-off
|
1294
|
-
well-to-do
|
1295
|
-
well-worn
|
1296
1263
|
wet
|
1297
1264
|
which
|
1298
1265
|
whimsical
|
@@ -1303,7 +1270,6 @@ whole
|
|
1303
1270
|
whopping
|
1304
1271
|
wicked
|
1305
1272
|
wide
|
1306
|
-
wide-eyed
|
1307
1273
|
wiggly
|
1308
1274
|
wild
|
1309
1275
|
willing
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: patter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- crdx
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-07-
|
11
|
+
date: 2019-07-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -65,6 +65,7 @@ files:
|
|
65
65
|
- lib/patter/sample.rb
|
66
66
|
- lib/patter/source.rb
|
67
67
|
- lib/patter/source_provider.rb
|
68
|
+
- lib/patter/version.rb
|
68
69
|
- words/adjectives.txt
|
69
70
|
- words/nouns.txt
|
70
71
|
homepage: https://github.com/crdx/patter
|
@@ -89,5 +90,5 @@ requirements: []
|
|
89
90
|
rubygems_version: 3.0.4
|
90
91
|
signing_key:
|
91
92
|
specification_version: 4
|
92
|
-
summary:
|
93
|
+
summary: Generate strings from patterns.
|
93
94
|
test_files: []
|