mirror of
https://github.com/pry/pry.git
synced 2022-11-09 12:35:05 -05:00
Added Pry::CommandSet#helpers
This commit is contained in:
parent
e3becbfbf6
commit
943c5cd152
2 changed files with 68 additions and 3 deletions
|
@ -23,6 +23,7 @@ class Pry
|
||||||
|
|
||||||
attr_reader :commands
|
attr_reader :commands
|
||||||
attr_reader :name
|
attr_reader :name
|
||||||
|
attr_reader :helper_module
|
||||||
|
|
||||||
# @param [Symbol] name Name of the command set
|
# @param [Symbol] name Name of the command set
|
||||||
# @param [Array<CommandSet>] imported_sets Sets which will be imported
|
# @param [Array<CommandSet>] imported_sets Sets which will be imported
|
||||||
|
@ -31,6 +32,7 @@ class Pry
|
||||||
def initialize(name, *imported_sets, &block)
|
def initialize(name, *imported_sets, &block)
|
||||||
@name = name
|
@name = name
|
||||||
@commands = {}
|
@commands = {}
|
||||||
|
@helper_module = Module.new
|
||||||
|
|
||||||
define_default_commands
|
define_default_commands
|
||||||
import(*imported_sets)
|
import(*imported_sets)
|
||||||
|
@ -94,7 +96,10 @@ class Pry
|
||||||
# @param [Array<CommandSet>] sets Command sets, all of the commands of which
|
# @param [Array<CommandSet>] sets Command sets, all of the commands of which
|
||||||
# will be imported.
|
# will be imported.
|
||||||
def import(*sets)
|
def import(*sets)
|
||||||
sets.each { |set| commands.merge! set.commands }
|
sets.each do |set|
|
||||||
|
commands.merge! set.commands
|
||||||
|
helper_module.send :include, set.helper_module
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Imports some commands from a set
|
# Imports some commands from a set
|
||||||
|
@ -121,6 +126,8 @@ class Pry
|
||||||
# @param [Array<Object>] args Arguments passed to the command
|
# @param [Array<Object>] args Arguments passed to the command
|
||||||
# @raise [NoCommandError] If the command is not defined in this set
|
# @raise [NoCommandError] If the command is not defined in this set
|
||||||
def run_command(context, name, *args)
|
def run_command(context, name, *args)
|
||||||
|
context.extend helper_module
|
||||||
|
|
||||||
if command = commands[name]
|
if command = commands[name]
|
||||||
command.call(context, *args)
|
command.call(context, *args)
|
||||||
else
|
else
|
||||||
|
@ -140,6 +147,22 @@ class Pry
|
||||||
commands[name].description = description
|
commands[name].description = description
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Defines helpers methods for this command sets.
|
||||||
|
# Those helpers are only defined in this command set.
|
||||||
|
#
|
||||||
|
# @yield A block defining helper methods
|
||||||
|
# @example
|
||||||
|
# helpers do
|
||||||
|
# def hello
|
||||||
|
# puts "Hello!"
|
||||||
|
# end
|
||||||
|
#
|
||||||
|
# include OtherModule
|
||||||
|
# end
|
||||||
|
def helpers(&block)
|
||||||
|
helper_module.class_eval(&block)
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
def define_default_commands
|
def define_default_commands
|
||||||
command "help", "This menu." do |cmd|
|
command "help", "This menu." do |cmd|
|
||||||
|
|
42
test/test.rb
42
test/test.rb
|
@ -925,4 +925,46 @@ describe Pry::CommandSet do
|
||||||
@set.command('foo', '', :keep_retval => true) { 3 }
|
@set.command('foo', '', :keep_retval => true) { 3 }
|
||||||
@set.run_command(nil, 'foo').should == 3
|
@set.run_command(nil, 'foo').should == 3
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'should be able to have its own helpers' do
|
||||||
|
@set.command('foo') do
|
||||||
|
should.respond_to :my_helper
|
||||||
|
end
|
||||||
|
|
||||||
|
@set.helpers do
|
||||||
|
def my_helper; end
|
||||||
|
end
|
||||||
|
|
||||||
|
@set.run_command(Pry::CommandContext.new, 'foo')
|
||||||
|
Pry::CommandContext.new.should.not.respond_to :my_helper
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should not recreate a new heler module when helpers is called' do
|
||||||
|
@set.command('foo') do
|
||||||
|
should.respond_to :my_helper
|
||||||
|
should.respond_to :my_other_helper
|
||||||
|
end
|
||||||
|
|
||||||
|
@set.helpers do
|
||||||
|
def my_helper; end
|
||||||
|
end
|
||||||
|
|
||||||
|
@set.helpers do
|
||||||
|
def my_other_helper; end
|
||||||
|
end
|
||||||
|
|
||||||
|
@set.run_command(Pry::CommandContext.new, 'foo')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should import helpers from imported sets' do
|
||||||
|
imported_set = Pry::CommandSet.new :test do
|
||||||
|
helpers do
|
||||||
|
def imported_helper_method; end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
@set.import imported_set
|
||||||
|
@set.command('foo') { should.respond_to :imported_helper_method }
|
||||||
|
@set.run_command(Pry::CommandContext.new, 'foo')
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Reference in a new issue