       
   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()

      _.max(migratedSetAsArray)

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

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

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

  start: ->
    if @isUp() 
      0 
    else 
      index = @currentMigrationIndex()
      if _.isNumber(index)
        index
      else
        0

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