Sean Busbey created HBASE-11686:
-----------------------------------
Summary: Shell code should create a binding / irb workspace
instead of polluting the root namespace
Key: HBASE-11686
URL: https://issues.apache.org/jira/browse/HBASE-11686
Project: HBase
Issue Type: Improvement
Reporter: Sean Busbey
Priority: Minor
Right now, the shell builds a list of commands and then injects them into the
root exectution's context
bin/hirb.rb
{code}
# Add commands to this namespace
@shell.export_commands(self)
{code}
hbase-shell/src/main/ruby/shell.rb
{code}
def export_commands(where)
::Shell.commands.keys.each do |cmd|
# here where is the IRB namespace
# this method just adds the call to the specified command
# which just references back to 'this' shell object
# a decently extensible way to add commands
where.send :instance_eval, <<-EOF
def #{cmd}(*args)
ret = @shell.command('#{cmd}', *args)
puts
return ret
end
EOF
end
end
{code}
This is an unclean abstraction. For one, it requires that there be an instance
variable in the main namespace called '@shell' without making that clear in the
docs. Additionally, it complicates maintenance by breaking isolation.
We should update things so that shell can provide a binding for eval or a
workspace for IRB execution and then use it directly when we construct our IRB
session.
--
This message was sent by Atlassian JIRA
(v6.2#6252)