joelhelbling/stepladder

View on GitHub
lib/stepladder/roster.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Stepladder
  module Roster
    class << self
      def [](gang)
        RosterizedGang.new(gang)
      end
    end
  end

  class RosterizedGang
    attr_reader :gang

    def initialize(gang)
      @gang = gang
    end

    def workers
      gang.workers
    end

    def push(worker)
      if worker
        worker.supply = workers.last
        workers << worker
      end
    end
    alias_method :"<<", :push

    def pop
      gang.workers.pop.tap do |popped|
        popped.supply = nil
      end
    end

    def shift
      workers.shift.tap do
        workers.first.supply = nil
      end
    end

    def unshift(worker)
      workers.first.supply = worker
      workers.unshift worker
    end
  end
end