1
0
Fork 0
mirror of https://github.com/pry/pry.git synced 2022-11-09 12:35:05 -05:00
pry--pry/lib/pry/testable/evalable.rb
r-obert 4391aa863e
add Pry::Testable, and friends. (#1679)
* 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
2017-11-04 05:32:31 +01:00

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