class Rubots::StrategyLoader

Public Class Methods

default_lineup() click to toggle source
# File lib/rubots/strategy_loader.rb, line 9
def self.default_lineup
  [ Samples::Rotator, Samples::SittingDuck, Samples::TargetFinder,
    Samples::Artillery ]
end
load(params) click to toggle source
# File lib/rubots/strategy_loader.rb, line 3
def self.load(params)
  return default_lineup unless params.any?

  params.map { |p| new(p).strategy_class }.flatten
end
new(name) click to toggle source
# File lib/rubots/strategy_loader.rb, line 14
def initialize(name)
  @name = name
end

Public Instance Methods

strategy_class() click to toggle source
# File lib/rubots/strategy_loader.rb, line 18
def strategy_class
  if is_multiple?
    multiple_classes
  elsif is_sample?
    sample_class
  else
    class_from_file
  end
end

Private Instance Methods

camelize(term) click to toggle source
# File lib/rubots/strategy_loader.rb, line 54
def camelize(term)
  string = term.to_s
  string = string.sub(/^[a-z\d]*/) { $&.capitalize }
  string.gsub!(/(?:_|(\/))([a-z\d]*)/i) { "#{$1}#{$2.capitalize}" }
  string.gsub!('/', '::')
  string
end
class_from_file() click to toggle source
# File lib/rubots/strategy_loader.rb, line 39
def class_from_file
  load @name

  class_name = camelize(File.basename(@name, ".rb"))
  Rubots.const_get(class_name)
end
is_multiple?() click to toggle source
# File lib/rubots/strategy_loader.rb, line 30
def is_multiple?
  @name.match(/^[0-9]+\*/)
end
is_sample?() click to toggle source
# File lib/rubots/strategy_loader.rb, line 46
def is_sample?
  @name.match /^sample:/
end
multiple_classes() click to toggle source
# File lib/rubots/strategy_loader.rb, line 34
def multiple_classes
  parts = @name.split('*', 2)
  [StrategyLoader.new(parts[1]).strategy_class] * parts[0].to_i
end
sample_class() click to toggle source
# File lib/rubots/strategy_loader.rb, line 50
def sample_class
  Samples.const_get(camelize(@name.split(':').last))
end