Module: Flores::Random
- Defined in:
- lib/flores/random.rb
Overview
A collection of methods intended for use in randomized testing.
Constant Summary collapse
- CHARACTERS =
A selection of UTF-8 characters
I’d love to generate this, but I don’t yet know enough about how unicode blocks are allocated to do that. For now, hardcode a set of possible characters.
[ # Basic Latin *(32..126).map(&:chr), # hand-selected CJK Unified Ideographs Extension A "㐤", "㐨", "㐻", "㑐", # hand-selected Hebrew "א", "ב", "ג", "ד", "ה", # hand-selected Cyrillic "Є", "Б", "Р", "н", "я" ]
Class Method Summary collapse
-
.character ⇒ String
Generates a random character (A string of length 1).
-
.integer(range) ⇒ Object
Return a random integer value within a given range.
-
.iterations(range, &block) ⇒ Object
Run a block a random number of times.
-
.number(range) ⇒ Object
Return a random number within a given range.
-
.text(length) ⇒ String
Generates text with random characters of a given length (or within a length range).
-
.text_range(range) ⇒ String
Generate text with random characters of a length within the given range.
Class Method Details
.character ⇒ String
Generates a random character (A string of length 1)
68 69 70 |
# File 'lib/flores/random.rb', line 68 def self.character return CHARACTERS[integer(0...CHARACTERS.length)] end |
.integer(range) ⇒ Object
Return a random integer value within a given range.
75 76 77 78 |
# File 'lib/flores/random.rb', line 75 def self.integer(range) raise ArgumentError, "Range not given, got #{range.class}: #{range.inspect}" if !range.is_a?(Range) rand(range) end |
.iterations(range, &block) ⇒ Object
Run a block a random number of times.
93 94 95 96 97 98 99 100 101 |
# File 'lib/flores/random.rb', line 93 def self.iterations(range, &block) range = 0..range if range.is_a?(Numeric) if block_given? integer(range).times(&block) nil else integer(range).times end end |
.number(range) ⇒ Object
Return a random number within a given range.
83 84 85 86 87 88 |
# File 'lib/flores/random.rb', line 83 def self.number(range) raise ArgumentError, "Range not given, got #{range.class}: #{range.inspect}" if !range.is_a?(Range) # Ruby 1.9.3 and below do not have Enumerable#size, so we have to compute the size of the range # ourselves. rand * (range.end - range.begin) + range.begin end |
.text(length) ⇒ String
Generates text with random characters of a given length (or within a length range)
-
The length can be a number or a range ‘x..y`. If a range, it must be ascending (x < y)
-
Negative lengths are not permitted and will raise an ArgumentError
48 49 50 51 52 53 |
# File 'lib/flores/random.rb', line 48 def self.text(length) return text_range(length) if length.is_a?(Range) raise ArgumentError, "A negative length is not permitted, I received #{length}" if length < 0 length.times.collect { character }.join end |
.text_range(range) ⇒ String
Generate text with random characters of a length within the given range.
59 60 61 62 63 |
# File 'lib/flores/random.rb', line 59 def self.text_range(range) raise ArgumentError, "Requires ascending range, you gave #{range}." if range.end < range.begin raise ArgumentError, "A negative range values are not permitted, I received range #{range}" if range.begin < 0 text(integer(range)) end |