mirror of
https://github.com/pry/pry.git
synced 2022-11-09 12:35:05 -05:00
4391aa863e
* add Pry::Testable, and friends. This commit replaces lib/pry/test/helper.rb by using category modules. There's now: * Pry::Testable: * Pry::Testable::Evalable * Pry::Testable::Mockable * Pry::Testable::Utility * Pry::Testable::PryTester 'include Pry::Testable' includes all of the above. For the pry test suite it worked out best to include 'Pry::Testable' at the top-level. In plugins I've written though this hasn't been the case, and I only normally need: Pry::Testable::Evalable. So it reduces pollution for the third-party cases, which this code is intended for since it lives within lib/ of the project. What do you think? * breaking change: add set_testenv_variables and unset_testenv_variables * breaking change: add Pry::Testable::Variables, and rename constant_scope() to temporary_constants(). * breaking change: rename inject_var as insert_variable, and move its definition to Pry::Testable::Variables. * include Pry::Testable::Evalable & include Pry::Testable::Variables into the top-level, but keep the other two modules spec-local. * document third argument of insert_variable. * update CHANGELOG.md * note changelog entry is a breaking change * update documentation
15 lines
442 B
Ruby
15 lines
442 B
Ruby
module Pry::Testable::Evalable
|
|
def pry_tester(*args, &block)
|
|
if args.length == 0 || args[0].is_a?(Hash)
|
|
args.unshift(Pry.toplevel_binding)
|
|
end
|
|
Pry::Testable::PryTester.new(*args).tap do |t|
|
|
t.singleton_class.class_eval(&block) if block
|
|
end
|
|
end
|
|
|
|
def pry_eval(*eval_strs)
|
|
b = String === eval_strs.first ? Pry.toplevel_binding : Pry.binding_for(eval_strs.shift)
|
|
pry_tester(b).eval(*eval_strs)
|
|
end
|
|
end
|