ichverstehe-soma 0.0.1

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.
Files changed (4) hide show
  1. data/README.rdoc +18 -0
  2. data/lib/soma.rb +38 -0
  3. data/soma.gemspec +17 -0
  4. metadata +55 -0
data/README.rdoc ADDED
@@ -0,0 +1,18 @@
1
+ = Soma
2
+ A shot at implementing a REPL-like feature for vim (and everything else able to write to text files).
3
+
4
+ == Use It!
5
+ Add the following to your <tt>~/.irbrc</tt>:
6
+
7
+ require 'soma'
8
+ Soma.start
9
+
10
+ When you start IRB Soma will listen on a file named <tt>/tmp/username_somarepl_buffer</tt> and execute everything added there in your IRB session.
11
+
12
+ (And for the sake of God, use Wirble for a prettier IRB!)
13
+
14
+ == Vim plugin
15
+ Copy <tt>plugins/soma.vim</tt> to <tt>~/.vim/plugin/</tt>. The default mapping is <tt>Ctrl-c Ctrl-c</tt>, which sends the current paragraph or visual selection to IRB.
16
+
17
+ == Quirks & Annoyances
18
+ * Commands are added to IRB history, but you have to go one item back in your history or invoke some command before it's updated.
data/lib/soma.rb ADDED
@@ -0,0 +1,38 @@
1
+ require 'tmpdir'
2
+
3
+ Thread.abort_on_exception = true
4
+
5
+ class IRB::Irb
6
+ attr_writer :context
7
+ end
8
+
9
+ module Soma
10
+ extend self
11
+ def start
12
+ @thread || @thread = Thread.start { tail }
13
+ end
14
+
15
+ def erase_and_open_buffer
16
+ @file = File.open(File.join(Dir::tmpdir, "#{`whoami`.strip}_somarepl_buffer"), 'w+')
17
+ end
18
+
19
+ def tail
20
+ erase_and_open_buffer
21
+ loop do
22
+ while (line = @file.readlines) && !line.empty?
23
+ line.each {|l| Readline::HISTORY.push(l.strip) }
24
+ # Get the current IRB
25
+ irb = IRB.CurrentContext.irb
26
+ # We save the IRB context that takes STDIN as input
27
+ stdin_context = irb.context
28
+ # .. replace it with a context that takes our buffer file as input
29
+ irb.context = IRB::Context.new(irb, stdin_context.workspace, @file.path)
30
+ irb.eval_input
31
+ # and finally puts back the STDIN context so control is handled back to the IRB session again
32
+ irb.context = stdin_context
33
+ erase_and_open_buffer
34
+ end
35
+ sleep 0.2
36
+ end
37
+ end
38
+ end
data/soma.gemspec ADDED
@@ -0,0 +1,17 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "soma"
3
+ s.version = "0.0.1"
4
+ s.date = "2008-11-15"
5
+ s.summary = "Send Ruby to IRB from _teh outside_!"
6
+ s.email = "ichverstehe@gmail.com"
7
+ s.homepage = "http://github.com/ichverstehe/soma"
8
+ s.description = "Send Ruby to IRB from _teh outside_!"
9
+ #s.rubyforge_project = "soma"
10
+ #s.has_rdoc = true
11
+ s.authors = ["Harry Vangberg"]
12
+ s.files = ["README.rdoc",
13
+ "soma.gemspec",
14
+ "lib/soma.rb"]
15
+ #s.rdoc_options = ["--main", "README.rdoc"]
16
+ #s.extra_rdoc_files = ["LICENSE", "README.rdoc"]
17
+ end
metadata ADDED
@@ -0,0 +1,55 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ichverstehe-soma
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Harry Vangberg
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-11-15 00:00:00 -08:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: Send Ruby to IRB from _teh outside_!
17
+ email: ichverstehe@gmail.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - README.rdoc
26
+ - soma.gemspec
27
+ - lib/soma.rb
28
+ has_rdoc: false
29
+ homepage: http://github.com/ichverstehe/soma
30
+ post_install_message:
31
+ rdoc_options: []
32
+
33
+ require_paths:
34
+ - lib
35
+ required_ruby_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: "0"
40
+ version:
41
+ required_rubygems_version: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: "0"
46
+ version:
47
+ requirements: []
48
+
49
+ rubyforge_project:
50
+ rubygems_version: 1.2.0
51
+ signing_key:
52
+ specification_version: 2
53
+ summary: Send Ruby to IRB from _teh outside_!
54
+ test_files: []
55
+