Sha256: 6fb590437f49dd4c6f2fe392684d687ea1e1e35cd0485bf11865da7d4da6d17a

Contents?: true

Size: 1.42 KB

Versions: 1

Compression:

Stored size: 1.42 KB

Contents

module Rlottery

  class Lottery

    attr_accessor :rule_set

    def initialize(args)
      [:participants, :slots].each do |attr|
        raise(ArgumentError, "Must supply #{attr}") unless args.has_key?(attr)
      end
      self.participants = args[:participants]
      self.slots  = args[:slots]
      rule_set_klass   = args[:rule_set]
      rule_set_klass ||= Rlottery::RuleSet::BaseRuleSet
      @rule_set = rule_set_klass.new(
          :participants => self.participants,
          :slots => self.slots
      )
    end

    def run!
      @rule_set.run!
    end

    def participants
      @participants_list ||= {}
    end

    def slots
      @slots_list ||= {}
    end

    def rule_set
      @rule_set
    end

  protected

    def participants=(participants_list)
      @participants_list ||= {}
      list_init(Participant, participants_list, @participants_list)
    end

    def slots=(slots_list)
      @slots_list ||= {}
      list_init(Slot, slots_list, @slots_list)
    end

    def list_init(item_class, list, store_in)
      unless list.respond_to?(:each)
        raise ArgumentError, "Must supply a list for #{item_class} init."
      end
      list.each do |i|
        if i.kind_of?(String) || i.kind_of?(Symbol)
          item = item_class.new(:identifier => i)
        else
          raise ArgumentError, "Unknown kind of #{item_class}: #{i}."
        end
        store_in[item.identifier] = item
      end
    end

  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
jlindley-rlottery-0.1.2 lib/rlottery/lottery.rb