From: "Victor \"Zverok\" Shepelev" Date: 2007-09-21T19:59:54+09:00 Subject: Re: [ANN] new random_data gem for better development data From: list-bounce@example.com [mailto:list-bounce@example.com] On Behalf Of Mike Subelsky Sent: Friday, September 21, 2007 1:52 AM > >I've released a small 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. >This lets you quickly mock up realistic looking data for informal >testing. > >Instead of: > >>> foo.name = "John Doe" > >You get: > >>> foo.name = "#{Random.firstname} #{Random.initial} #{Random.lastname}" >>> foo.name >=> "Miriam R. Xichuan" > >The gem also includes code for phone numbers, e-mail addresses, physical >addresses, and (primitive) text generation. > >For more details and full documentation, visit: >http://random-data.rubyforge.org/ > Wow! Really, really cool. Two suggestions. 1. I'd like to have it localized (to generate random Russian/Ukrainian names and realistic-looking addresses). I can do it myself, but it'll require you to change internals to allow localizations? 2. Literally yesterday I've also done something for "realistic looking" data, but in numbers and probabilities area (example with students): if probable(0.7) # with 70% probability # student have done nearly 20 right answers student.answer_count = (~20.0).to_i else # with 30% probability # he have done nearly 10 right answers student.answer_count = (~10.0).to_i end Here are two "tricky functions": # probable(pct) returns true with pct probability (or calls block provided) def probable(pct) happened = rand < pct yield if happened && block_given? return happened end # Number#~ read is "nearly" and returns something like number +- 15%: class Numeric LEVEL = 0.3 def ~ self + self * rand(LEVEL) * LEVEL - self* LEVEL/2.0 end end I think, as my "magic" tend to be used in same circumstances as yours, it can be joined into the same gem. V.