randexp 0.1.3 → 0.1.4
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.
- data/CHANGELOG +4 -0
- data/Rakefile +2 -2
- data/lib/randexp.rb +9 -5
- data/lib/randexp/core_ext.rb +6 -0
- data/lib/{core_ext → randexp/core_ext}/array.rb +0 -0
- data/lib/{core_ext → randexp/core_ext}/integer.rb +0 -0
- data/lib/{core_ext → randexp/core_ext}/range.rb +0 -0
- data/lib/{core_ext → randexp/core_ext}/regexp.rb +0 -0
- data/lib/{dictionary.rb → randexp/dictionary.rb} +1 -1
- data/lib/{randgen.rb → randexp/randgen.rb} +17 -1
- data/lib/randexp/wordlists/female_names.rb +23 -0
- data/lib/randexp/wordlists/male_names.rb +23 -0
- data/lib/randexp/wordlists/real_name.rb +33 -0
- data/spec/regression/regexp_spec.rb +22 -0
- data/spec/unit/randexp_spec.rb +137 -137
- data/spec/unit/randgen_spec.rb +96 -2
- data/wordlists/female_names +4275 -0
- data/wordlists/male_names +1219 -0
- data/wordlists/surnames +475 -0
- metadata +19 -11
- data/lib/core_ext.rb +0 -4
data/CHANGELOG
CHANGED
data/Rakefile
CHANGED
@@ -7,13 +7,13 @@ require 'rake/rdoctask'
|
|
7
7
|
|
8
8
|
PROJECT_NAME = "randexp"
|
9
9
|
GEM = "randexp"
|
10
|
-
GEM_VERSION = "0.1.
|
10
|
+
GEM_VERSION = "0.1.4"
|
11
11
|
AUTHOR = "Ben Burkert"
|
12
12
|
EMAIL = "ben@benburkert.com"
|
13
13
|
HOMEPAGE = "http://github.com/benburkert/randexp"
|
14
14
|
TITLE = "Randexp Gem"
|
15
15
|
SUMMARY = "Library for generating random strings."
|
16
|
-
FILES = %w(LICENSE README README Rakefile TODO CHANGELOG) + Dir.glob("{lib,spec}/**/*")
|
16
|
+
FILES = %w(LICENSE README README Rakefile TODO CHANGELOG) + Dir.glob("{lib,spec}/**/*") + Dir.glob("wordlists/**/*")
|
17
17
|
RDOC_FILES = %w(LICENSE README README Rakefile TODO CHANGELOG) + Dir.glob("lib/**/*")
|
18
18
|
|
19
19
|
RUBYFORGE_USER = "benburkert"
|
data/lib/randexp.rb
CHANGED
@@ -10,8 +10,12 @@ class Randexp
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
-
|
14
|
-
require '
|
15
|
-
require '
|
16
|
-
require '
|
17
|
-
require '
|
13
|
+
dir = File.dirname(__FILE__) + '/randexp'
|
14
|
+
require dir + '/core_ext'
|
15
|
+
require dir + '/dictionary'
|
16
|
+
require dir + '/parser'
|
17
|
+
require dir + '/randgen'
|
18
|
+
require dir + '/reducer'
|
19
|
+
require dir + '/wordlists/female_names'
|
20
|
+
require dir + '/wordlists/male_names'
|
21
|
+
require dir + '/wordlists/real_name'
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -32,11 +32,27 @@ class Randgen
|
|
32
32
|
|
33
33
|
def self.word(options = {})
|
34
34
|
begin
|
35
|
-
word = Dictionary.words(options).pick
|
35
|
+
word = Randexp::Dictionary.words(options).pick
|
36
36
|
end until word =~ /^\w+$/
|
37
37
|
|
38
38
|
word
|
39
39
|
end
|
40
|
+
|
41
|
+
def self.first_name(options = {})
|
42
|
+
RealName.first_names(options).pick
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.surname(options = {})
|
46
|
+
RealName.surnames(options).pick
|
47
|
+
end
|
48
|
+
|
49
|
+
class << self
|
50
|
+
alias_method :last_name, :surname
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.name(options = {})
|
54
|
+
"#{first_name(options)} #{surname(options)}"
|
55
|
+
end
|
40
56
|
|
41
57
|
def self.sentence(options = {})
|
42
58
|
((options[:length] || WORDS_PER_SENTENCE.pick).of { word } * " ").capitalize
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class RealName
|
2
|
+
|
3
|
+
def self.load_female_first_names
|
4
|
+
dir = File.dirname(__FILE__)
|
5
|
+
if File.exists?("#{dir}/../../../wordlists/female_names")
|
6
|
+
File.read("#{dir}/../../../wordlists/female_names").split
|
7
|
+
else
|
8
|
+
raise "words file not found"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.female_first_names(options = {})
|
13
|
+
if options.has_key?(:length)
|
14
|
+
female_first_names_by_length[options[:length]]
|
15
|
+
else
|
16
|
+
@@female_first_names ||= load_female_first_names
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.female_first_names_by_length
|
21
|
+
@@female_first_names_by_length ||= female_first_names.inject({}) {|h, w| (h[w.size] ||= []) << w; h }
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class RealName
|
2
|
+
|
3
|
+
def self.load_male_first_names
|
4
|
+
dir = File.dirname(__FILE__)
|
5
|
+
if File.exists?("#{dir}/../../../wordlists/male_names")
|
6
|
+
File.read("#{dir}/../../../wordlists/male_names").split
|
7
|
+
else
|
8
|
+
raise "words file not found"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.male_first_names(options = {})
|
13
|
+
if options.has_key?(:length)
|
14
|
+
male_first_names_by_length[options[:length]]
|
15
|
+
else
|
16
|
+
@@male_first_names ||= load_male_first_names
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.male_first_names_by_length
|
21
|
+
@@male_first_names_by_length ||= male_first_names.inject({}) {|h, w| (h[w.size] ||= []) << w; h }
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
class RealName
|
2
|
+
def self.load_surnames
|
3
|
+
dir = File.dirname(__FILE__)
|
4
|
+
if File.exists?("#{dir}/../../../wordlists/surnames")
|
5
|
+
File.read("#{dir}/../../../wordlists/surnames").split
|
6
|
+
else
|
7
|
+
raise "words file not found"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.surnames(options = {})
|
12
|
+
if options.has_key?(:length)
|
13
|
+
surnames_by_length[options[:length]]
|
14
|
+
else
|
15
|
+
@@surnames ||= load_surnames
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.surnames_by_length
|
20
|
+
@@surnames_by_length ||= surnames.inject({}) {|h, w| (h[w.size] ||= []) << w; h }
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.first_names(options)
|
24
|
+
case options[:gender].to_s
|
25
|
+
when /^male/i
|
26
|
+
male_first_names(options)
|
27
|
+
when /^female/i
|
28
|
+
female_first_names(options)
|
29
|
+
else
|
30
|
+
[male_first_names(options), female_first_names(options)].pick
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -160,4 +160,26 @@ describe "#{'*' * 80}\nRegression Specs:" do
|
|
160
160
|
/\$\d{2,3}\.\d{2}/.gen.should =~ /\$\d{2,3}\.\d{2}/
|
161
161
|
end
|
162
162
|
end
|
163
|
+
|
164
|
+
it "/[:first_name:]/ => /\\w+/" do
|
165
|
+
100.times do
|
166
|
+
/[:first_name:]/.gen.should =~ /\w+/
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
it "/[:last_name:]/ => /\\w+/" do
|
171
|
+
/[:last_name:]/.gen.should =~ /\w+/
|
172
|
+
end
|
173
|
+
|
174
|
+
it "/[:name:]/ => /\\w+ \\w+/" do
|
175
|
+
/[:name:]/.gen.should =~ /\w+ \w+/
|
176
|
+
end
|
177
|
+
|
178
|
+
it "/[:last_name:]{5,10}/ => /\\w{5,10}/" do
|
179
|
+
/[:last_name:]{5,10}/.gen.should =~ /\w{5,10}/
|
180
|
+
end
|
181
|
+
|
182
|
+
it "/[:first_name:]{5,10}/ => /\\w{5,10}/" do
|
183
|
+
/[:first_name:]{5,10}/.gen.should =~ /\w{5,10}/
|
184
|
+
end
|
163
185
|
end
|
data/spec/unit/randexp_spec.rb
CHANGED
@@ -19,140 +19,140 @@ describe Randexp do
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
22
|
+
describe Randexp do
|
23
|
+
describe "#parse" do
|
24
|
+
|
25
|
+
describe '("\\w")' do
|
26
|
+
it "should be a random sexp" do
|
27
|
+
Randexp::Parser.parse("\\w").first.should == :random
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should hold a word symbol" do
|
31
|
+
Randexp::Parser.parse("\\w").last.should == :w
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe '("\\s")' do
|
36
|
+
it "should be a literal sexp" do
|
37
|
+
Randexp::Parser.parse("\\s").first.should == :random
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should hold a whitespace symbol " do
|
41
|
+
Randexp::Parser.parse("\\s").last.should == :s
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe '("\\d")' do
|
46
|
+
it "should be a literal sexp" do
|
47
|
+
Randexp::Parser.parse("\\d").first.should == :random
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should hold a digit character " do
|
51
|
+
Randexp::Parser.parse("\\d").last.should == :d
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe '("\\c")' do
|
56
|
+
it "should be a literal sexp" do
|
57
|
+
Randexp::Parser.parse("\\c").first.should == :random
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should hold a digit character " do
|
61
|
+
Randexp::Parser.parse("\\c").last.should == :c
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe '("(\\w)")' do
|
66
|
+
it "should be a random sexp" do
|
67
|
+
Randexp::Parser.parse("(\\w)").first.should == :random
|
68
|
+
Randexp::Parser.parse("(\\w)").last.should == :w
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe '("(\\w)(\\d)")' do
|
73
|
+
it "should be a union between random sexp's" do
|
74
|
+
Randexp::Parser.parse("(\\w)(\\d)").first.should == :union
|
75
|
+
Randexp::Parser.parse("(\\w)(\\d)")[1].first.should == :random
|
76
|
+
Randexp::Parser.parse("(\\w)(\\d)")[2].first.should == :random
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe '("(\\w)(\\s)(\\d)")' do
|
81
|
+
xit "should be a union between 3 sexp's" do
|
82
|
+
Randexp::Parser.parse("(\\w)(\\s)(\\d)").first.should == :union
|
83
|
+
Randexp::Parser.parse("(\\w)(\\s)(\\d)").size.should == 4
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
describe '("\\w*")' do
|
88
|
+
it "should be a quantify sexp and hold a random sexp" do
|
89
|
+
Randexp::Parser.parse("\\w*").first.should == :quantify
|
90
|
+
Randexp::Parser.parse("\\w*")[1].first.should == :random
|
91
|
+
Randexp::Parser.parse("\\w*")[2].should == :*
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should blah" do
|
96
|
+
Randexp::Parser.parse("(\\w)|(\\d)").should == [:intersection, [:random, :w], [:random, :d]]
|
97
|
+
end
|
98
|
+
|
99
|
+
describe '("[:sentence:]")' do
|
100
|
+
it "should be a random sexp" do
|
101
|
+
Randexp::Parser.parse("[:sentence:]").first.should == :random
|
102
|
+
Randexp::Parser.parse("[:sentence:]").last.should == :sentence
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
describe "#reduce" do
|
108
|
+
it "should return a character" do
|
109
|
+
Randexp.new("\\w").reduce.should =~ /\w/
|
110
|
+
end
|
111
|
+
|
112
|
+
it "should return a word" do
|
113
|
+
Randexp.new("\\w+").reduce.should =~ /\w+/
|
114
|
+
end
|
115
|
+
|
116
|
+
it "should return a word or an empty string" do
|
117
|
+
Randexp.new("\\w*").reduce.should =~ /\w*/
|
118
|
+
end
|
119
|
+
|
120
|
+
it "should return a word with 4 to 5 characters" do
|
121
|
+
Randexp.new("\\w{4,5}").reduce.should =~ /\w{4,5}/
|
122
|
+
end
|
123
|
+
|
124
|
+
it "should return a digit" do
|
125
|
+
Randexp.new("\\d").reduce.should =~ /\d/
|
126
|
+
end
|
127
|
+
|
128
|
+
it "should return a 2 to 10 digit number" do
|
129
|
+
Randexp.new("\\d{2,10}").reduce.should =~ /\d{2,10}/
|
130
|
+
end
|
131
|
+
|
132
|
+
it "should return a digit or empty string" do
|
133
|
+
Randexp.new("\\d?").reduce.should =~ /\d?/
|
134
|
+
end
|
135
|
+
|
136
|
+
it "should return a digit or a character" do
|
137
|
+
Randexp.new("\\d|\\w").reduce.should =~ /\w|\d/
|
138
|
+
end
|
139
|
+
|
140
|
+
xit "should return a word or a 3 digit number" do
|
141
|
+
Randexp.new("\\d{3}|\\w+").reduce.should =~ /\w+|d{3}/
|
142
|
+
end
|
143
|
+
|
144
|
+
it "should return a word or number" do
|
145
|
+
Randexp.new("\\w+|\\d{3}").reduce.should =~ /\w+|d{3}/
|
146
|
+
end
|
147
|
+
|
148
|
+
it "should return a sentence" do
|
149
|
+
Randexp.new("[:sentence:]").reduce.should =~ /(\w+\s)*\w+/
|
150
|
+
end
|
151
|
+
|
152
|
+
it "should handle a telephone number" do
|
153
|
+
100.times do
|
154
|
+
Randexp.new("(\\d{3}-)?\\d{3}-\\d{4}").reduce.should =~ /(\d{3}-)?\d{3}-\d{4}/
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|