randexp 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ == 0.1.4 "Wally Wisoky" 2008-10-08
2
+ * Added realistic name generation (Matt Aimonetti)
3
+ * Fixed loadpath issues (Gerrit Kaiser)
4
+
1
5
  == 0.1.3 "Oological" 2008-07-08
2
6
  * Randgen.word should not return a string that does not match /^\w+$/
3
7
 
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.3"
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
- require 'core_ext'
14
- require 'randexp/parser'
15
- require 'randexp/reducer'
16
- require 'randgen'
17
- require 'dictionary'
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'
@@ -0,0 +1,6 @@
1
+ dir = File.dirname(__FILE__)
2
+
3
+ require dir + '/core_ext/array'
4
+ require dir + '/core_ext/integer'
5
+ require dir + '/core_ext/range'
6
+ require dir + '/core_ext/regexp'
File without changes
File without changes
File without changes
File without changes
@@ -1,4 +1,4 @@
1
- class Dictionary
1
+ class Randexp::Dictionary
2
2
  def self.load_dictionary
3
3
  if File.exists?("/usr/share/dict/words")
4
4
  File.read("/usr/share/dict/words").split
@@ -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
@@ -19,140 +19,140 @@ describe Randexp do
19
19
  end
20
20
  end
21
21
 
22
- #describe Randexp do
23
- # describe "#parse" do
24
- #
25
- # describe '("\\w")' do
26
- # it "should be a random sexp" do
27
- # Randexp.parse("\\w").first.should == :random
28
- # end
29
- #
30
- # it "should hold a word symbol" do
31
- # Randexp.parse("\\w").last.should == :w
32
- # end
33
- # end
34
- #
35
- # describe '("\\s")' do
36
- # it "should be a literal sexp" do
37
- # Randexp.parse("\\s").first.should == :random
38
- # end
39
- #
40
- # it "should hold a whitespace symbol " do
41
- # Randexp.parse("\\s").last.should == :s
42
- # end
43
- # end
44
- #
45
- # describe '("\\d")' do
46
- # it "should be a literal sexp" do
47
- # Randexp.parse("\\d").first.should == :random
48
- # end
49
- #
50
- # it "should hold a digit character " do
51
- # Randexp.parse("\\d").last.should == :d
52
- # end
53
- # end
54
- #
55
- # describe '("\\c")' do
56
- # it "should be a literal sexp" do
57
- # Randexp.parse("\\c").first.should == :random
58
- # end
59
- #
60
- # it "should hold a digit character " do
61
- # Randexp.parse("\\c").last.should == :c
62
- # end
63
- # end
64
- #
65
- # describe '("(\\w)")' do
66
- # it "should be a random sexp" do
67
- # Randexp.parse("(\\w)").first.should == :random
68
- # Randexp.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.parse("(\\w)(\\d)").first.should == :union
75
- # Randexp.parse("(\\w)(\\d)")[1].first.should == :random
76
- # Randexp.parse("(\\w)(\\d)")[2].first.should == :random
77
- # end
78
- # end
79
- #
80
- # describe '("(\\w)(\\s)(\\d)")' do
81
- # it "should be a union between 3 sexp's" do
82
- # Randexp.parse("(\\w)(\\s)(\\d)").first.should == :union
83
- # Randexp.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.parse("\\w*").first.should == :quantify
90
- # Randexp.parse("\\w*")[1].first.should == :random
91
- # Randexp.parse("\\w*")[2].should == :*
92
- # end
93
- # end
94
- #
95
- # it "should blah" do
96
- # Randexp.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.parse("[:sentence:]").first.should == :random
102
- # Randexp.parse("[:sentence:]").last.should == :sentence
103
- # end
104
- # end
105
- # end
106
- #
107
- # describe "#generate" do
108
- # it "should return a character" do
109
- # Randexp.new("\\w").generate.should =~ /\w/
110
- # end
111
- #
112
- # it "should return a word" do
113
- # Randexp.new("\\w+").generate.should =~ /\w+/
114
- # end
115
- #
116
- # it "should return a word or an empty string" do
117
- # Randexp.new("\\w*").generate.should =~ /\w*/
118
- # end
119
- #
120
- # it "should return a word with 4 to 5 characters" do
121
- # Randexp.new("\\w{4,5}").generate.should =~ /\w{4,5}/
122
- # end
123
- #
124
- # it "should return a digit" do
125
- # Randexp.new("\\d").generate.should =~ /\d/
126
- # end
127
- #
128
- # it "should return a 2 to 10 digit number" do
129
- # Randexp.new("\\d{2,10}").generate.should =~ /\d{2,10}/
130
- # end
131
- #
132
- # it "should return a digit or empty string" do
133
- # Randexp.new("\\d?").generate.should =~ /\d?/
134
- # end
135
- #
136
- # it "should return a digit or a character" do
137
- # Randexp.new("\\d|\\w").generate.should =~ /\w|\d/
138
- # end
139
- #
140
- # it "should return a word or a 3 digit number" do
141
- # Randexp.new("\\d{3}|\\w+").generate.should =~ /\w+|d{3}/
142
- # end
143
- #
144
- # it "should return a word or number" do
145
- # Randexp.new("\\w+|\\d{3}").generate.should =~ /\w+|d{3}/
146
- # end
147
- #
148
- # it "should return a sentence" do
149
- # Randexp.new("[:sentence:]").generate.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}").generate.should =~ /(\d{3}-)?\d{3}-\d{4}/
155
- # end
156
- # end
157
- # end
158
- #end
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