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 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