       
   runnable: ->
     start = @start()
-    finish = @finish() + 1
-    runnable = @migrations().slice(start, finish)
+    finish = @finish()
+    migrations = @migrations()
+    runnable = migrations.slice(start, finish)
     runnable = _(runnable)
     if @isUp
       runnable.reject(@ran.bind(@)).value()

      runnable.filter(@ran.bind(@)).value()

  start: ->
    if @isUp() then 0 else (@currentMigrationIndex() || 0)

  finish: ->
    if _.isNumber(@targetMigrationIndex())
      @targetMigrationIndex() - 1
    else
      (@migrations().length - 1)
    
  isUp: ->
    @direction == 'up'

      _.max(migratedSetAsArray)

  currentMigration: ->
    _.detect(@migrations(), (migration)=> parseInt(migration.version()) == parseInt(@currentVersion()))

  currentMigrationIndex: ->
    index = _.indexOf(@migrations(), @currentMigration())
