class ContentSpinning
Constants
- SPIN_END
- SPIN_OR
- SPIN_START
Attributes
source[R]
Public Class Methods
new(source)
click to toggle source
# File lib/content_spinning.rb, line 17 def initialize(source) @source = source end
spin(source, limit: nil)
click to toggle source
# File lib/content_spinning.rb, line 11 def spin(source, limit: nil) new(source).spin(limit: limit) end
Public Instance Methods
count()
click to toggle source
# File lib/content_spinning.rb, line 23 def count parse.count end
parse()
click to toggle source
# File lib/content_spinning.rb, line 31 def parse return @root if defined?(@root) heap = [::ContentSpinning::Sentence.new] source.scan(/ [{}|] | [^{}|]+ /x).each do |part| case part when SPIN_START modify_heap_for_spin_start(heap) when SPIN_OR modify_heap_for_spin_or(heap) when SPIN_END modify_heap_for_spin_end(heap) else heap.last << ::ContentSpinning::String.new(part) end end @root = heap.first.cleaned end
spin(limit: nil)
click to toggle source
# File lib/content_spinning.rb, line 52 def spin(limit: nil) if limit && limit < count spin_with_limit(limit: limit) else spin_all end end
spin_all()
click to toggle source
# File lib/content_spinning.rb, line 60 def spin_all parse.spin end
spin_with_limit(limit:)
click to toggle source
# File lib/content_spinning.rb, line 64 def spin_with_limit(limit:) parsed = parse Array.new(limit) { parsed.random } end
to_source()
click to toggle source
# File lib/content_spinning.rb, line 70 def to_source parse.to_source end
Private Instance Methods
modify_heap_for_spin_end(heap)
click to toggle source
# File lib/content_spinning.rb, line 76 def modify_heap_for_spin_end(heap) heap.pop(2) end
modify_heap_for_spin_or(heap)
click to toggle source
# File lib/content_spinning.rb, line 80 def modify_heap_for_spin_or(heap) heap.pop current_spinner = heap.last new_sentence = ::ContentSpinning::Sentence.new current_spinner << new_sentence heap << new_sentence end
modify_heap_for_spin_start(heap)
click to toggle source
# File lib/content_spinning.rb, line 89 def modify_heap_for_spin_start(heap) current = heap.last new_spinner = ::ContentSpinning::Spinner.new current << new_spinner heap << new_spinner new_sentence = ::ContentSpinning::Sentence.new new_spinner << new_sentence heap << new_sentence end