Module: OpenString::ClassMethods
- Included in:
- String
- Defined in:
- lib/open_string.rb
Overview
Methods meant to be members of the String class need to go in here. The machinery here is a little odd: since the randomize declaration isn’t prefaced with a self, it doesn’t look static. Once String is set to extend OpenInteger::ClassMethods, this is treated like a static String method.
If this inner module wasn’t created and, instead, String was set to include OpenString, consumers would need to call static methods via OpenString like so: OpenString.randomize(10, CharacterSets.all).
Instance Method Summary collapse
-
#randomize(length, *charsets) ⇒ Object
Public: Generates a randomized string of a length specified by
length.
Instance Method Details
#randomize(length, *charsets) ⇒ Object
Public: Generates a randomized string of a length specified by length.
length-
The number of characters to include in the string
- *charsets
-
Arrays of character sets to use in generating the random
string. This can take array literals, variables, or constants. Some
character sets are predefined in test/support/character_sets.rb
:section: Examples # Generates a 10-character string using only lowercase letters str = String.randomize(10, CharacterSets.lowercase)
# Generates a 5-character string using only [‘a’, ‘s’, ‘d’, ‘1’, ‘2’, ‘3’] str = String.randomize(5, %w(a s d 1 2 3))
40 41 42 43 44 45 46 47 48 49 |
# File 'lib/open_string.rb', line 40 def randomize(length, *charsets) raise(ArgumentError, 'Do not pass nil for length.') if length.nil? raise(ArgumentError, 'Length must be a non-zero positive integer.') if length < 1 raise(ArgumentError, 'Specify a character set.') if charsets.empty? Array.new(length) { charsets.flatten.sample }.join end |