37 lines
637 B
Ruby
37 lines
637 B
Ruby
module Effects
|
|
def self.reverse
|
|
lambda do |words|
|
|
words.split(' ').map(&:reverse).join(' ')
|
|
end
|
|
end
|
|
|
|
def self.echo(rate)
|
|
lambda do |words|
|
|
words.each_char.map { |c| c == ' ' ? c : c * rate }.join
|
|
end
|
|
end
|
|
|
|
def self.loud(level)
|
|
lambda do |words|
|
|
words.split(' ').map { |word| word.upcase + '!' * level }.join(' ')
|
|
end
|
|
end
|
|
end
|
|
|
|
class WordSynth
|
|
def initialize
|
|
@effects = []
|
|
end
|
|
|
|
def add_effect(effect)
|
|
@effects << effect
|
|
end
|
|
|
|
def play(original_words)
|
|
words = original_words
|
|
@effects.each do |effect|
|
|
words = effect.call(words)
|
|
end
|
|
words
|
|
end
|
|
end
|