random_data 1.1.0 → 1.2.0

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 CHANGED
@@ -1,17 +1,21 @@
1
- == 1.1.0 2007-10-20
1
+ == 1.2.0 2007-09-17
2
2
 
3
- * 1 minor feature added by Hugh Sasse:
4
- * Separate methods for generating random male first names and random female first names
3
+ Thanks to Paul Barry and Hugh Sasse for some awesome patches!
5
4
 
6
- * 2 minor fix:
7
- * Names are alphabetized
8
- * More names added
5
+ * 1 major enhancement:
6
+ * 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)
7
+ * added Random.date_between method to get a date between 2 given dates (Paul Barry)
8
+ * added Random.boolean method to get a random true or false (Paul Barry)
9
+ * added Random.number to get a random number less than a number or within a given range (Paul Barry)
9
10
 
10
- == 1.0.2 2007-09-17
11
+ * 1 minor enhancement:
12
+ * 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)
11
13
 
12
14
  * 1 minor fix:
13
- * Not finding lib files properly, now fixed
14
-
15
+ * Location sources organized into more understandable categories, for easier future expansion (Hugh Sasse)
16
+ * Fixed path of require statements in random_data.rb (Paul Barry)
17
+ * 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)
18
+
15
19
  == 1.0.1 2007-09-17
16
20
 
17
21
  * 1 minor fix:
data/README.txt CHANGED
@@ -1,4 +1,4 @@
1
- = RandomData
1
+ = Random
2
2
 
3
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
4
 
@@ -26,7 +26,7 @@ Random.date
26
26
  Random.address_line_1, Random.address_line_2, Random.zipcode, Random.state, Random.country, Random.city,
27
27
 
28
28
  === Name Methods
29
- Random.firstname, Random.firstname_male, Random.firstname_female, Random.initial, Random.lastname
29
+ Random.firstname, Random.initial, Random.lastname,
30
30
 
31
31
  === Text Methods
32
32
  Random.alphanumeric, Random.paragraphs
@@ -6,15 +6,41 @@ module RandomData
6
6
 
7
7
  module Dates
8
8
 
9
- # Returns a date within a specified range of days (plus or minus half what you specify). The default is ten days, so by default you will
10
- # get a date within plus or minus five days of today.
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
11
14
  #
12
15
  # Example:
13
16
  #
14
- # >> Random.date.to_s = "2007-09-16"
15
-
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
+ #
16
21
  def date(dayrange=10)
17
- (Date.today + (rand(dayrange*2) - dayrange))
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)
18
44
  end
19
45
 
20
46
  end
@@ -4,8 +4,14 @@ module RandomData
4
4
 
5
5
  module Locations
6
6
 
7
- @@streetnames = %w( Park Washington Maple Oak Lincoln Walnut Elm Jefferson Highland Madison Pine Cedar Sunset Jackson Franklin Willow 3rd Wilson 2nd Laurel
8
- 5th Chestnut 4th Adams Virginia Linden Woodland Cherry Rose 1st)
7
+
8
+ trees = %w( Acacia Beech Birch Cedar Cherry Chestnut Elm Larch Laurel
9
+ Linden Maple Oak Pine Rose Walnut Willow)
10
+ people = %w( Adams Franklin Jackson Jefferson Lincoln
11
+ Madison Washington Wilson)
12
+ places = %w( Highland Hill Park Woodland Sunset Virginia)
13
+ numbers = %w( 1st 2nd 4th 5th )
14
+ @@streetnames = trees + people + places + numbers
9
15
 
10
16
  @@street_types = %w(St Ave Rd Blvd Trl Ter Rdg Pl Pkwy Ct Circle)
11
17
 
@@ -103,4 +109,4 @@ module RandomData
103
109
  @@cities.rand
104
110
  end
105
111
  end
106
- end
112
+ end
@@ -6,25 +6,12 @@ module RandomData
6
6
  # Returns a random letter
7
7
 
8
8
  def initial
9
-
10
- choice = rand(26) + 66
11
-
12
- if choice == 91
13
- return nil
14
- else
15
- return choice.chr
16
- end
17
-
9
+ ('A'..'Z').to_a.rand
18
10
  end
19
11
 
20
12
 
21
- @@lastnames = %w(ABEL ANDERSON ANDREWS ANTHONY BAKER BROWN
22
- BURROWS CLARK CLARKE CLARKSON DAVIDSON DAVIES DAVIS DENT EDWARDS GARCIA
23
- GRANT HALL HARRIS HARRISON JACKSON JEFFRIES JEFFERSON JOHNSON JONES
24
- KIRBY KIRK LAKE LEE LEWIS MARTIN MARTINEZ MAJOR MILLER MOORE OATES
25
- PETERS PETERSON ROBERTSON ROBINSON RODRIGUEZ SMITH SMYTHE STEVENS
26
- TAYLOR THATCHER THOMAS THOMPSON WALKER WASHINGTON WHITE WILLIAMS
27
- WILSON YORKE)
13
+ @@lastnames = %w( SMITH JOHNSON WILLIAMS JONES BROWN DAVIS MILLER WILSON MOORE TAYLOR ANDERSON THOMAS JACKSON WHITE HARRIS MARTIN THOMPSON GARCIA MARTINEZ
14
+ ROBINSON CLARK RODRIGUEZ LEWIS LEE WALKER )
28
15
 
29
16
  # Returns a random lastname
30
17
  #
@@ -36,50 +23,18 @@ WILSON YORKE)
36
23
  @@lastnames.rand.capitalize
37
24
  end
38
25
 
39
- @@male_first_names = %w(ADAM ANTHONY ARTHUR BRIAN CHARLES
40
- CHRISTOPHER DANIEL DAVID DONALD EDGAR EDWARD EDWIN GEORGE HAROLD
41
- HERBERT HUGH JAMES JASON JOHN JOSEPH KENNETH KEVIN MARCUS MARK
42
- MATTHEW MICHAEL PAUL PHILIP RICHARD ROBERT ROGER RONALD SIMON
43
- STEVEN TERRY THOMAS WILLIAM)
44
- @@female_first_names = %w(ALISON ANN ANNA ANNE BARBARA BETTY BERYL
45
- CAROL CHARLOTTE CHERYL DEBORAH DIANA DONNA DOROTHY ELIZABETH EVE FELICITY
46
- FIONA HELEN HELENA JENNIFER JESSICA JUDITH KAREN KIMBERLY LAURA LINDA
47
- LISA LUCY MARGARET MARIA MARY MICHELLE NANCY PATRICIA POLLY ROBYN RUTH
48
- SANDRA SARAH SHARON SUSAN TABITHA URSULA VICTORIA WENDY)
49
-
50
- @@first_names = @@male_first_names + @@female_first_names
26
+ @@firstnames = %w(JAMES JOHN ROBERT MICHAEL WILLIAM DAVID RICHARD CHARLES JOSEPH THOMAS CHRISTOPHER DANIEL PAUL MARK DONALD GEORGE KENNETH STEVEN EDWARD BRIAN
27
+ RONALD ANTHONY KEVIN JASON MARY PATRICIA LINDA BARBARA ELIZABETH JENNIFER MARIA SUSAN MARGARET DOROTHY LISA NANCY KAREN BETTY HELEN SANDRA
28
+ DONNA CAROL RUTH SHARON MICHELLE LAURA SARAH KIMBERLY DEBORAH)
51
29
 
52
-
53
- # Returns a random firstname, male or female
30
+ # Returns a random firstname
54
31
  #
55
32
  # >> Random.firstname
56
33
  #
57
34
  # "Sandra"
58
35
 
59
36
  def firstname
60
- @@first_names.rand.capitalize
61
- end
62
-
63
-
64
- # Returns a random male firstname
65
- #
66
- # >> Random.firstname_male
67
- #
68
- # "James"
69
-
70
- def firstname_male
71
- @@male_first_names.rand.capitalize
72
- end
73
-
74
-
75
- # Returns a random female firstname
76
- #
77
- # >> Random.firstname_female
78
- #
79
- # "Mary"
80
-
81
- def firstname_female
82
- @@female_first_names.rand.capitalize
37
+ @@firstnames.rand.capitalize
83
38
  end
84
39
 
85
40
  end
@@ -1,7 +1,7 @@
1
1
  module RandomData #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 1
4
- MINOR = 1
4
+ MINOR = 2
5
5
  TINY = 0
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
data/lib/random_data.rb CHANGED
@@ -1,16 +1,47 @@
1
1
  $:.unshift File.dirname(__FILE__)
2
2
 
3
3
  require 'random_data/array_randomizer'
4
+ require 'random_data/booleans'
4
5
  require 'random_data/contact_info'
5
6
  require 'random_data/dates'
6
7
  require 'random_data/locations'
7
8
  require 'random_data/names'
9
+ require 'random_data/numbers'
8
10
  require 'random_data/text'
9
11
 
10
12
  class Random
13
+ extend RandomData::Booleans
11
14
  extend RandomData::ContactInfo
12
15
  extend RandomData::Dates
13
16
  extend RandomData::Locations
14
17
  extend RandomData::Names
18
+ extend RandomData::Numbers
15
19
  extend RandomData::Text
16
- end
20
+
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
+ # Will also search your load path for the file. Raises an error if it can't find the file.
23
+
24
+ def self.method_missing(methodname)
25
+ thing = "#{methodname}.dat"
26
+ filename = find_path(thing)
27
+
28
+ if filename.nil?
29
+ super
30
+ else
31
+ array = []
32
+ File.open(filename, 'r') { |f| array = f.read.split(/[\r\n]+/) }
33
+ return array.rand
34
+ end
35
+ end
36
+
37
+ private
38
+
39
+ def self.find_path(filename)
40
+ $:.each do |path|
41
+ new_path = File.join(path,filename)
42
+ return new_path if File.exist?(new_path)
43
+ end
44
+ return nil
45
+ end
46
+
47
+ end
@@ -16,7 +16,7 @@ class TestRandomData < Test::Unit::TestCase
16
16
  end
17
17
 
18
18
  def test_should_return_random_email
19
- assert_equal "jjones@webmail.com", Random.email
19
+ assert_equal "iwalker@webmail.com", Random.email
20
20
  end
21
21
 
22
22
  def test_should_return_random_date
@@ -30,7 +30,7 @@ class TestRandomData < Test::Unit::TestCase
30
30
  end
31
31
 
32
32
  def test_should_return_random_address_line_1
33
- assert_equal "38408 Virginia Blvd", Random.address_line_1
33
+ assert_equal "38408 Highland Blvd", Random.address_line_1
34
34
  end
35
35
 
36
36
  def test_should_return_random_address_line_2
@@ -58,23 +58,15 @@ class TestRandomData < Test::Unit::TestCase
58
58
  end
59
59
 
60
60
  def test_should_return_random_firstname
61
- assert_equal "Donald", Random.firstname
62
- end
63
-
64
- def test_should_return_random_firstname_male
65
- assert_equal "Donald", Random.firstname_male
66
- end
67
-
68
- def test_should_return_random_firstname_female
69
- assert_equal "Charlotte", Random.firstname_female
61
+ assert_equal "Joseph", Random.firstname
70
62
  end
71
63
 
72
64
  def test_should_return_random_initial
73
- assert_equal "J", Random.initial
65
+ assert_equal "I", Random.initial
74
66
  end
75
67
 
76
68
  def test_should_return_random_lastname
77
- assert_equal "Clarke", Random.lastname
69
+ assert_equal "Moore", Random.lastname
78
70
  end
79
71
 
80
72
  def test_should_return_random_alphanumeric
@@ -94,4 +86,101 @@ class TestRandomData < Test::Unit::TestCase
94
86
  assert_equal num_paragraphs, Random.paragraphs(num_paragraphs).scan(/\n\n/).size
95
87
  end
96
88
 
89
+ def test_initial_should_not_return_nil
90
+ srand(11) #This would force the nil case in the old implementation
91
+ assert_not_nil Random.initial
92
+ end
93
+
94
+ def test_should_return_random_date_using_range
95
+ Date.expects(:today).returns(Date.civil(2007,9,15))
96
+ assert_equal '1998-03-30', Random.date(-5000..-1000).to_s
97
+ end
98
+
99
+ def test_should_return_random_date_between_using_range_of_dates
100
+ min = Date.parse('1966-11-15')
101
+ max = Date.parse('1990-01-01')
102
+ assert_equal '1982-04-25', Random.date_between(min..max).to_s
103
+ end
104
+
105
+ def test_should_return_random_date_between_using_range_of_strings
106
+ assert_equal '1982-04-25', Random.date_between('1966-11-15'..'1990-01-01').to_s
107
+ end
108
+
109
+ def test_should_return_random_boolean_true
110
+ srand(99)
111
+ assert_equal true, Random.boolean
112
+ end
113
+
114
+ def test_should_return_random_boolean_false
115
+ assert_equal false, Random.boolean
116
+ end
117
+
118
+ def test_should_return_random_number_less_than_10
119
+ assert_equal 8, Random.number(9)
120
+ end
121
+
122
+ def test_should_return_random_number_within_range
123
+ assert_equal 13, Random.number(5..15)
124
+ end
125
+
126
+ end
127
+
128
+ class TestRandomDataMethodMissing < Test::Unit::TestCase
129
+
130
+ def sports
131
+ @sports ||= %w(hockey basketball water\ polo five-a-side football judo pole\ vault steeple\ chase)
132
+ end
133
+
134
+ def lines
135
+ @lines ||= sports.join("\r\n")
136
+ end
137
+
138
+ def path
139
+ @path ||= File.join("lib","sport.dat")
140
+ end
141
+
142
+ def setup
143
+ @file = stub('file', :read => lines)
144
+ $:.stubs(:each).yields("lib")
145
+ File.stubs(:exist?).returns(true)
146
+ File.stubs(:open).yields(@file)
147
+ end
148
+
149
+ def test_should_search_load_path_for_file
150
+ $:.expects(:each).yields("lib")
151
+ Random.sport
152
+ end
153
+
154
+ def test_should_join_path_with_methodname_dot_dat
155
+ File.expects(:join).with("lib","sport.dat").returns("lib/sport.dat")
156
+ Random.sport
157
+ end
158
+
159
+ def test_should_test_for_existence_of_filename_matching_method_missing_call
160
+ File.expects(:exist?).with(path).returns(true)
161
+ Random.sport
162
+ end
163
+
164
+ def test_should_call_super_if_unable_to_find_file
165
+ # can't test super call directly, so we test whether MethodMissing gets raised properly
166
+ File.stubs(:exist?).returns(false)
167
+ assert_raise(NoMethodError) { Random.horse }
168
+ end
169
+
170
+ def test_should_open_file_matching_method_missing_call
171
+ File.expects(:open).with(path,"r").yields(@file)
172
+ Random.sport
173
+ end
174
+
175
+ def test_should_read_lines_from_file
176
+ @file.expects(:read).returns(@lines)
177
+ Random.sport
178
+ end
179
+
180
+ def test_should_return_random_line_from_a_file
181
+ srand(101)
182
+ assert_equal 'steeple chase', Random.sport
183
+ assert_equal 'five-a-side', Random.sport
184
+ end
185
+
97
186
  end
metadata CHANGED
@@ -1,33 +1,30 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.4
3
- specification_version: 1
4
2
  name: random_data
5
3
  version: !ruby/object:Gem::Version
6
- version: 1.1.0
7
- date: 2007-10-20 00:00:00 -04:00
8
- 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.
9
- require_paths:
10
- - lib
11
- email: mike@subelsky.com
12
- homepage: http://random-data.rubyforge.org
13
- rubyforge_project: random-data
14
- description: 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.
15
- autorequire:
16
- default_executable:
17
- bindir: bin
18
- has_rdoc: true
19
- required_ruby_version: !ruby/object:Gem::Version::Requirement
20
- requirements:
21
- - - ">"
22
- - !ruby/object:Gem::Version
23
- version: 0.0.0
24
- version:
25
- platform: ruby
26
- signing_key:
27
- cert_chain:
28
- post_install_message:
4
+ version: 1.2.0
5
+ platform: ""
29
6
  authors:
30
7
  - Mike Subelsky
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2007-11-29 00:00:00 -05:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: 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.
17
+ email: mike@subelsky.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - History.txt
24
+ - License.txt
25
+ - Manifest.txt
26
+ - README.txt
27
+ - website/index.txt
31
28
  files:
32
29
  - History.txt
33
30
  - License.txt
@@ -59,23 +56,33 @@ files:
59
56
  - website/javascripts/rounded_corners_lite.inc.js
60
57
  - website/stylesheets/screen.css
61
58
  - website/template.rhtml
62
- test_files:
63
- - test/test_helper.rb
64
- - test/test_random_data.rb
59
+ has_rdoc: true
60
+ homepage: http://random-data.rubyforge.org
61
+ post_install_message:
65
62
  rdoc_options:
66
63
  - --main
67
64
  - README.txt
68
- extra_rdoc_files:
69
- - History.txt
70
- - License.txt
71
- - Manifest.txt
72
- - README.txt
73
- - website/index.txt
74
- executables: []
75
-
76
- extensions: []
77
-
65
+ require_paths:
66
+ - lib
67
+ required_ruby_version: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: "0"
72
+ version:
73
+ required_rubygems_version: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: "0"
78
+ version:
78
79
  requirements: []
79
80
 
80
- dependencies: []
81
-
81
+ rubyforge_project: random-data
82
+ rubygems_version: 0.9.5
83
+ signing_key:
84
+ specification_version: 2
85
+ 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.
86
+ test_files:
87
+ - test/test_helper.rb
88
+ - test/test_random_data.rb