Module: Vydumschik::Lorem

Defined in:
lib/vydumschik/lorem.rb

Overview

This module generate lipsum-like russian pseudosentences.

Warning! To avoid using ActiveSupport for multibyte support, or anything similar, I just assume that all russian chars are 2-byte (as in UTF8) and that I always get a russian char when I ask for one.

Constant Summary collapse

WORD_LIMITS =

Word length

[2, 10]
SENTENCE_LIMITS =

Sentence length, in words

[5, 10]
PARA_LIMITS =

Paragraph length, in sentences

[5, 10]
CONSONANTS =

Russian consonants

%w(б в г д ж з й к л м н п р с т ф х ц ч ш щ)
VOWELS =

Russian vowels

%w(а е ё и о у ы э ю я)
CONSONANTS_NORMALIZED =

Consonants, normalized by character frequency

%w(б б б б б б б б б б б б б б б б б б б в в в в в в в в в в в в в в в в в в в в в в в в в в в в в в в в в в в в в в в в в в в в в в в в г г г г г г г г г г г г г г г г г г г д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д д ж ж ж ж ж ж ж ж ж ж ж ж з з з з з з з з з з з з з з з з з з й й й й й й й й й й й к к к к к к к к к к к к к к к к к к к к к к к к к к к к к к к к к к к к л л л л л л л л л л л л л л л л л л л л л л л л л л л л л л л л л л л л л л л л л л л л л л л л л л л л л л м м м м м м м м м м м м м м м м м м м м м м м м м м м м м м м м н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н н п п п п п п п п п п п п п п п п п п п п п п п п п п р р р р р р р р р р р р р р р р р р р р р р р р р р р р р р р р р р р р р р р р р р р р р с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с с т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т т ф х х х х х х х х ц ц ц ч ч ч ч ч ч ч ч ч ч ч ч ч ч ч ч ч ч ш ш ш ш ш ш ш ш ш щ щ щ)
VOWELS_NORMALIZED =

Vowels, normalized by character frequency

%w(а а а а а а а а а а а а а а а а а а а а а а а а а а а а е е е е е е е е е е е е е е е е е е е е е е е е е е е е е е е и и и и и и и и и и и и и и и и и и и и и и о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о о у у у у у у у у у ы ы ы ы ы ы э ю ю я я я я я я я)

Class Method Summary collapse

Class Method Details

.paragraphObject

Returns a random paragraph



67
68
69
70
71
72
73
# File 'lib/vydumschik/lorem.rb', line 67

def self.paragraph
  sentences = []
  random_length(PARA_LIMITS).times do
    sentences << sentence
  end
  sentences.join(' ')
end

.sentenceObject

Returns a random sentence



57
58
59
60
61
62
63
64
# File 'lib/vydumschik/lorem.rb', line 57

def self.sentence
  last_word = nil
  sentence = []
  random_length(SENTENCE_LIMITS).times do
    sentence << word(last_word)
  end
  capitalize_ru(sentence.join(' ')) + '.'
end

.word(previous_word = nil) ⇒ Object

Returns a random word. Passing a previous word affects the first character



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/vydumschik/lorem.rb', line 36

def self.word(previous_word=nil)
  if previous_word
    last_char = previous_word[-2,2]
    if CONSONANTS.include?(last_char)
      next_char = VOWELS_NORMALIZED
    else
      next_char = CONSONANTS_NORMALIZED
    end
  else
    next_char = rand>0.5 ? CONSONANTS_NORMALIZED : VOWELS_NORMALIZED
  end
  word = ''
  random_length(WORD_LIMITS).times do
    word << next_char[rand next_char.length]
    next_char = next_char===CONSONANTS_NORMALIZED ? VOWELS_NORMALIZED : CONSONANTS_NORMALIZED
  end

  word
end