malvestuto_random_data 1.5.1

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/History.txt ADDED
@@ -0,0 +1,63 @@
1
+ == 1.5.0 2008-11-06
2
+ * 2 major enhancement:
3
+ * Totally cleaned up and reconfigured hoe using newgem 1.0's conventions
4
+ * Added Markov model text generator (courtesy of Hugh Sasse)
5
+
6
+ * 1 minor enhancement:
7
+ * Added roulette method to Array (courtesy of Hugh Sasse)
8
+
9
+ * 1 minor fix:
10
+ * Fixed newline bug in the name generator (courtesy of Harold Gimenez)
11
+
12
+ == 1.3.1 2008-06-06
13
+
14
+ * 2 minor enhancements:
15
+ * Added added more last and firstnames (courtesy of Hugh Sasse)
16
+ * Added firstname_male and firstname_female (courtesy of Hugh Sasse)
17
+
18
+ == 1.3.0 2008-05-25
19
+
20
+ All these enhancements are from Hugh Sasse. Thanks Hugh!
21
+
22
+ * 4 major enhancements:
23
+ * Added RandomData::Grammar, which lets you create simple random sentences (see rdocs)
24
+ * Added Random.bit and Random.bits
25
+ * Added Random.grammatical_construct
26
+ * Fixed up rdocs which had gotten out of date
27
+
28
+ * 2 minor enhancements:
29
+ * Added Random.uk_post_code
30
+ * Zipcodes should strings, not integers
31
+
32
+ == 1.2.1 2007-11-29
33
+
34
+ * 1 minor fix:
35
+ * Updated gem manifest
36
+
37
+ == 1.2.0 2007-11-29
38
+
39
+ Thanks to Paul Barry and Hugh Sasse for some awesome patches!
40
+
41
+ * 1 major enhancement:
42
+ * Added method_missing to Random class, which looks for a method_name.dat and fetches a random line for you (see docs for details) (Hugh Sasse)
43
+ * added Random.date_between method to get a date between 2 given dates (Paul Barry)
44
+ * added Random.boolean method to get a random true or false (Paul Barry)
45
+ * added Random.number to get a random number less than a number or within a given range (Paul Barry)
46
+
47
+ * 1 minor enhancement:
48
+ * enhanced Random.date method to handle a Range as well as a Fixnum, which allows you to get a date guaranteed to be in the past (Paul Barry)
49
+
50
+ * 1 minor fix:
51
+ * Location sources organized into more understandable categories, for easier future expansion (Hugh Sasse)
52
+ * Fixed path of require statements in random_data.rb (Paul Barry)
53
+ * make initial never return nil, because if it returns nil then ContactInfo#email can thrown and error because it tries to call nil. (Paul Barry)
54
+
55
+ == 1.0.1 2007-09-17
56
+
57
+ * 1 minor fix:
58
+ * Not creating the Random class properly by extending it (vs. including modules)
59
+
60
+ == 1.0.0 2007-09-17
61
+
62
+ * 1 major enhancement:
63
+ * Initial release
data/License.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2008 Mike Subelsky, subelsky.com
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Manifest.txt ADDED
@@ -0,0 +1,26 @@
1
+ History.txt
2
+ License.txt
3
+ Manifest.txt
4
+ PostInstall.txt
5
+ README.rdoc
6
+ Rakefile
7
+ config/website.yml
8
+ lib/random_data.rb
9
+ lib/random_data/array_randomizer.rb
10
+ lib/random_data/booleans.rb
11
+ lib/random_data/contact_info.rb
12
+ lib/random_data/dates.rb
13
+ lib/random_data/grammar.rb
14
+ lib/random_data/locations.rb
15
+ lib/random_data/markov.rb
16
+ lib/random_data/names.rb
17
+ lib/random_data/numbers.rb
18
+ lib/random_data/text.rb
19
+ lib/random_data/version.rb
20
+ script/console
21
+ script/destroy
22
+ script/generate
23
+ script/txt2html
24
+ test/henry_v_prolog.txt
25
+ test/test_helper.rb
26
+ test/test_random_data.rb
data/PostInstall.txt ADDED
File without changes
data/README.rdoc ADDED
@@ -0,0 +1,130 @@
1
+ = random_data
2
+
3
+ This gem 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. Instead of:
4
+
5
+ <tt>foo.name = "John Doe"</tt>
6
+
7
+ You get:
8
+
9
+ <tt>foo.name = "#{Random.firstname} #{Random.initial} #{Random.lastname}"</tt>
10
+
11
+ == Installation
12
+
13
+ <tt>sudo gem install random_data</tt>
14
+
15
+ or get the gem manually from http://rubyforge.org/frs/?group_id=4458
16
+
17
+ == Methods
18
+
19
+ === Contact Methods
20
+ Random.phone, Random.international_phone, Random.email
21
+
22
+ === Time/Date Methods
23
+ Random.date, Random.date_between
24
+
25
+ === Location Methods
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
+
28
+ === Name Methods
29
+ Random.firstname, Random.firstname_male, Random.firstname_female, Random.initial, Random.lastname
30
+
31
+ === Text Methods
32
+ Random.alphanumeric, Random.paragraphs
33
+
34
+ === Grammatical Methods
35
+ Random.grammatical_construct
36
+
37
+ === Number Methods
38
+ Random.number, Random.bit, Random.bits
39
+
40
+ === Boolean Methods
41
+ Random.boolean
42
+
43
+ === Markov Generator Methods
44
+ Random.MarkovGenerator.new
45
+ Random.MarkovGenerator.insert
46
+ Random.MarkovGenerator.generate
47
+
48
+ === Array Extension
49
+ Array.rand
50
+ Array.roulette
51
+
52
+ === Choose From File Methods
53
+ 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.
54
+
55
+ Note that some methods take parameters to bound or limit the amount of data returned. See RDocs for details.
56
+
57
+ == Examples of Some Methods
58
+
59
+ >>Random.alphanumeric
60
+ => "cfbutm3vYfhZXil0"
61
+
62
+ >> Random.alphanumeric(5)
63
+ => "XYVyn"
64
+
65
+ >> Random.paragraphs
66
+ => "Ulysses, fighting evil and tyranny with all his power and with all of his might. Ulysses, fighting evil and tyranny with all his power and with all
67
+ of his might. \n\nHe's got style, a groovy style, and a car that just won't stop. \n\n"
68
+
69
+ >> Random.paragraphs(3)
70
+ => "Excepteur sint occaecat cupidatat non proident sunt in culpa qui officia deserunt mollit anim id est laborum. Down the road that's where I'll always be.
71
+ He's got style, a groovy style, and a car that just won't stop. I've gotten burned over Cheryl Tiegs and blown up for Raquel Welch, but when I end up in the
72
+ hay it's only hay hey hey. Hey there where ya goin, not exactly knowin'. \n\nLorem ipsum dolor sit amet consectetur adipisicing elit sed do eiusmod tempor
73
+ incididunt ut labore et dolore magna aliqua. I might jump an open drawbridge or Tarzan from a vine, beause I'm the unknown stuntman that makes Eastwood look so
74
+ fine. He just keeps on movin' and ladies keep improvin'. Rolling down to Dallas - who is providin my palace?. Every stop I make I make a new friend; Can't
75
+ stay for long just turn around and I'm gone again. \n\nAlways fighting all the evil forces bringing peace and justice to all. \n\n"
76
+
77
+ >> Random.firstname
78
+ => "Thomas"
79
+
80
+ >> Random.initial
81
+ => "E"
82
+
83
+ >> Random.lastname
84
+ => "Robinson"
85
+
86
+ >> Random.date
87
+ => Sun, 09 Sep 2007
88
+
89
+ (Returns an actual date object, shown here in its to_s form)
90
+
91
+ >> Random.date(1000)
92
+ => Sun, 26 Nov 2006
93
+
94
+ >> Random.email
95
+ => "zrodriguez@example.com"
96
+
97
+ >> Random.phone
98
+ => "564-103-8353"
99
+
100
+ >> Random.international_phone
101
+ => "011-24-37-9704"
102
+
103
+ >> Random.address_line_1
104
+ => "38367 Adams Rd"
105
+
106
+ >> Random.address_line_2
107
+ => "Lot 247"
108
+
109
+ >> Random.zipcode
110
+ => 22904
111
+
112
+ (Note that the zipcodes are totally random and may not be real zipcodes)
113
+
114
+ >> Random.state
115
+ => "MD"
116
+
117
+ >> Random.state_full
118
+ => "New Mexico"
119
+
120
+ >> Random.country
121
+ => "Philippines"
122
+
123
+ == Contact
124
+ Let me know if you have patches, comments, or suggestions: mailto:mike@subelsky.com
125
+
126
+ == Special Thanks
127
+ Major thanks to Hugh Sasse and {Paul Barry}[http://paulbarry.com/] for their contributions.
128
+
129
+ == Copyright
130
+ Copyright (c) 2008 {Mike Subelsky}[http://subelsky.com/], Baltimore, Maryland, released under the MIT license.
data/Rakefile ADDED
@@ -0,0 +1,20 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rake/rdoctask'
4
+
5
+ begin
6
+ require 'jeweler'
7
+ Jeweler::Tasks.new do |gem|
8
+ gem.name = "random_data"
9
+ gem.summary = "A Ruby gem that provides a Random class with a series of methods for generating random test data including names, mailing addresses, dates, phone numbers, e-mail addresses, and text."
10
+ gem.description = "A Ruby gem that provides a Random class with a series of methods for generating random test data including names, mailing addresses, dates, phone numbers, e-mail addresses, and text."
11
+ gem.email = "random_data@mikeshop.net"
12
+ gem.authors = ["Mike Subelsky"]
13
+ end
14
+
15
+ rescue LoadError
16
+ puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
17
+ end
18
+
19
+ # TODO - want other tests/tasks run by default? Add them to the list
20
+ # task :default => [:spec, :features]
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.5.1
@@ -0,0 +1,2 @@
1
+ host: subelsky@rubyforge.org
2
+ remote_dir: /var/www/gforge-projects/random-data/
@@ -0,0 +1,65 @@
1
+ # Extends the Array class with a function used to randomly choose elements. Note that if you are using Rails, ActiveSupport recently was updated to include a similar
2
+ # function. This code checks for the presence of that method and does not try to replace it. They work the same though so no worries.
3
+
4
+ module RandomData
5
+ module ArrayRandomizer
6
+
7
+ # Randomly chooses an element from an array
8
+ # >> [1,2,3].rand = 3
9
+ # [].rand = nil
10
+
11
+ def rand
12
+ return self[Kernel.rand(self.size)]
13
+ end
14
+
15
+ # Takes an array of non-negative weights
16
+ # and returns the index selected by a
17
+ # roulette wheel weighted according to those
18
+ # weights.
19
+ # If a block is given then k is used to determine
20
+ # how many times the block is called. In this
21
+ # case nil is returned.
22
+ def roulette(k=1)
23
+ wheel = []
24
+ weight = 0
25
+ # Create the cumulative array.
26
+ self.each do |x|
27
+ raise "Illegal negative weight #{x}" if x < 0
28
+ wheel.push(weight += x)
29
+ end
30
+ # print "wheel is #{wheel.inspect}\n";
31
+ # print "weight is #{weight.inspect}\n";
32
+ raise "Array had all zero weights" if weight.zero?
33
+ wheel.push(weight + 1) #Add extra element
34
+ if block_given?
35
+ k.times do
36
+ r = Kernel.rand() # so we don't pick up that from array.
37
+ # print "r is #{r.inspect}\n";
38
+ roll = weight.to_f * r
39
+ # print "roll is #{roll.inspect}\n";
40
+ 0.upto(self.size - 1) do |i|
41
+ if wheel[i+1] > roll
42
+ yield i
43
+ break
44
+ end # if
45
+ end # upto
46
+ end # if block_given?
47
+ return nil
48
+ else
49
+ r = Kernel.rand() # so we don't pick up that from array.
50
+ # print "r is #{r.inspect}\n";
51
+ roll = weight.to_f * r
52
+ # print "roll is #{roll.inspect}\n";
53
+ 0.upto(self.size - 1) do |i|
54
+ return i if wheel[i+1] > roll
55
+ end
56
+ end
57
+ end
58
+
59
+ end
60
+
61
+ end
62
+
63
+ unless Array.respond_to?(:rand)
64
+ Array.send :include, RandomData::ArrayRandomizer
65
+ end
@@ -0,0 +1,10 @@
1
+ module RandomData
2
+
3
+ module Booleans
4
+ #Returns true or false randomly
5
+ def boolean
6
+ rand(2) == 1 ? true : false
7
+ end
8
+ end
9
+
10
+ end
@@ -0,0 +1,24 @@
1
+ module RandomData
2
+ # Methods for randomly generating contact data like phone numbers and e-mail addresses
3
+
4
+ module ContactInfo
5
+
6
+ # Returns a randomly-generated string of digits that roughly resembles a US telephone number. Not guaranteed to be a valid area code.
7
+ def phone
8
+ "#{rand(900) + 100}-#{rand(900)+100}-#{rand(10000)+1000}"
9
+ end
10
+
11
+ # Returns a randomly-generated string of digits that roughly resembles an international telephone number as dialed from the US.
12
+ # Not guaranteed to be a valid number but just good enough to get some sample data going.
13
+
14
+ def international_phone
15
+ "011-#{rand(100) + 1}-#{rand(100)+10}-#{rand(10000)+1000}"
16
+ end
17
+
18
+ # Returns an e-mail address of the form "{first_initial}{last_name}@{domain}"
19
+ def email
20
+ domains = %w(yahoo.com gmail.com privacy.net webmail.com msn.com hotmail.com example.com privacy.net)
21
+ "#{(initial + lastname).downcase}\@#{domains.rand}"
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,47 @@
1
+ require 'date'
2
+
3
+ module RandomData
4
+
5
+ # Defines methods for random date generation
6
+
7
+ module Dates
8
+
9
+ # Returns a date within a specified range of days. If dayrange is an Integer, then the date
10
+ # returned will be plus or minus half what you specify. The default is ten days, so by default
11
+ # you will get a date within plus or minus five days of today.
12
+ #
13
+ # If dayrange is a Range, then you will get a date the falls between that range
14
+ #
15
+ # Example:
16
+ #
17
+ # Random.date # => a Date +/- 5 days of today
18
+ # Random.date(20) # => a Date +/- 10 days of today
19
+ # Random.date(-60..-30) # => a Date between 60 days ago and 30 days ago
20
+ #
21
+ def date(dayrange=10)
22
+ if dayrange.is_a?(Range)
23
+ offset = rand(dayrange.max-dayrange.min) + dayrange.min
24
+ else
25
+ offset = rand(dayrange*2) - dayrange
26
+ end
27
+ Date.today + offset
28
+ end
29
+
30
+ # Returns a date within the specified Range. The Range can be Date or String objects.
31
+ #
32
+ #Example:
33
+ # min = Date.parse('1966-11-15')
34
+ # max = Date.parse('1990-01-01')
35
+ # Random.date(min..max) # => a Date between 11/15/1996 and 1/1/1990
36
+ # Random.date('1966-11-15'..'1990-01-01') # => a Date between 11/15/1996 and 1/1/1990
37
+ #
38
+ def date_between(range)
39
+ min_date = range.min.is_a?(Date) ? range.min : Date.parse(range.min)
40
+ max_date = range.max.is_a?(Date) ? range.max : Date.parse(range.max)
41
+
42
+ diff = (max_date - min_date).to_i
43
+ min_date + rand(diff)
44
+ end
45
+
46
+ end
47
+ end
@@ -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
@@ -0,0 +1,134 @@
1
+ # coding:utf-8
2
+
3
+ module RandomData
4
+
5
+ # Defines methods to return random location data.
6
+
7
+ module Locations
8
+
9
+
10
+ trees = %w( Acacia Beech Birch Cedar Cherry Chestnut Elm Larch Laurel
11
+ Linden Maple Oak Pine Rose Walnut Willow)
12
+ people = %w( Adams Franklin Jackson Jefferson Lincoln
13
+ Madison Washington Wilson)
14
+ people_uk = %w( Churchill Tyndale Latimer Cranmer )
15
+ places = %w( Highland Hill Park Woodland Sunset Virginia)
16
+ numbers = %w( 1st 2nd 4th 5th 34th 42nd )
17
+ @@streetnames = trees + people + places + numbers
18
+
19
+ @@street_types = %w(St Ave Rd Blvd Trl Ter Rdg Pl Pkwy Ct Circle)
20
+
21
+ # Returns the first line of a US maiiling address (street number, street name, street type)
22
+ #
23
+ # Example:
24
+ #
25
+ #Random.address_line_1 = "24317 Jefferson Blvd"
26
+
27
+ def address_line_1
28
+ "#{rand(40000)} #{@@streetnames.rand} #{@@street_types.rand}"
29
+ end
30
+
31
+ alias :us_address_line_1 :address_line_1
32
+
33
+ @@line2types = ["Apt", "Bsmt", "Bldg", "Dept", "Fl", "Frnt", "Hngr", "Lbby", "Lot", "Lowr", "Ofc", "Ph", "Pier", "Rear", "Rm", "Side", "Slip", "Spc", "Stop", "Ste", "Trlr", "Unit", "Uppr"]
34
+
35
+ # Returns the first line of a US maiiling address (street number, street name, street type)
36
+ #
37
+ # Example:
38
+ #
39
+ #Random.address_line_1 = "24317 Jefferson Blvd"
40
+
41
+ def address_line_2
42
+ "#{@@line2types.rand} #{rand(999)}"
43
+ end
44
+
45
+ # Returns a random 5-digit string, not guaranteed to be a legitimate zip code.
46
+ # Legal zip codes can have leading zeroes and thus they need to be strings.
47
+
48
+ def zipcode
49
+ "%05d" % rand(99999)
50
+ end
51
+
52
+
53
+ # Returns a string providing something in the general form of a UK post code. Like the zip codes, this might
54
+ # not actually be valid. Doesn't cover London whose codes are like "SE1".
55
+
56
+ def uk_post_code
57
+ post_towns = %w(BM CB CV LE LI LS KT MK NE OX PL YO)
58
+ # Can't remember any othes at the moment
59
+ number_1 = rand(100).to_s
60
+ number_2 = rand(100).to_s
61
+ # Easier way to do this?
62
+ letters = ("AA".."ZZ").to_a.rand
63
+
64
+ return "#{post_towns.rand}#{number_1} #{number_2}#{letters}"
65
+ end
66
+
67
+ # from technoweenie: http://svn.techno-weenie.net/projects/plugins/us_states/lib/us_states.rb
68
+ @@us_states = [["Alaska", "AK"], ["Alabama", "AL"], ["Arkansas", "AR"], ["Arizona", "AZ"],
69
+ ["California", "CA"], ["Colorado", "CO"], ["Connecticut", "CT"], ["District of Columbia", "DC"],
70
+ ["Delaware", "DE"], ["Florida", "FL"], ["Georgia", "GA"], ["Hawaii", "HI"], ["Iowa", "IA"],
71
+ ["Idaho", "ID"], ["Illinois", "IL"], ["Indiana", "IN"], ["Kansas", "KS"], ["Kentucky", "KY"],
72
+ ["Louisiana", "LA"], ["Massachusetts", "MA"], ["Maryland", "MD"], ["Maine", "ME"], ["Michigan", "MI"],
73
+ ["Minnesota", "MN"], ["Missouri", "MO"], ["Mississippi", "MS"], ["Montana", "MT"], ["North Carolina", "NC"],
74
+ ["North Dakota", "ND"], ["Nebraska", "NE"], ["New Hampshire", "NH"], ["New Jersey", "NJ"],
75
+ ["New Mexico", "NM"], ["Nevada", "NV"], ["New York", "NY"], ["Ohio", "OH"], ["Oklahoma", "OK"],
76
+ ["Oregon", "OR"], ["Pennsylvania", "PA"], ["Rhode Island", "RI"], ["South Carolina", "SC"], ["South Dakota", "SD"],
77
+ ["Tennessee", "TN"], ["Texas", "TX"], ["Utah", "UT"], ["Virginia", "VA"], ["Vermont", "VT"],
78
+ ["Washington", "WA"], ["Wisconsin", "WI"], ["West Virginia", "WV"], ["Wyoming", "WY"]]
79
+
80
+ # Returns a state 2-character abbreviation
81
+ # Random.state = "IL"
82
+
83
+ def state
84
+ @@us_states.rand[1]
85
+ end
86
+
87
+ # Returns a full state name
88
+ #Random.state_full = "Texas"
89
+
90
+ def state_full
91
+ @@us_states.rand[0]
92
+ end
93
+
94
+ # from http://siteresources.worldbank.org/DATASTATISTICS/Resources/CLASS.XLS
95
+ @@countries = ["Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra", "Angola", "Antigua and Barbuda", "Argentina", "Armenia", "Aruba", "Australia",
96
+ "Austria", "Azerbaijan", "Bahamas, The", "Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium", "Belize", "Benin", "Bermuda", "Bhutan",
97
+ "Bolivia", "Bosnia and Herzegovina", "Botswana", "Brazil", "Brunei Darussalam", "Bulgaria", "Burkina Faso", "Burundi", "Cambodia", "Cameroon",
98
+ "Canada", "Cape Verde", "Cayman Islands", "Central African Republic", "Chad", "Channel Islands", "Chile", "China", "Colombia", "Comoros", "Congo, Dem. Rep.",
99
+ "Congo, Rep.", "Costa Rica", "Côte d'Ivoire", "Croatia", "Cuba", "Cyprus", "Czech Republic", "Denmark", "Djibouti", "Dominica", "Dominican Republic", "Ecuador",
100
+ "Egypt, Arab Rep.", "El Salvador", "Equatorial Guinea", "Eritrea", "Estonia", "Ethiopia", "Faeroe Islands", "Fiji", "Finland", "France", "French Polynesia",
101
+ "Gabon", "Gambia, The", "Georgia", "Germany", "Ghana", "Greece", "Greenland", "Grenada", "Guam", "Guatemala", "Guinea", "Guinea-Bissau", "Guyana", "Haiti",
102
+ "Honduras", "Hong Kong, China", "Hungary", "Iceland", "India", "Indonesia", "Iran, Islamic Rep.", "Iraq", "Ireland", "Isle of Man", "Israel", "Italy", "Jamaica",
103
+ "Japan", "Jordan", "Kazakhstan", "Kenya", "Kiribati", "Korea, Dem. Rep.", "Korea, Rep.", "Kuwait", "Kyrgyz Republic", "Lao PDR", "Latvia", "Lebanon", "Lesotho",
104
+ "Liberia", "Libya", "Liechtenstein", "Lithuania", "Luxembourg", "Macao, China", "Macedonia, FYR", "Madagascar", "Malawi", "Malaysia", "Maldives", "Mali", "Malta",
105
+ "Marshall Islands", "Mauritania", "Mauritius", "Mayotte", "Mexico", "Micronesia, Fed. Sts.", "Moldova", "Monaco", "Mongolia", "Montenegro", "Morocco",
106
+ "Mozambique", "Myanmar", "Namibia", "Nepal", "Netherlands", "Netherlands Antilles", "New Caledonia", "New Zealand", "Nicaragua", "Niger", "Nigeria",
107
+ "Northern Mariana Islands", "Norway", "Oman", "Pakistan", "Palau", "Panama", "Papua New Guinea", "Paraguay", "Peru", "Philippines", "Poland", "Portugal",
108
+ "Puerto Rico", "Qatar", "Romania", "Russian Federation", "Rwanda", "Samoa", "San Marino", "São Tomé and Principe", "Saudi Arabia", "Senegal", "Serbia",
109
+ "Seychelles", "Sierra Leone", "Singapore", "Slovak Republic", "Slovenia", "Solomon Islands", "Somalia", "South Africa", "Spain", "Sri Lanka", "St. Kitts and Nevis",
110
+ "St. Lucia", "St. Vincent and the Grenadines", "Sudan", "Suriname", "Swaziland", "Sweden", "Switzerland", "Syrian Arab Republic", "Tajikistan", "Tanzania", "Thailand",
111
+ "Timor-Leste", "Togo", "Tonga", "Trinidad and Tobago", "Tunisia", "Turkey", "Turkmenistan", "Uganda", "Ukraine", "United Arab Emirates", "United Kingdom",
112
+ "United States", "Uruguay", "Uzbekistan", "Vanuatu", "Venezuela, RB", "Vietnam", "Virgin Islands (U.S.)", "West Bank and Gaza", "Yemen, Rep.", "Zambia", "Zimbabwe"]
113
+
114
+ # Returns a country name, as listed by the World Bank
115
+ #
116
+ #Random.country = "Kenya"
117
+
118
+ def country
119
+ @@countries.rand
120
+ end
121
+
122
+ @@cities = %w(Midway Mount\ Pleasant Greenwood Franklin Oak Grove Centerville Salem Georgetown Fairview Riverside Rotorua Tauranga Whakatane Taupo Wanganui
123
+ Nababeep Aggeneys Pofadder Polokwane Bela Bela Goukamma Karatara Tswane Prieska Upington Hoopstad Bultfontein Wesselsbron Bothaville Trompsburg
124
+ Henneman Musina Ogies Kgatlahong Tembisa Tekoza Sebokeng Muntaung Umnkomaaz)
125
+
126
+ # Returns a generic city name, with an attempt to have some internationl appeal
127
+ #
128
+ # Random.city = "Tekoza"
129
+
130
+ def city
131
+ @@cities.rand
132
+ end
133
+ end
134
+ end