Sha256: f724e982c6a5db4af5b77024bd9033b59a4dd1132fc2fc758c985b46c4a39066

Contents?: true

Size: 1.22 KB

Versions: 7

Compression:

Stored size: 1.22 KB

Contents

module PryMoves::Restartable

  attr_accessor :restart_requested, :reload_requested,
    :reload_ruby_scripts, :reloader,
    :reload_rake_tasks

  def restartable context
    trigger :each_new_run, context
    context[:retry] ||= 0
    PryMoves.reloader&.reload if context[:retry] > 0
    yield context
    re_execution # todo: maybe mark restart_request for thread? not globally?
  rescue PryMoves::Restart
    puts "🔄️  Restarting execution"
    PryMoves.reset
    trigger :restart, context
    context[:retry] += 1
    retry
  rescue PryMoves::Reload
    puts "🔮  try to use @ with reload"
    exit 3
  end

  def re_execution
    if restart_requested
      self.restart_requested = false
      raise PryMoves::Restart
    end
    raise PryMoves::Reload if reload_requested
  end

  def reload_sources
    PryMoves.reloader&.reload
  end

end

class PryMoves::Restart < Exception
end
class PryMoves::Reload < Exception
end
RSpec::Support::AllExceptionsExceptOnesWeMustNotRescue::AVOID_RESCUING.concat [PryMoves::Restart, PryMoves::Reload] if defined? RSpec

Pry.config.hooks.add_hook(:after_eval, :exit_on_re_execution) do |_, _, _pry_|
  if PryMoves.restart_requested or PryMoves.reload_requested
    Pry.run_command 'exit-all'
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
pry-moves-1.0.15 lib/pry-moves/restartable.rb
pry-moves-1.0.14 lib/pry-moves/restartable.rb
pry-moves-1.0.13 lib/pry-moves/restartable.rb
pry-moves-1.0.12 lib/pry-moves/restartable.rb
pry-moves-1.0.11 lib/pry-moves/restartable.rb
pry-moves-1.0.10 lib/pry-moves/restartable.rb
pry-moves-1.0.9 lib/pry-moves/restartable.rb