random_data 1.2.1 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +14 -0
- data/Manifest.txt +1 -0
- data/README.txt +23 -6
- data/lib/random_data/booleans.rb +1 -1
- data/lib/random_data/grammar.rb +61 -0
- data/lib/random_data/locations.rb +23 -3
- data/lib/random_data/numbers.rb +20 -2
- data/lib/random_data/text.rb +0 -1
- data/lib/random_data/version.rb +2 -2
- data/lib/random_data.rb +16 -2
- data/script/destroy +0 -0
- data/script/generate +0 -0
- data/script/txt2html +0 -0
- data/test/test_random_data.rb +22 -1
- metadata +5 -4
data/History.txt
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
== 1.3.0 2008-05-25
|
2
|
+
|
3
|
+
All these enhancements are from Hugh Sasse. Thanks Hugh!
|
4
|
+
|
5
|
+
* 4 major enhancements:
|
6
|
+
* Added RandomData::Grammar, which lets you create simple random sentences (see rdocs)
|
7
|
+
* Added Random.bit and Random.bits
|
8
|
+
* Added Random.grammatical_construct
|
9
|
+
* Fixed up rdocs which had gotten out of date
|
10
|
+
|
11
|
+
* 2 minor enhancements:
|
12
|
+
* Added Random.uk_post_code
|
13
|
+
* Zipcodes should strings, not integers
|
14
|
+
|
1
15
|
== 1.2.1 2007-11-29
|
2
16
|
|
3
17
|
* 1 minor fix:
|
data/Manifest.txt
CHANGED
data/README.txt
CHANGED
@@ -20,21 +20,35 @@ or get the gem manually from http://rubyforge.org/frs/?group_id=4458
|
|
20
20
|
Random.phone, Random.international_phone, Random.email
|
21
21
|
|
22
22
|
=== Time/Date Methods
|
23
|
-
Random.date
|
23
|
+
Random.date, Random.date_between
|
24
24
|
|
25
25
|
=== Location Methods
|
26
|
-
Random.address_line_1, Random.address_line_2, Random.zipcode, Random.state, Random.country, Random.city
|
26
|
+
Random.address_line_1, Random.address_line_2, Random.zipcode, Random.uk_post_code, Random.state, Random.state_full, Random.country, Random.city
|
27
27
|
|
28
28
|
=== Name Methods
|
29
|
-
Random.firstname, Random.initial, Random.lastname
|
29
|
+
Random.firstname, Random.initial, Random.lastname
|
30
30
|
|
31
31
|
=== Text Methods
|
32
32
|
Random.alphanumeric, Random.paragraphs
|
33
33
|
|
34
|
-
|
34
|
+
=== Grammatical Methods
|
35
|
+
Random.grammatical_construct
|
36
|
+
|
37
|
+
=== Number Methods
|
38
|
+
Random.number, Random.bit, Random.bits
|
35
39
|
|
40
|
+
=== Boolean Methods
|
41
|
+
Random.boolean
|
36
42
|
|
37
|
-
|
43
|
+
=== Array Extension
|
44
|
+
Array.rand
|
45
|
+
|
46
|
+
=== Choose From File Methods
|
47
|
+
Random implements a method_missing helper that will choose a line at random from a file in your load path. See Random::method_missing for details.
|
48
|
+
|
49
|
+
Note that some methods take parameters to bound or limit the amount of data returned. See RDocs for details.
|
50
|
+
|
51
|
+
== Examples of Some Methods
|
38
52
|
|
39
53
|
>>Random.alphanumeric
|
40
54
|
=> "cfbutm3vYfhZXil0"
|
@@ -103,5 +117,8 @@ Note that some methods take parameters to bound or limit the amount of data retu
|
|
103
117
|
== Contact
|
104
118
|
Let me know if you have patches, comments, or suggestions: mailto:mike@subelsky.com
|
105
119
|
|
120
|
+
== Special Thanks
|
121
|
+
Major thanks to Hugh Sasse and {Paul Barry}[http://paulbarry.com/] for their contributions.
|
122
|
+
|
106
123
|
== Copyright
|
107
|
-
Copyright (c)
|
124
|
+
Copyright (c) 2008 {Mike Subelsky}[http://subelsky.com/], Baltimore, Maryland, released under the MIT license.
|
data/lib/random_data/booleans.rb
CHANGED
@@ -0,0 +1,61 @@
|
|
1
|
+
|
2
|
+
module RandomData
|
3
|
+
|
4
|
+
# Defines methods for the generation of random data based on a supplied grammar.
|
5
|
+
|
6
|
+
module Grammar
|
7
|
+
|
8
|
+
# Returns simple sentences based on a supplied grammar, which must be a hash, the
|
9
|
+
# keys of which are symbols. The values are either an array of successive values or a grammar
|
10
|
+
# (i.e, hash with symbols as keys, and hashes or arrays as values. The arrays contain symbols
|
11
|
+
# referencing the keys in the present grammar, or strings to be output. The keys are always symbols.
|
12
|
+
#
|
13
|
+
# Example:
|
14
|
+
# Random.grammatical_construct({:story => [:man, " bites ", :dog], :man => { :bob => "Bob"}, :dog => {:a =>"Rex", :b =>"Rover"}}, :story)
|
15
|
+
# => "Bob bites Rover"
|
16
|
+
|
17
|
+
def grammatical_construct(grammar, what=nil)
|
18
|
+
output = ""
|
19
|
+
if what.nil?
|
20
|
+
case grammar
|
21
|
+
when Hash
|
22
|
+
a_key = grammar.keys.sort_by{rand}[0]
|
23
|
+
output += grammatical_construct(grammar, a_key)
|
24
|
+
when Array
|
25
|
+
grammar.each do |item|
|
26
|
+
output += grammatical_construct(item)
|
27
|
+
end
|
28
|
+
when String
|
29
|
+
output += grammar
|
30
|
+
end
|
31
|
+
else
|
32
|
+
rhs = grammar[what]
|
33
|
+
case rhs
|
34
|
+
when Array
|
35
|
+
rhs.each do |item|
|
36
|
+
case item
|
37
|
+
when Symbol
|
38
|
+
output += grammatical_construct(grammar,item)
|
39
|
+
when String
|
40
|
+
output += item
|
41
|
+
when Hash
|
42
|
+
output += grammatical_construct(item)
|
43
|
+
else
|
44
|
+
raise "#{item.inspect} must be a symbol or string or Hash"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
when Hash
|
48
|
+
output+= grammatical_construct(rhs)
|
49
|
+
when Symbol
|
50
|
+
output += grammatical_construct(rhs)
|
51
|
+
when String
|
52
|
+
output += rhs
|
53
|
+
else
|
54
|
+
raise "#{rhs.inspect} must be a symbol, string, Array or Hash"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
return output
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
end
|
@@ -9,8 +9,9 @@ module RandomData
|
|
9
9
|
Linden Maple Oak Pine Rose Walnut Willow)
|
10
10
|
people = %w( Adams Franklin Jackson Jefferson Lincoln
|
11
11
|
Madison Washington Wilson)
|
12
|
+
people_uk = %w( Churchill Tyndale Latimer Cranmer )
|
12
13
|
places = %w( Highland Hill Park Woodland Sunset Virginia)
|
13
|
-
numbers = %w( 1st 2nd 4th 5th )
|
14
|
+
numbers = %w( 1st 2nd 4th 5th 34th 42nd )
|
14
15
|
@@streetnames = trees + people + places + numbers
|
15
16
|
|
16
17
|
@@street_types = %w(St Ave Rd Blvd Trl Ter Rdg Pl Pkwy Ct Circle)
|
@@ -25,6 +26,8 @@ module RandomData
|
|
25
26
|
"#{rand(40000)} #{@@streetnames.rand} #{@@street_types.rand}"
|
26
27
|
end
|
27
28
|
|
29
|
+
alias :us_address_line_1 :address_line_1
|
30
|
+
|
28
31
|
@@line2types = ["Apt", "Bsmt", "Bldg", "Dept", "Fl", "Frnt", "Hngr", "Lbby", "Lot", "Lowr", "Ofc", "Ph", "Pier", "Rear", "Rm", "Side", "Slip", "Spc", "Stop", "Ste", "Trlr", "Unit", "Uppr"]
|
29
32
|
|
30
33
|
# Returns the first line of a US maiiling address (street number, street name, street type)
|
@@ -38,8 +41,25 @@ module RandomData
|
|
38
41
|
end
|
39
42
|
|
40
43
|
# Returns a random 5-digit string, not guaranteed to be a legitimate zip code.
|
44
|
+
# Legal zip codes can have leading zeroes and thus they need to be strings.
|
45
|
+
|
41
46
|
def zipcode
|
42
|
-
rand(
|
47
|
+
"%05d" % rand(99999)
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
# Returns a string providing something in the general form of a UK post code. Like the zip codes, this might
|
52
|
+
# not actually be valid. Doesn't cover London whose codes are like "SE1".
|
53
|
+
|
54
|
+
def uk_post_code
|
55
|
+
post_towns = %w(BM CB CV LE LI LS KT MK NE OX PL YO)
|
56
|
+
# Can't remember any othes at the moment
|
57
|
+
number_1 = rand(100).to_s
|
58
|
+
number_2 = rand(100).to_s
|
59
|
+
# Easier way to do this?
|
60
|
+
letters = ("AA".."ZZ").to_a.rand
|
61
|
+
|
62
|
+
return "#{post_towns.rand}#{number_1} #{number_2}#{letters}"
|
43
63
|
end
|
44
64
|
|
45
65
|
# from technoweenie: http://svn.techno-weenie.net/projects/plugins/us_states/lib/us_states.rb
|
@@ -56,7 +76,7 @@ module RandomData
|
|
56
76
|
["Washington", "WA"], ["Wisconsin", "WI"], ["West Virginia", "WV"], ["Wyoming", "WY"]]
|
57
77
|
|
58
78
|
# Returns a state 2-character abbreviation
|
59
|
-
#Random.state = "IL"
|
79
|
+
# Random.state = "IL"
|
60
80
|
|
61
81
|
def state
|
62
82
|
@@us_states.rand[1]
|
data/lib/random_data/numbers.rb
CHANGED
@@ -5,9 +5,27 @@ module RandomData
|
|
5
5
|
#returns a random number within the range
|
6
6
|
# Examples
|
7
7
|
#
|
8
|
-
#
|
8
|
+
# >> Random.number(5)
|
9
|
+
# => 4
|
10
|
+
# >> Random.number(5)
|
11
|
+
# => 2
|
12
|
+
# >> Random.number(5)
|
13
|
+
# => 1
|
9
14
|
def number(n)
|
10
15
|
n.is_a?(Range) ? n.to_a.rand : rand(n)
|
11
16
|
end
|
17
|
+
|
18
|
+
# return a random bit, 0 or 1.
|
19
|
+
def bit
|
20
|
+
rand(2)
|
21
|
+
end
|
22
|
+
|
23
|
+
# return an array of n random bits.
|
24
|
+
def bits(n)
|
25
|
+
x = []
|
26
|
+
n.times {x << bit}
|
27
|
+
x
|
28
|
+
end
|
29
|
+
|
12
30
|
end
|
13
|
-
end
|
31
|
+
end
|
data/lib/random_data/text.rb
CHANGED
data/lib/random_data/version.rb
CHANGED
data/lib/random_data.rb
CHANGED
@@ -8,18 +8,32 @@ require 'random_data/locations'
|
|
8
8
|
require 'random_data/names'
|
9
9
|
require 'random_data/numbers'
|
10
10
|
require 'random_data/text'
|
11
|
+
require 'random_data/grammar'
|
11
12
|
|
12
13
|
class Random
|
13
14
|
extend RandomData::Booleans
|
14
15
|
extend RandomData::ContactInfo
|
15
16
|
extend RandomData::Dates
|
17
|
+
extend RandomData::Grammar
|
16
18
|
extend RandomData::Locations
|
17
19
|
extend RandomData::Names
|
18
20
|
extend RandomData::Numbers
|
19
21
|
extend RandomData::Text
|
20
22
|
|
21
|
-
# Looks for a file with the name methodname.dat, reads the lines from that file, then gives you a random line from that file
|
22
|
-
#
|
23
|
+
# Looks for a file in the load path with the name methodname.dat, reads the lines from that file, then gives you a random line from that file.
|
24
|
+
# Raises an error if it can't find the file. For example, given a file named "horse.dat" in your load path:
|
25
|
+
# >> Random.horse
|
26
|
+
# => "Stallion"
|
27
|
+
# >> Random.horse
|
28
|
+
# => "Pony"
|
29
|
+
# >> Random.horse
|
30
|
+
# => "Mare"
|
31
|
+
# >> Random.horse
|
32
|
+
# => "Clydesdale"
|
33
|
+
# >> Random.horse
|
34
|
+
# => "Stallion"
|
35
|
+
# >> Random.horse
|
36
|
+
# => "Mare"
|
23
37
|
|
24
38
|
def self.method_missing(methodname)
|
25
39
|
thing = "#{methodname}.dat"
|
data/script/destroy
CHANGED
File without changes
|
data/script/generate
CHANGED
File without changes
|
data/script/txt2html
CHANGED
File without changes
|
data/test/test_random_data.rb
CHANGED
@@ -38,7 +38,11 @@ class TestRandomData < Test::Unit::TestCase
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def test_should_return_random_zipcode
|
41
|
-
assert_equal
|
41
|
+
assert_equal "38408", Random.zipcode
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_should_return_random_uk_post_code
|
45
|
+
assert_equal "BM8 24DB", Random.uk_post_code
|
42
46
|
end
|
43
47
|
|
44
48
|
def test_should_return_random_state
|
@@ -119,9 +123,26 @@ class TestRandomData < Test::Unit::TestCase
|
|
119
123
|
assert_equal 8, Random.number(9)
|
120
124
|
end
|
121
125
|
|
126
|
+
def test_should_return_random_bit
|
127
|
+
assert_equal 0, Random.bit
|
128
|
+
end
|
129
|
+
|
130
|
+
def test_should_return_random_bits
|
131
|
+
assert_equal 10, Random.bits(10).size
|
132
|
+
assert_equal [0, 1, 0, 0, 0, 0, 1, 0, 0, 1], Random.bits(10)
|
133
|
+
end
|
134
|
+
|
122
135
|
def test_should_return_random_number_within_range
|
123
136
|
assert_equal 13, Random.number(5..15)
|
124
137
|
end
|
138
|
+
|
139
|
+
def test_should_return_random_grammatical_construct
|
140
|
+
assert_equal "Bob bites Rover",
|
141
|
+
Random::grammatical_construct({:story => [:man, " bites ", :dog],
|
142
|
+
:man => { :bob => "Bob"},
|
143
|
+
:dog => {:a =>"Rex", :b =>"Rover"}},
|
144
|
+
:story)
|
145
|
+
end
|
125
146
|
|
126
147
|
end
|
127
148
|
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: random_data
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
5
|
-
platform:
|
4
|
+
version: 1.3.0
|
5
|
+
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Subelsky
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2008-05-25 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -38,6 +38,7 @@ files:
|
|
38
38
|
- lib/random_data/booleans.rb
|
39
39
|
- lib/random_data/contact_info.rb
|
40
40
|
- lib/random_data/dates.rb
|
41
|
+
- lib/random_data/grammar.rb
|
41
42
|
- lib/random_data/locations.rb
|
42
43
|
- lib/random_data/names.rb
|
43
44
|
- lib/random_data/numbers.rb
|
@@ -81,7 +82,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
81
82
|
requirements: []
|
82
83
|
|
83
84
|
rubyforge_project: random-data
|
84
|
-
rubygems_version:
|
85
|
+
rubygems_version: 1.1.1
|
85
86
|
signing_key:
|
86
87
|
specification_version: 2
|
87
88
|
summary: A Ruby gem that provides a Random singleton class with a series of methods for generating random test data including names, mailing addresses, dates, phone numbers, e-mail addresses, and text.
|