class WordSearch::Generator::Base
Attributes
plane[RW]
positions[RW]
used_coordinates[RW]
word_bank[RW]
Public Class Methods
new(plane, word_bank)
click to toggle source
# File lib/word_search/generator/base.rb, line 15 def initialize(plane, word_bank) @plane = plane @word_bank = word_bank @used_coordinates = [] @positions = {} end
Public Instance Methods
directions()
click to toggle source
# File lib/word_search/generator/base.rb, line 11 def directions raise NotImplementedError end
perform()
click to toggle source
# File lib/word_search/generator/base.rb, line 22 def perform word_bank.each do |word| @positions[word] = place_word(word) end end
Private Instance Methods
place_word(word)
click to toggle source
# File lib/word_search/generator/base.rb, line 30 def place_word(word) placed = false until placed || used_coordinates.uniq.count == plane.total_points placed = position_word(word) end word_bank.errors.add(word, "cannot be placed") if placed.blank? placed end
position_word(word)
click to toggle source
# File lib/word_search/generator/base.rb, line 40 def position_word(word) used_coordinates << (coordinate = random_point) position = false directions.find do |direction| dimension = plane.two_dimensional? ? TwoDimensional : ThreeDimensional position = dimension::PositionWord.new( plane, word, direction, coordinate ).perform end position end
random(number)
click to toggle source
# File lib/word_search/generator/base.rb, line 55 def random(number) SecureRandom.random_number number end
random_point()
click to toggle source
# File lib/word_search/generator/base.rb, line 59 def random_point raise NotImplementedError end