bombshell 0.0.0 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/VERSION +1 -1
- data/bombshell.gemspec +8 -2
- data/doc/brainstorm.rb +56 -0
- data/lib/bombshell.rb +22 -0
- data/lib/bombshell/completor.rb +18 -0
- data/lib/bombshell/environment.rb +8 -0
- data/lib/bombshell/irb.rb +35 -0
- data/lib/bombshell/shell.rb +62 -0
- data/lib/bombshell/shell/commands.rb +17 -0
- metadata +10 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.1.0
|
data/bombshell.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{bombshell}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.1.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Andy Rossmeissl"]
|
12
|
-
s.date = %q{2011-
|
12
|
+
s.date = %q{2011-03-07}
|
13
13
|
s.description = %q{Custom IRB consoles made easy}
|
14
14
|
s.email = %q{andy@rossmeissl.net}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -25,7 +25,13 @@ Gem::Specification.new do |s|
|
|
25
25
|
"Rakefile",
|
26
26
|
"VERSION",
|
27
27
|
"bombshell.gemspec",
|
28
|
+
"doc/brainstorm.rb",
|
28
29
|
"lib/bombshell.rb",
|
30
|
+
"lib/bombshell/completor.rb",
|
31
|
+
"lib/bombshell/environment.rb",
|
32
|
+
"lib/bombshell/irb.rb",
|
33
|
+
"lib/bombshell/shell.rb",
|
34
|
+
"lib/bombshell/shell/commands.rb",
|
29
35
|
"spec/bombshell_spec.rb",
|
30
36
|
"spec/spec_helper.rb"
|
31
37
|
]
|
data/doc/brainstorm.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
$:.push File.join(File.dirname(__FILE__), '..', 'lib')
|
2
|
+
require 'bombshell'
|
3
|
+
|
4
|
+
module Foo
|
5
|
+
class Shell < Bombshell::Environment
|
6
|
+
include Bombshell::Shell
|
7
|
+
|
8
|
+
before_launch do
|
9
|
+
@punctuation = '!'
|
10
|
+
end
|
11
|
+
|
12
|
+
before_launch do |arg|
|
13
|
+
puts arg if arg
|
14
|
+
end
|
15
|
+
|
16
|
+
having_launched do
|
17
|
+
@msg = 'Done' + self.class.punctuation
|
18
|
+
end
|
19
|
+
|
20
|
+
having_launched do
|
21
|
+
puts 'Welcome to FooShell'
|
22
|
+
end
|
23
|
+
|
24
|
+
prompt_with do
|
25
|
+
punctuation
|
26
|
+
end
|
27
|
+
|
28
|
+
def do_something
|
29
|
+
puts @msg
|
30
|
+
end
|
31
|
+
|
32
|
+
def sub
|
33
|
+
Subshell.launch
|
34
|
+
end
|
35
|
+
|
36
|
+
class << self
|
37
|
+
def punctuation
|
38
|
+
@punctuation
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
module Foo
|
45
|
+
class Subshell < Bombshell::Environment
|
46
|
+
include Bombshell::Shell
|
47
|
+
|
48
|
+
def do_something_else
|
49
|
+
puts '... and done'
|
50
|
+
end
|
51
|
+
|
52
|
+
prompt_with '[foo::subshell]'
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
Bombshell.launch(Foo::Shell)
|
data/lib/bombshell.rb
CHANGED
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'irb'
|
2
|
+
|
3
|
+
require 'bombshell/shell'
|
4
|
+
require 'bombshell/completor'
|
5
|
+
require 'bombshell/environment'
|
6
|
+
require 'bombshell/irb'
|
7
|
+
|
8
|
+
module Bombshell
|
9
|
+
def launch(shell)
|
10
|
+
begin
|
11
|
+
failure = shell.launch(ARGV.dup)
|
12
|
+
Kernel.exit(failure ? 1 : 0)
|
13
|
+
rescue SystemExit => e
|
14
|
+
Kernel.exit(e.status)
|
15
|
+
rescue Exception => e
|
16
|
+
STDERR.puts("#{e.message} (#{e.class})")
|
17
|
+
STDERR.puts(e.backtrace.join("\n"))
|
18
|
+
Kernel.exit(1)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
module_function :launch
|
22
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Bombshell
|
2
|
+
class Completor
|
3
|
+
def initialize(shell)
|
4
|
+
@shell = shell
|
5
|
+
end
|
6
|
+
|
7
|
+
attr_reader :shell
|
8
|
+
|
9
|
+
def complete(fragment)
|
10
|
+
self.class.filter(shell.instance_methods).grep Regexp.new(Regexp.quote(fragment))
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.filter(m)
|
14
|
+
m - Bombshell::Environment.instance_methods - Bombshell::Shell::Commands::HIDE
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module IRB
|
4
|
+
def self.start_session(binding)
|
5
|
+
unless @__initialized
|
6
|
+
args = ARGV
|
7
|
+
ARGV.replace(ARGV.dup)
|
8
|
+
IRB.setup(nil)
|
9
|
+
ARGV.replace(args)
|
10
|
+
@__initialized = true
|
11
|
+
end
|
12
|
+
|
13
|
+
workspace = WorkSpace.new(binding)
|
14
|
+
|
15
|
+
@CONF[:PROMPT][:CARBON] = {
|
16
|
+
:PROMPT_I => "%m> ",
|
17
|
+
:PROMPT_S => "%m\"> ",
|
18
|
+
:PROMPT_C => "%m…>",
|
19
|
+
:PROMPT_N => "%m→>",
|
20
|
+
:RETURN => ''
|
21
|
+
}
|
22
|
+
@CONF[:PROMPT_MODE] = :CARBON
|
23
|
+
|
24
|
+
irb = Irb.new(workspace)
|
25
|
+
|
26
|
+
::Readline.completion_proc = Bombshell::Completor.new(eval('self.class', binding)).method(:complete)
|
27
|
+
|
28
|
+
@CONF[:IRB_RC].call(irb.context) if @CONF[:IRB_RC]
|
29
|
+
@CONF[:MAIN_CONTEXT] = irb.context
|
30
|
+
catch(:IRB_EXIT) do
|
31
|
+
irb.eval_input
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'bombshell/shell/commands'
|
2
|
+
|
3
|
+
module Bombshell
|
4
|
+
module Shell
|
5
|
+
def self.included(base)
|
6
|
+
base.extend ClassMethods
|
7
|
+
base.instance_variable_set :@bombshell_callbacks, :before_launch => [], :having_launched => []
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_s
|
11
|
+
_prompt
|
12
|
+
end
|
13
|
+
|
14
|
+
include Commands
|
15
|
+
|
16
|
+
def _prompt
|
17
|
+
if self.class.bombshell_prompt.is_a? String
|
18
|
+
self.class.bombshell_prompt
|
19
|
+
elsif self.class.bombshell_prompt.is_a? Proc and self.class.bombshell_prompt.arity == 1
|
20
|
+
self.class.bombshell_prompt.call self
|
21
|
+
elsif self.class.bombshell_prompt.is_a? Proc
|
22
|
+
self.class.bombshell_prompt.call
|
23
|
+
else
|
24
|
+
'[Bombshell]'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def get_binding
|
29
|
+
binding
|
30
|
+
end
|
31
|
+
|
32
|
+
module ClassMethods
|
33
|
+
def launch(arguments = [])
|
34
|
+
@bombshell_callbacks[:before_launch].each do |callback|
|
35
|
+
callback.call(*arguments.first(callback.arity))
|
36
|
+
end
|
37
|
+
shell = new
|
38
|
+
@bombshell_callbacks[:having_launched].each do |callback|
|
39
|
+
shell.instance_eval &callback
|
40
|
+
end
|
41
|
+
::IRB.start_session(shell.get_binding)
|
42
|
+
end
|
43
|
+
|
44
|
+
def before_launch(&callback)
|
45
|
+
@bombshell_callbacks[:before_launch] << callback
|
46
|
+
end
|
47
|
+
|
48
|
+
def having_launched(&callback)
|
49
|
+
@bombshell_callbacks[:having_launched] << callback
|
50
|
+
end
|
51
|
+
|
52
|
+
def prompt_with(p = nil, &prompt)
|
53
|
+
@bombshell_prompt = p || prompt
|
54
|
+
end
|
55
|
+
|
56
|
+
def bombshell_prompt
|
57
|
+
@bombshell_prompt
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Bombshell
|
2
|
+
module Shell
|
3
|
+
module Commands
|
4
|
+
HIDE = [:method_missing, :get_binding, :_prompt, :to_s]
|
5
|
+
|
6
|
+
def quit
|
7
|
+
exit
|
8
|
+
end
|
9
|
+
def method_missing(*args)
|
10
|
+
return if [:extend, :respond_to?].include? args.first
|
11
|
+
puts "Unknown command #{args.first}"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bombshell
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
+
- 1
|
8
9
|
- 0
|
9
|
-
|
10
|
-
version: 0.0.0
|
10
|
+
version: 0.1.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Andy Rossmeissl
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-03-07 00:00:00 -07:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -98,7 +98,13 @@ files:
|
|
98
98
|
- Rakefile
|
99
99
|
- VERSION
|
100
100
|
- bombshell.gemspec
|
101
|
+
- doc/brainstorm.rb
|
101
102
|
- lib/bombshell.rb
|
103
|
+
- lib/bombshell/completor.rb
|
104
|
+
- lib/bombshell/environment.rb
|
105
|
+
- lib/bombshell/irb.rb
|
106
|
+
- lib/bombshell/shell.rb
|
107
|
+
- lib/bombshell/shell/commands.rb
|
102
108
|
- spec/bombshell_spec.rb
|
103
109
|
- spec/spec_helper.rb
|
104
110
|
has_rdoc: true
|