Skip to content

make 'Pry::Config::Default' less of a special case by adding Pry::Config::Lazy#1503

Merged
0x1eef merged 9 commits intomasterfrom
pry-lazy
Dec 31, 2015
Merged

make 'Pry::Config::Default' less of a special case by adding Pry::Config::Lazy#1503
0x1eef merged 9 commits intomasterfrom
pry-lazy

Conversation

@0x1eef
Copy link
Copy Markdown
Contributor

@0x1eef 0x1eef commented Dec 28, 2015

adds "Pry::Config::Lazy" to make "Pry::Config::Default" less of a special case and easier to implement your own default without knowing that much internal workings.

@kyrylo
Copy link
Copy Markdown
Member

kyrylo commented Dec 28, 2015

To be honest, I have no idea what's going on here.

@0x1eef
Copy link
Copy Markdown
Contributor Author

0x1eef commented Dec 28, 2015

i donno then.
Pry::Config::Default has been lazy always.
it is usually the last element in a line of elements(_pry_.config => Pry.config => instance of Pry::Config::Default), that's always been usually true too. in the last example _pry_.config and Pry.config are instances of a class who has included the Pry::Config::Behavior module while the instance of Default is different, it includes Behavior and Lazy modules and implements a default set of configuration options are not loaded until they are called indirectly(eg: _pry_.config.input) for the first time. thats general background of how the config works.

the PR makes it easier to implement your own Pry::Config::Default where as before it was harder to do because its implementation was hidden to the outside. if you still dont see whats going on, maybe study how the config works or ask something more specific.

@0x1eef
Copy link
Copy Markdown
Contributor Author

0x1eef commented Dec 28, 2015

maybe its not obvious but the return value from first access is cached as well, that should be obvious from the diff.

@0x1eef
Copy link
Copy Markdown
Contributor Author

0x1eef commented Dec 28, 2015

"lazy always" => "for as long as it wasn't just OpenStruct".

@0x1eef
Copy link
Copy Markdown
Contributor Author

0x1eef commented Dec 28, 2015

final one, lazy default makes sure changing your .pryrc like this:

Pry.configure do |config|
  config.input = AltIO.new
end

wouldn't require readline or try to. same for all the keys you see passed to lazy_implement.

@0x1eef
Copy link
Copy Markdown
Contributor Author

0x1eef commented Dec 29, 2015

@kyrylo let me know when you find the time to review this. i have followup changes to make afterwards but its not that important ("configure_gist" and "configure_history" methods defeat the purpose of lazy loading and should be refactored differently).

Comment thread lib/pry/config/lazy.rb Outdated
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess this can be simplified to LAZY_KEYS = Hash.new { |h, k| h[k] = [] }.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah i think thats more common i updated the PR with the change

@kyrylo
Copy link
Copy Markdown
Member

kyrylo commented Dec 29, 2015

LGTM, but please add at least one test.

@0x1eef
Copy link
Copy Markdown
Contributor Author

0x1eef commented Dec 29, 2015

cool i will add some tests later on

@0x1eef
Copy link
Copy Markdown
Contributor Author

0x1eef commented Dec 31, 2015

should add more tests but im not sure which yet too tired to come up with something better than that right now.

0x1eef pushed a commit that referenced this pull request Dec 31, 2015
make 'Pry::Config::Default' less of a special case by adding Pry::Config::Lazy
@0x1eef 0x1eef merged commit f95d651 into master Dec 31, 2015
@0x1eef 0x1eef deleted the pry-lazy branch December 31, 2015 23:53
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request Mar 14, 2018
pkgsrc change: add support for pkg_alternatives

### HEAD

#### Features

* Add Pry::Testable, an improved modular replacement for PryTestHelpers.
  **breaking change**.

See pull request [#1679](pry/pry#1679).

* Add a new category module: "Pry::Platform". Loosely related to #1668 below.

See pull request [#1670](pry/pry#1670)

* Add `mac_osx?` and `linux?` utility functions to Pry::Helpers::BaseHelpers.

See pull request [#1668](pry/pry#1668).

* Add utility functions for drawing colorised text on a colorised background.

See pull request [#1673](pry/pry#1673).

#### Bug fixes

* Fix a case of infinite recursion in `Pry::Method::WeirdMethodLocator#find_method_in_superclass`
  that users of the [Hanami](http://hanamirb.org/) web framework experienced and
  reported since 2015.

See pull request [#1639](pry/pry#1689).

* Fix a bug where Method objects were not returned for setters inherited
  from a default (Pry::Config::Default). Eg, this is no longer an error:

      pry(main)> d = Pry::Config.from_hash({}, Pry::Config::Default.new)
      pry(main)> d.method(:exception_whitelist=) # Error

See pull request [#1688](pry/pry#1688).

* Do not capture unused Proc objects in Text helper methods `no_color` and `no_paging`,
  for performance reasons. Improve the documentation of both methods.

See pull request [#1691](pry/pry#1691).

* Fix `String#pp` output color.

See pull request [#1674](pry/pry#1674).

### 0.11.0

* Add alias 'whereami[?!]+' for 'whereami' command. ([#1597](pry/pry#1597))
* Improve Ruby 2.4 support ([#1611](pry/pry#1611)):
  * Deprecated constants are hidden from `ls` output by default, use the `-d` switch to see them.
  * Fix warnings that originate in Pry while using the repl.
* Improve completion speed in large applications. ([#1588](pry/pry#1588))
* Pry::ColorPrinter.pp: add `newline` argument and pass it on to PP. ([#1603](pry/pry#1603))
* Use `less` or system pager pager on MS Windows if it is available. ([#1512](pry/pry#1512))
* Add `Pry.configure` as an alternative to the current way of changing configuration options in `.pryrc` files. ([#1502](pry/pry#1502))
* Add `Pry::Config::Behavior#eager_load!` to add a possible workaround for issues like ([#1501](pry/pry#1501))
* Remove Slop as a runtime dependency by vendoring v3.4 as Pry::Slop.
  People can depend on Slop v4 and Pry at the same time without running into version conflicts. ([#1497](pry/pry#1497))
* Fix auto-indentation of code that uses a single-line rescue ([#1450](pry/pry#1450))
* Remove "Pry::Config#refresh", please use "Pry::Config#clear" instead.
* Defining a method called "ls" no longer breaks the "ls" command ([#1407](pry/pry#1407))
* Don't raise when directory permissions don't allow file expansion ([#1432](pry/pry#1432))
* Syntax highlight <tt> tags in documentation output.
* Add support for BasicObject subclasses who implement their own #inspect (#1341)
* Fix 'include RSpec::Matchers' at the top-level (#1277)
* Add 'gem-readme' command, prints the README file bundled with a rubygem
* Add 'gem-search' command, searches for a gem with the rubygems.org HTTP API
* Fixed bug in the `cat` command where it was impossible to use line numbers with files ([#1349](pry/pry#1349))
* Fixed uncaught Errno::EOPNOTSUPP exception when $stdout is a socket ([#1352](pry/pry#1352))
* Display a warning when you cd'ed inside a C object and executed 'show-source' without arguments ([#691](pry/pry#691))
* Make the stagger_output method more reliable by reusing possibly available Pry instance ([#1364](pry/pry#1364))
* Make the 'gem-install' message less confusing by removing backticks ([#1350](pry/pry#1350))
* Fixed error when Pry was trying to load incompatible versions of plugins ([#1312](pry/pry#1312))
* Fixed bug when `hist --clear` led to ArgumentError ([#1340](pry/pry#1340))
* Fixed the "uninitialized constant Pry::ObjectPath::StringScanner" exception during autocomplete ([#1330](pry/pry#1330))
* Secured usage of colours with special characters (RL_PROMPT_START_IGNORE and RL_PROMPT_END_IGNORE) in Pry::Helpers::Text ([#493](pry/pry#493 (comment)))
* Fixed regression with `pry -e` when it messes the terminal ([#1387](pry/pry#1387))
* Fixed regression with space prefixes of expressions ([#1369](pry/pry#1369))
* Introduced the new way to define hooks for commands (with `Pry.hooks.add_hook("{before,after}_commandName")`). The old way is deprecated, but still supported (with `Pry.commands.{before,after}_command`) ([#651](pry/pry#651))
* Removed old API's using `Pry::Hooks.from_hash` altogether
* Removed hints on Foreman support (see [this](ddollar/foreman#536))
* Fixed support for the tee command ([#1334](pry/pry#1334))
* Implemented support for CDPATH for ShellCommand ([#1433](pry/pry#1433), [#1434](pry/pry#1434))
* `Pry::CLI.parse_options` does not start Pry anymore ([#1393](pry/pry#1393))
* The gem uses CPU-less platforms for Windows now ([#1410](pry/pry#1410))
* Add `Pry::Config::Memoization` to make it easier to implement your own `Pry::Config::Default` class.([#1503](pry/pry#1503))
* Lazy load the config defaults for `Pry.config.history` and `Pry.config.gist`.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants