random_data 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
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