Skip to content

Fix a bug where Method objects were not returned for setters inherited#1688

Merged
0x1eef merged 6 commits intopry:masterfrom
0x1eef:bugfix/respond_to_missing_config_setter
Nov 10, 2017
Merged

Fix a bug where Method objects were not returned for setters inherited#1688
0x1eef merged 6 commits intopry:masterfrom
0x1eef:bugfix/respond_to_missing_config_setter

Conversation

@0x1eef
Copy link
Copy Markdown
Contributor

@0x1eef 0x1eef commented Nov 7, 2017

from a default (Pry::Config::Default). Eg, this is no longer an error:

[1] pry(main)> Pry.config.method(:exception_whitelist=)

@banister This is (another?) bug fix lost during the force push.
@rf- could you also take a look if you have time?

r-obert and others added 2 commits November 7, 2017 21:06
from a default (Pry::Config::Default). Eg, this is no longer an error:

[1] pry(main)> Pry.config.method(:exception_whitelist=)
@0x1eef 0x1eef requested review from banister and rf- November 7, 2017 20:07
@0x1eef
Copy link
Copy Markdown
Contributor Author

0x1eef commented Nov 7, 2017

v0.11.2

[1] pry(main)> Pry.config.method(:exception_whitelist=)
NameError: undefined method `exception_whitelist=' for class `#<Class:#<Pry::Config:0x007fc6a98bbab0>>'
from (pry):1:in `method'
[2] pry(main)> pry-version
Pry version: 0.11.2 on Ruby 2.4.1.

r-obert:bugfix/respond_to_missing_config_setter

[1] pry(main)> Pry.config.method(:exception_whitelist=)
=> #<Method: #<Pry::Config:0x3fca8519bab0 keys=['should_load_plugins','should_load_rc','should_load_local_rc','should_load_requires','requires','history','input','should_trap_interrupts','exec_string','prompt','memory_size','command_completions','hooks','output','quiet','commands','command_prefix','collision_warning','correct_indent','prompt_name','auto_indent','color','extra_sticky_locals','print','pager','output_prefix'] default=#<Pry::Config::Default:0x3fca8519c474 keys=[] default=nil>>.exception_whitelist=>


def respond_to_missing?(key, include_all=false)
key = key.to_s
key = key[0..-2] if key.end_with? ASSIGNMENT
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 dont know much about the config system anymore, but why doesn't @default just respond to foo= ? why do we have to clip off the final = ?

Copy link
Copy Markdown
Contributor Author

@0x1eef 0x1eef Nov 8, 2017

Choose a reason for hiding this comment

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

All instances of Pry::Config are a hash table implemented on top of method_missing
although the methods are defined lazily on first access. foo= doesn't exist until then, so that's what respond_to_missing? is accounting for, before first access.

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.

why do we have to clip off the final = ?

because the hash table doesn't store the '=' character, but it's safe to assume they come in pairs.

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.

Pry::Config::Default is a more specialised case, the last in the chain, that defines regular methods but Pry.config.exception_whitelist= delegates to it. Pry.config is a Pry::Config.
_pry_.config => Pry.config => Pry::Config::Default. something like that.

@0x1eef 0x1eef self-assigned this Nov 10, 2017
Copy link
Copy Markdown
Member

@rf- rf- left a comment

Choose a reason for hiding this comment

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

LGTM! If you felt like golfing it, I think you could just write key = key.to_s.chomp(ASSIGNMENT), but it looks good as-is.

@0x1eef 0x1eef merged commit 62c6183 into pry:master Nov 10, 2017
@0x1eef 0x1eef deleted the bugfix/respond_to_missing_config_setter branch November 10, 2017 23:51
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 &lt;tt&gt; 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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants