rename Pry::CommandSet#commands as Pry::CommandSet#to_hash.

'Pry.commands.commands' gone in favor of 'Pry.commands.to_hash' or as
using a CommandSet as an enumerable (Pry.commands.each etc) instead.
This commit is contained in:
Robert Gleeson 2014-02-04 05:12:28 +01:00
parent c283e644b5
commit 77a9c00067
7 changed files with 81 additions and 73 deletions

View File

@ -1,9 +1,7 @@
### 1.0.0 (2013/??/??)
#### Dependency changes
* 1.8 support discontinued from 1.0+ onwards.
* 0.9.12+ may continue to provide 1.8+ bug fixes.
* 1.8 support discontinued from 0.10/1.0 up. 0.9 branch continues 1.8 support.
* Require Coderay `>= 1.1.0`
#### Features
@ -25,6 +23,11 @@
* require of 'readline' is delayed until Pry.start() has been called for the first time. (#1117)
* add option to disable input completer through `_pry_.config.completer = nil`
#### API change.
* CommandSet#commands, sometimes referenced through Pry.commands.commands, renamed as 'CommandSet#to_hash'.
it returns a duplicate of the internal hash a CommandSet uses.
* CommandSet#keys is now an alias of CommandSet#list_commands.
#### Bug fixes, etc.
* `binding.pry` inside `.pryrc` file now works, with some limitations (@richo / #1118)
* Add support for BasicObjects to `ls` (#984)

View File

@ -248,7 +248,7 @@ class Pry
end
def commands
command_set.commands
command_set.to_hash
end
def text

View File

@ -10,19 +10,15 @@ class Pry
class CommandSet
include Enumerable
include Pry::Helpers::BaseHelpers
attr_reader :commands
attr_reader :helper_module
# @param [Array<CommandSet>] imported_sets Sets which will be imported
# automatically
# @param [Array<Commandset>] imported_sets
# Sets which will be imported automatically
# @yield Optional block run to define commands
def initialize(*imported_sets, &block)
@commands = {}
@helper_module = Module.new
import(*imported_sets)
instance_eval(&block) if block
end
@ -83,7 +79,7 @@ class Pry
description, options = ["No description.", description] if description.is_a?(Hash)
options = Pry::Command.default_options(match).merge!(options)
commands[match] = Pry::BlockCommand.subclass(match, description, options, helper_module, &block)
@commands[match] = Pry::BlockCommand.subclass(match, description, options, helper_module, &block)
end
alias_method :command, :block_command
@ -115,9 +111,9 @@ class Pry
description, options = ["No description.", description] if description.is_a?(Hash)
options = Pry::Command.default_options(match).merge!(options)
commands[match] = Pry::ClassCommand.subclass(match, description, options, helper_module, &block)
commands[match].class_eval(&block)
commands[match]
@commands[match] = Pry::ClassCommand.subclass(match, description, options, helper_module, &block)
@commands[match].class_eval(&block)
@commands[match]
end
# Execute a block of code before a command is invoked. The block also
@ -157,7 +153,7 @@ class Pry
def delete(*searches)
searches.each do |search|
cmd = find_command_by_match_or_listing(search)
commands.delete cmd.match
@commands.delete cmd.match
end
end
@ -167,7 +163,7 @@ class Pry
# @return [Pry::CommandSet] Returns the reciever (a command set).
def import(*sets)
sets.each do |set|
commands.merge! set.commands
@commands.merge! set.to_hash
helper_module.send :include, set.helper_module
end
self
@ -181,7 +177,7 @@ class Pry
helper_module.send :include, set.helper_module
matches.each do |match|
cmd = set.find_command_by_match_or_listing(match)
commands[cmd.match] = cmd
@commands[cmd.match] = cmd
end
self
end
@ -190,8 +186,8 @@ class Pry
# of the command to retrieve.
# @return [Command] The command object matched.
def find_command_by_match_or_listing(match_or_listing)
cmd = (commands[match_or_listing] ||
Pry::Helpers::BaseHelpers.find_command(match_or_listing, commands))
cmd = (@commands[match_or_listing] ||
Pry::Helpers::BaseHelpers.find_command(match_or_listing, @commands))
cmd or raise ArgumentError, "Cannot find a command: '#{match_or_listing}'!"
end
@ -250,11 +246,11 @@ class Pry
:description => cmd.description
}.merge!(options)
commands[new_match] = cmd.dup
commands[new_match].match = new_match
commands[new_match].description = options.delete(:description)
commands[new_match].options.merge!(options)
commands.delete(cmd.match)
@commands[new_match] = cmd.dup
@commands[new_match].match = new_match
@commands[new_match].description = options.delete(:description)
@commands[new_match].options.merge!(options)
@commands.delete(cmd.match)
end
def disabled_command(name_of_disabled_command, message, matcher=name_of_disabled_command)
@ -303,16 +299,23 @@ class Pry
end
# @return [Array] The list of commands provided by the command set.
# @return [Array]
# The list of commands provided by the command set.
def list_commands
commands.keys
@commands.keys
end
alias_method :keys, :list_commands
def to_hash
@commands.dup
end
alias_method :to_h, :to_hash
# Find a command that matches the given line
# @param [String] val The line that might be a command invocation
# @return [Pry::Command, nil]
def [](pattern)
commands.values.select do |command|
@commands.values.select do |command|
command.matches?(pattern)
end.sort_by do |command|
command.match_score(pattern)
@ -337,7 +340,7 @@ class Pry
#
def []=(pattern, command)
if command.equal?(nil)
return commands.delete(pattern)
return @commands.delete(pattern)
end
unless Class === command && command < Pry::Command
raise TypeError, "command is not a subclass of Pry::Command"
@ -396,7 +399,7 @@ class Pry
# @private (used for testing)
def run_command(context, match, *args)
command = commands[match] or raise NoCommandError.new(match, self)
command = @commands[match] or raise NoCommandError.new(match, self)
command.new(context).call_safely(*args)
end
@ -408,7 +411,7 @@ class Pry
if command = find_command(search)
command.new(context).complete(search)
else
commands.keys.select do |key|
@commands.keys.select do |key|
String === key && key.start_with?(search)
end.map{ |key| key + " " } + Bond::DefaultMission.completions
end

View File

@ -33,7 +33,7 @@ class Pry::Config::Default
:control_d_handler => proc { Pry::DEFAULT_CONTROL_D_HANDLER },
:memory_size => proc { 100 },
:extra_sticky_locals => proc { {} },
:command_completions => proc { proc { commands.commands.keys } },
:command_completions => proc { proc { commands.keys } },
:file_completions => proc { proc { Dir["."] } },
:completer => proc { lazy_completer }
}

View File

@ -473,22 +473,23 @@ describe "commands" do
end
end
klass.commands.include?("nesting").should == true
klass.commands.include?("jump-to").should == true
klass.commands.include?("cd").should == true
klass.commands.include?("v").should == true
klass.to_hash.include?("nesting").should == true
klass.to_hash.include?("jump-to").should == true
klass.to_hash.include?("cd").should == true
klass.to_hash.include?("v").should == true
end
it 'should change description of a command using desc' do
klass = Pry::CommandSet.new do
import Pry::Commands
end
orig = klass.commands["help"].description
orig = klass["help"].description
klass.instance_eval do
desc "help", "blah"
end
klass.commands["help"].description.should.not == orig
klass.commands["help"].description.should == "blah"
commands = klass.to_hash
commands["help"].description.should.not == orig
commands["help"].description.should == "blah"
end
it 'should enable an inherited method to access opts and output and target, due to instance_exec' do
@ -512,8 +513,8 @@ describe "commands" do
import_from Pry::Commands, "ls", "jump-to"
end
klass.commands.include?("ls").should == true
klass.commands.include?("jump-to").should == true
klass.to_hash.include?("ls").should == true
klass.to_hash.include?("jump-to").should == true
end
it 'should delete some inherited commands when using delete method' do
@ -525,13 +526,14 @@ describe "commands" do
delete "ls"
end
klass.commands.include?("nesting").should == true
klass.commands.include?("jump-to").should == true
klass.commands.include?("cd").should == true
klass.commands.include?("v").should == true
klass.commands.include?("show-doc").should == false
klass.commands.include?("show-method").should == false
klass.commands.include?("ls").should == false
commands = klass.to_hash
commands.include?("nesting").should == true
commands.include?("jump-to").should == true
commands.include?("cd").should == true
commands.include?("v").should == true
commands.include?("show-doc").should == false
commands.include?("show-method").should == false
commands.include?("ls").should == false
end
it 'should override some inherited commands' do

View File

@ -167,7 +167,7 @@ describe Pry::CommandSet do
it 'should set the descriptions of commands' do
@set.command('foo', 'some stuff') {}
@set.commands['foo'].description.should == 'some stuff'
@set['foo'].description.should == 'some stuff'
end
describe "aliases" do
@ -176,8 +176,8 @@ describe Pry::CommandSet do
@set.command('foo', 'stuff') { run = true }
@set.alias_command 'bar', 'foo'
@set.commands['bar'].match.should == 'bar'
@set.commands['bar'].description.should == 'Alias for `foo`'
@set['bar'].match.should == 'bar'
@set['bar'].description.should == 'Alias for `foo`'
@set.run_command @ctx, 'bar'
run.should == true
@ -188,12 +188,12 @@ describe Pry::CommandSet do
@set.command('foo', 'stuff', :shellwords => true, :interpolate => false) { run = true }
@set.alias_command 'bar', 'foo'
@set.commands['bar'].options[:shellwords].should == @set.commands['foo'].options[:shellwords]
@set.commands['bar'].options[:interpolate].should == @set.commands['foo'].options[:interpolate]
@set['bar'].options[:shellwords].should == @set['foo'].options[:shellwords]
@set['bar'].options[:interpolate].should == @set['foo'].options[:interpolate]
# however some options should not be inherited
@set.commands['bar'].options[:listing].should.not == @set.commands['foo'].options[:listing]
@set.commands['bar'].options[:listing].should == "bar"
@set['bar'].options[:listing].should.not == @set['foo'].options[:listing]
@set['bar'].options[:listing].should == "bar"
end
it 'should be able to specify alias\'s description when aliasing' do
@ -201,8 +201,8 @@ describe Pry::CommandSet do
@set.command('foo', 'stuff') { run = true }
@set.alias_command 'bar', 'foo', :desc => "tobina"
@set.commands['bar'].match.should == 'bar'
@set.commands['bar'].description.should == "tobina"
@set['bar'].match.should == 'bar'
@set['bar'].description.should == "tobina"
@set.run_command @ctx, 'bar'
run.should == true
@ -213,8 +213,8 @@ describe Pry::CommandSet do
@set.command(/^foo1/, 'stuff', :listing => 'foo') { run = true }
@set.alias_command 'bar', 'foo1'
@set.commands['bar'].match.should == 'bar'
@set.commands['bar'].description.should == 'Alias for `foo1`'
@set['bar'].match.should == 'bar'
@set['bar'].description.should == 'Alias for `foo1`'
@set.run_command @ctx, 'bar'
run.should == true
@ -225,7 +225,7 @@ describe Pry::CommandSet do
@set.command(/^foo1/, 'stuff', :listing => 'foo') { run = true }
@set.alias_command /^b.r/, 'foo1', :listing => "bar"
@set.commands[/^b.r/].options[:listing].should == "bar"
@set.to_hash[/^b.r/].options[:listing].should == "bar"
end
it "should set description to default if description parameter is nil" do
@ -233,7 +233,7 @@ describe Pry::CommandSet do
@set.command(/^foo1/, 'stuff', :listing => 'foo') { run = true }
@set.alias_command "bar", 'foo1'
@set.commands["bar"].description.should == "Alias for `foo1`"
@set["bar"].description.should == "Alias for `foo1`"
end
end
@ -241,7 +241,7 @@ describe Pry::CommandSet do
@set.command('foo', 'bar') {}
@set.desc 'foo', 'baz'
@set.commands['foo'].description.should == 'baz'
@set['foo'].description.should == 'baz'
end
it 'should get the descriptions of commands' do
@ -327,12 +327,12 @@ describe Pry::CommandSet do
it 'should provide a :listing for a command that defaults to its name' do
@set.command 'foo', "" do;end
@set.commands['foo'].options[:listing].should == 'foo'
@set['foo'].options[:listing].should == 'foo'
end
it 'should provide a :listing for a command that differs from its name' do
@set.command 'foo', "", :listing => 'bar' do;end
@set.commands['foo'].options[:listing].should == 'bar'
@set['foo'].options[:listing].should == 'bar'
end
it "should provide a 'help' command" do
@ -377,9 +377,9 @@ describe Pry::CommandSet do
listing = "bing"
@set.command('foo') { }
@set.rename_command('bar', 'foo', :description => desc, :listing => listing, :keep_retval => true)
@set.commands['bar'].description.should == desc
@set.commands['bar'].options[:listing].should == listing
@set.commands['bar'].options[:keep_retval].should == true
@set['bar'].description.should == desc
@set['bar'].options[:listing].should == listing
@set['bar'].options[:keep_retval].should == true
end
end

View File

@ -94,7 +94,7 @@ describe "Pry::Command" do
#
end
mock_command(@set.commands['help'], %w(oolon-colluphid), :command_set => @set).output.should =~ /Raving Atheist/
mock_command(@set['help'], %w(oolon-colluphid), :command_set => @set).output.should =~ /Raving Atheist/
end
it 'should use slop to generate the help for classy commands' do
@ -104,7 +104,7 @@ describe "Pry::Command" do
end
end
mock_command(@set.commands['help'], %w(eddie), :command_set => @set).output.should =~ /Over-cheerful/
mock_command(@set['help'], %w(eddie), :command_set => @set).output.should =~ /Over-cheerful/
end
it 'should provide --help for classy commands' do
@ -803,17 +803,17 @@ describe "Pry::Command" do
end
it 'should be correct for default commands' do
@set.commands["help"].group.should == "Help"
@set["help"].group.should == "Help"
end
it 'should not change once it is initialized' do
@set.commands["magic"].group("-==CD COMMAND==-")
@set.commands["magic"].group.should == "Not for a public use"
@set["magic"].group("-==CD COMMAND==-")
@set["magic"].group.should == "Not for a public use"
end
it 'should not disappear after the call without parameters' do
@set.commands["magic"].group
@set.commands["magic"].group.should == "Not for a public use"
@set["magic"].group
@set["magic"].group.should == "Not for a public use"
end
end
end