# vim: set sw=2 ft=perl:
package DBIx::Class::Sims::Random;
use 5.010_001;
use strictures 2;
use base 'Exporter';
our @EXPORT_OK = qw(
random_integer
random_decimal
random_string
random_regex
random_item
random_choice
);
use String::Random ();
sub random_integer {
my ($column, $min, $max) = @_;
return $min if $column->{predictable_values};
return int(rand($max-$min))+$min;
}
sub random_decimal {
my ($column, $min, $max) = @_;
return $min if $column->{predictable_values};
return rand($max-$min)+$min;
}
sub random_string {
my ($column, $pattern, @choices) = @_;
if ( $column->{predictable_values} ) {
no strict;
no warnings 'redefine';
local *{ "String::Random::_rand" } = sub { 0 };
return String::Random::random_string($pattern, @choices);
}
return String::Random::random_string($pattern, @choices);
}
sub random_regex {
my ($column, $template) = @_;
# This is reaching into the guts of String::Random. It may break at any time.
if ( $column->{predictable_values} ) {
no strict;
no warnings 'redefine';
local *{ "String::Random::_rand" } = sub { 0 };
return String::Random::random_regex($template);
}
return String::Random::random_regex($template);
}
sub random_item {
my ($column, $arr) = @_;
return $column->{predictable_values}
? $arr->[0] : $arr->[rand @$arr];
}
sub random_choice {
my ($column, $threshold) = @_;
return $column->{predictable_values}
? 1 : rand() < $threshold;
}
1;
__END__