irbtools 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.
- data/.document +5 -0
- data/.gitignore +21 -0
- data/LICENSE +20 -0
- data/README.rdoc +44 -0
- data/Rakefile +40 -0
- data/VERSION +1 -0
- data/lib/irbtools.rb +210 -0
- metadata +200 -0
data/.document
ADDED
data/.gitignore
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2010 Jan Lelis
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
= irbtools
|
2
|
+
|
3
|
+
This is a meta gem which installs great irb gems for you and configures your irb.
|
4
|
+
|
5
|
+
== Setup
|
6
|
+
|
7
|
+
gem install irbtools
|
8
|
+
|
9
|
+
On linux, you also need the +xclip+ program (apt-get install xclip).
|
10
|
+
|
11
|
+
== Usage
|
12
|
+
|
13
|
+
To use it, put the following in your <tt>~/.irbrc</tt> file (this file is loaded everytime you start an irb):
|
14
|
+
|
15
|
+
require 'rubygems' # only needed in 1.8
|
16
|
+
require 'irbtools'
|
17
|
+
|
18
|
+
You could also just read and copy the irbtools.rb source file, tweak it and use it directly as <tt>.irbrc</tt>
|
19
|
+
|
20
|
+
== Features
|
21
|
+
|
22
|
+
See http;//rbjl.net/40 or read the commented source file: @lib/irbtools.rb@
|
23
|
+
|
24
|
+
=== Included gems and libraries
|
25
|
+
|
26
|
+
'wirble', # colors
|
27
|
+
'hirb', # active record tables
|
28
|
+
'fileutils', # cd, pwd, ln_s, mv, rm, mkdir, touch ... ;)
|
29
|
+
'zucker/env', # Info, OS, RubyVersion, RubyEngine
|
30
|
+
'zucker/debug', # nice debug printing (q, o, c, .m, .d)
|
31
|
+
'ap', # nice debug printing (ap)
|
32
|
+
'yaml', # nice debug printing (y)
|
33
|
+
'clipboard', # easy clipboard access (copy & paste)
|
34
|
+
'guessmethod', # automatically correct typos (method_missing hook)
|
35
|
+
'drx', # nice tk object inspector (.see)
|
36
|
+
'interactive_editor', # lets you open vim (or your favourite editor), hack something, save it, and it's loaded in the current irb session
|
37
|
+
'coderay', # some nice colorful display ;)
|
38
|
+
'irb_rocket', # put result as comment instead of a new line!
|
39
|
+
|
40
|
+
== Copyright
|
41
|
+
|
42
|
+
Copyright (c) 2010 Jan Lelis. See LICENSE for details.
|
43
|
+
|
44
|
+
J-_-L
|
data/Rakefile
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'jeweler'
|
6
|
+
Jeweler::Tasks.new do |gem|
|
7
|
+
gem.name = "irbtools"
|
8
|
+
gem.summary = %Q{irbtools is a meta gem which installs some great irb gems for you and configures your irb.}
|
9
|
+
gem.description = %Q{irbtools is a meta gem which installs some great irb gems for you and configures your irb. Simply put a require 'irbtools' in the .irbrc file in your home directory.}
|
10
|
+
gem.email = "mail@janlelis.de"
|
11
|
+
gem.homepage = "http://github.com/janlelis/irbtools"
|
12
|
+
gem.authors = ["Jan Lelis"]
|
13
|
+
gem.requirements << 'You need to add http://merbi.st to your gem sources (irb_rocket)'
|
14
|
+
gem.add_dependency 'wirble'
|
15
|
+
gem.add_dependency 'hirb'
|
16
|
+
gem.add_dependency 'zucker', '>=7'
|
17
|
+
gem.add_dependency 'awesome_print'
|
18
|
+
gem.add_dependency 'g'
|
19
|
+
gem.add_dependency 'clipboard'
|
20
|
+
gem.add_dependency 'guessmethod'
|
21
|
+
gem.add_dependency 'drx'
|
22
|
+
gem.add_dependency 'interactive_editor'
|
23
|
+
gem.add_dependency 'coderay'
|
24
|
+
gem.add_dependency 'irb_rocket'
|
25
|
+
#gem.post_install_message 'irbtools'
|
26
|
+
end
|
27
|
+
Jeweler::GemcutterTasks.new
|
28
|
+
rescue LoadError
|
29
|
+
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
30
|
+
end
|
31
|
+
|
32
|
+
require 'rake/rdoctask'
|
33
|
+
Rake::RDocTask.new do |rdoc|
|
34
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
35
|
+
|
36
|
+
rdoc.rdoc_dir = 'doc'
|
37
|
+
rdoc.title = "irbtools #{version}"
|
38
|
+
rdoc.rdoc_files.include('README*')
|
39
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
40
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.1
|
data/lib/irbtools.rb
ADDED
@@ -0,0 +1,210 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# required gems: wirble hirb zucker awesome_print g clipboard guessmethod drx interactive_editory coderay irb_rocket
|
4
|
+
|
5
|
+
# either use this file as .irbrc or require 'irbtools' in your .irbrc
|
6
|
+
|
7
|
+
# # # # #
|
8
|
+
# load libraries
|
9
|
+
irb_libs = ['rubygems',
|
10
|
+
'wirble', # colors
|
11
|
+
'hirb', # active record tables
|
12
|
+
'fileutils', # cd, pwd, ln_s, mv, rm, mkdir, touch ... ;)
|
13
|
+
'zucker/env', # Info, OS, RubyVersion, RubyEngine
|
14
|
+
'zucker/debug', # nice debug printing (q, o, c, .m, .d)
|
15
|
+
'ap', # nice debug printing (ap)
|
16
|
+
'yaml', # nice debug printing (y)
|
17
|
+
'g', # nice debug printing (g) - MacOS only :/
|
18
|
+
'clipboard', # easy clipboard access (copy & paste)
|
19
|
+
'guessmethod', # automatically correct typos (method_missing hook)
|
20
|
+
'drx', # nice tk object inspector (.see)
|
21
|
+
'interactive_editor', # lets you open vim (or your favourite editor), hack something, save it, and it's loaded in the current irb session
|
22
|
+
'coderay', # some nice colorful display ;)
|
23
|
+
'irb_rocket', # put result as comment instead of a new line!
|
24
|
+
# 'zucker/all' # see rubyzucker.info
|
25
|
+
]
|
26
|
+
|
27
|
+
irb_libs.each{ |lib|
|
28
|
+
begin
|
29
|
+
require lib
|
30
|
+
|
31
|
+
case lib
|
32
|
+
when 'wirble'
|
33
|
+
Wirble.init
|
34
|
+
Wirble.colorize
|
35
|
+
|
36
|
+
when 'hirb'
|
37
|
+
Hirb::View.enable
|
38
|
+
|
39
|
+
when 'zucker/env'
|
40
|
+
include OS # linux?, windows?, ...
|
41
|
+
Zucker.more_aliases! # RV, RE
|
42
|
+
|
43
|
+
when 'fileutils'
|
44
|
+
include FileUtils::Verbose
|
45
|
+
|
46
|
+
when 'clipboard'
|
47
|
+
def copy(str)
|
48
|
+
Clipboard.copy(str)
|
49
|
+
end
|
50
|
+
|
51
|
+
def paste
|
52
|
+
Clipboard.paste
|
53
|
+
end
|
54
|
+
|
55
|
+
def copy_session
|
56
|
+
require 'open3'
|
57
|
+
Open3.popen3('irb'){ |i,o,e|
|
58
|
+
i.puts session_history + "\nexit"
|
59
|
+
o.read
|
60
|
+
#copy o.read
|
61
|
+
}
|
62
|
+
# "The session history has been copied to the clipboard."
|
63
|
+
end
|
64
|
+
|
65
|
+
def copy_input
|
66
|
+
copy session_history
|
67
|
+
"The session input history has been copied to the clipboard."
|
68
|
+
end
|
69
|
+
alias copy_session_input copy_input
|
70
|
+
|
71
|
+
def copy_output
|
72
|
+
copy context.instance_variable_get(:@eval_history_values).inspect.gsub(/^\d+ (.*)/, '\1')
|
73
|
+
"The session output history has been copied to the clipboard."
|
74
|
+
end
|
75
|
+
alias copy_session_output copy_output
|
76
|
+
|
77
|
+
when 'coderay'
|
78
|
+
def colorize(string)
|
79
|
+
puts CodeRay.scan( string, :ruby ).term
|
80
|
+
end
|
81
|
+
|
82
|
+
def ray(path)
|
83
|
+
puts CodeRay.scan( File.read(path), :ruby ).term
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
87
|
+
|
88
|
+
rescue LoadError => err
|
89
|
+
warn "Couldn't load an irb library: #{err}"
|
90
|
+
end
|
91
|
+
}
|
92
|
+
|
93
|
+
# # # # #
|
94
|
+
# shortcuts & helpers
|
95
|
+
|
96
|
+
# shows the contents of your current directory (more such commands available by FileUtils)
|
97
|
+
def ls(path='.')
|
98
|
+
Dir[ File.join path, '*' ].map{|res| res =~ /^#{path}\/?/; $' }
|
99
|
+
end
|
100
|
+
alias dir ls
|
101
|
+
|
102
|
+
# patch cd so that it also shows the current directory
|
103
|
+
def cd(*args)
|
104
|
+
FileUtils::Verbose.cd *args
|
105
|
+
ls
|
106
|
+
end
|
107
|
+
|
108
|
+
# read file contents (also see ray for ruby source files ;) )
|
109
|
+
def cat(path)
|
110
|
+
File.read path
|
111
|
+
end
|
112
|
+
|
113
|
+
# allows concise syntax like rq:mathn
|
114
|
+
def rq(lib)
|
115
|
+
require lib.to_s
|
116
|
+
end
|
117
|
+
|
118
|
+
# returns the last lines, needed for some copy_ methods
|
119
|
+
def session_history(number_of_lines = context.instance_variable_get(:@line_no) )
|
120
|
+
Readline::HISTORY.entries[-number_of_lines...-1]*"\n"
|
121
|
+
end
|
122
|
+
|
123
|
+
# restart irb
|
124
|
+
def reset! # restart irb
|
125
|
+
exec$0
|
126
|
+
end
|
127
|
+
|
128
|
+
def ruby_version(which = nil)
|
129
|
+
# test if installed
|
130
|
+
unless `rvm -v` =~ /Seguin/
|
131
|
+
raise 'Ruby Version Manager must be installed to use this command'
|
132
|
+
end
|
133
|
+
|
134
|
+
# show rubies if called without options
|
135
|
+
if !which
|
136
|
+
puts 'Availabe Rubies: ' +
|
137
|
+
`rvm list`.scan( /^(?: |=>) (.*) \[/ )*", "
|
138
|
+
return
|
139
|
+
end
|
140
|
+
|
141
|
+
# get irb suffix
|
142
|
+
rv = `rvm use #{which}` # e.g. => "\ninfo: Using ruby 1.9.2 p0\n"
|
143
|
+
# it does not change the ruby for the current user
|
144
|
+
rv =~ /^.*Using(.*)\n/
|
145
|
+
|
146
|
+
# if ruby is found, start it
|
147
|
+
if $1
|
148
|
+
irbname = $0 + $1.tr(' ', '-') + '@global'
|
149
|
+
exec irbname
|
150
|
+
else
|
151
|
+
puts "Sorry, that Ruby version could not be found."
|
152
|
+
end
|
153
|
+
end
|
154
|
+
alias use ruby_version
|
155
|
+
|
156
|
+
# # # # #
|
157
|
+
# irb options
|
158
|
+
IRB.conf[:AUTO_INDENT] = true # simple auto indent
|
159
|
+
IRB.conf[:EVAL_HISTORY] = 42424242424242424242 # creates the special __ variable
|
160
|
+
IRB.conf[:SAVE_HISTORY] = 2000 # how many lines will go to ~/.irb_history
|
161
|
+
|
162
|
+
# prompt
|
163
|
+
IRB.conf[:PROMPT].merge!({:IRBTOOLS => {
|
164
|
+
:PROMPT_I => ">> ", # normal
|
165
|
+
:PROMPT_N => "| ", # indenting
|
166
|
+
:PROMPT_C => "(>>) ", # continuing a statement
|
167
|
+
:PROMPT_S => "%l> ", # continuing a string
|
168
|
+
:RETURN => "=> %s \n",
|
169
|
+
:AUTO_INDENT => true,
|
170
|
+
}})
|
171
|
+
|
172
|
+
IRB.conf[:PROMPT_MODE] = :IRBTOOLS
|
173
|
+
|
174
|
+
# # # # #
|
175
|
+
# workarounds
|
176
|
+
|
177
|
+
# patch exec (irb_rocket bug)
|
178
|
+
if IRB.const_defined? :CaptureIO
|
179
|
+
module Kernel
|
180
|
+
alias original_exec exec
|
181
|
+
def exec(*args)
|
182
|
+
STDOUT.reopen(IRB::CaptureIO.streams[:stdout])
|
183
|
+
STDERR.reopen(IRB::CaptureIO.streams[:stderr])
|
184
|
+
original_exec *args
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
module IRB
|
189
|
+
class CaptureIO
|
190
|
+
def self.streams
|
191
|
+
{
|
192
|
+
:stdout => @@current_capture.instance_variable_get( :@out ),
|
193
|
+
:stderr => @@current_capture.instance_variable_get( :@err ),
|
194
|
+
}
|
195
|
+
end
|
196
|
+
|
197
|
+
alias original_capture capture
|
198
|
+
def capture(&block)
|
199
|
+
@@current_capture = self
|
200
|
+
original_capture &block
|
201
|
+
end
|
202
|
+
end
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
# # # # #
|
207
|
+
# done :)
|
208
|
+
puts "Welcome to IRB. You are using #{RUBY_DESCRIPTION}. Have fun ;)"
|
209
|
+
|
210
|
+
# J-_-L
|
metadata
ADDED
@@ -0,0 +1,200 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: irbtools
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
version: 0.0.1
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Jan Lelis
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-10-05 00:00:00 +02:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: wirble
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 0
|
30
|
+
version: "0"
|
31
|
+
type: :runtime
|
32
|
+
version_requirements: *id001
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: hirb
|
35
|
+
prerelease: false
|
36
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
37
|
+
none: false
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 0
|
43
|
+
version: "0"
|
44
|
+
type: :runtime
|
45
|
+
version_requirements: *id002
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: zucker
|
48
|
+
prerelease: false
|
49
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
segments:
|
55
|
+
- 7
|
56
|
+
version: "7"
|
57
|
+
type: :runtime
|
58
|
+
version_requirements: *id003
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: awesome_print
|
61
|
+
prerelease: false
|
62
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
63
|
+
none: false
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
segments:
|
68
|
+
- 0
|
69
|
+
version: "0"
|
70
|
+
type: :runtime
|
71
|
+
version_requirements: *id004
|
72
|
+
- !ruby/object:Gem::Dependency
|
73
|
+
name: g
|
74
|
+
prerelease: false
|
75
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
76
|
+
none: false
|
77
|
+
requirements:
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
segments:
|
81
|
+
- 0
|
82
|
+
version: "0"
|
83
|
+
type: :runtime
|
84
|
+
version_requirements: *id005
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
name: clipboard
|
87
|
+
prerelease: false
|
88
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ">="
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
segments:
|
94
|
+
- 0
|
95
|
+
version: "0"
|
96
|
+
type: :runtime
|
97
|
+
version_requirements: *id006
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: guessmethod
|
100
|
+
prerelease: false
|
101
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
102
|
+
none: false
|
103
|
+
requirements:
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
segments:
|
107
|
+
- 0
|
108
|
+
version: "0"
|
109
|
+
type: :runtime
|
110
|
+
version_requirements: *id007
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: drx
|
113
|
+
prerelease: false
|
114
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
115
|
+
none: false
|
116
|
+
requirements:
|
117
|
+
- - ">="
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
segments:
|
120
|
+
- 0
|
121
|
+
version: "0"
|
122
|
+
type: :runtime
|
123
|
+
version_requirements: *id008
|
124
|
+
- !ruby/object:Gem::Dependency
|
125
|
+
name: interactive_editor
|
126
|
+
prerelease: false
|
127
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
128
|
+
none: false
|
129
|
+
requirements:
|
130
|
+
- - ">="
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
segments:
|
133
|
+
- 0
|
134
|
+
version: "0"
|
135
|
+
type: :runtime
|
136
|
+
version_requirements: *id009
|
137
|
+
- !ruby/object:Gem::Dependency
|
138
|
+
name: coderay
|
139
|
+
prerelease: false
|
140
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
141
|
+
none: false
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
segments:
|
146
|
+
- 0
|
147
|
+
version: "0"
|
148
|
+
type: :runtime
|
149
|
+
version_requirements: *id010
|
150
|
+
description: irbtools is a meta gem which installs some great irb gems for you and configures your irb. Simply put a require 'irbtools' in the .irbrc file in your home directory.
|
151
|
+
email: mail@janlelis.de
|
152
|
+
executables: []
|
153
|
+
|
154
|
+
extensions: []
|
155
|
+
|
156
|
+
extra_rdoc_files:
|
157
|
+
- LICENSE
|
158
|
+
- README.rdoc
|
159
|
+
files:
|
160
|
+
- .document
|
161
|
+
- .gitignore
|
162
|
+
- LICENSE
|
163
|
+
- README.rdoc
|
164
|
+
- Rakefile
|
165
|
+
- VERSION
|
166
|
+
- lib/irbtools.rb
|
167
|
+
has_rdoc: true
|
168
|
+
homepage: http://github.com/janlelis/irbtools
|
169
|
+
licenses: []
|
170
|
+
|
171
|
+
post_install_message: irbtools :)
|
172
|
+
rdoc_options:
|
173
|
+
- --charset=UTF-8
|
174
|
+
require_paths:
|
175
|
+
- lib
|
176
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
177
|
+
none: false
|
178
|
+
requirements:
|
179
|
+
- - ">="
|
180
|
+
- !ruby/object:Gem::Version
|
181
|
+
segments:
|
182
|
+
- 0
|
183
|
+
version: "0"
|
184
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
185
|
+
none: false
|
186
|
+
requirements:
|
187
|
+
- - ">="
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
segments:
|
190
|
+
- 0
|
191
|
+
version: "0"
|
192
|
+
requirements:
|
193
|
+
- You need to add http://merbi.st to your gem sources (irb_rocket)
|
194
|
+
rubyforge_project:
|
195
|
+
rubygems_version: 1.3.7
|
196
|
+
signing_key:
|
197
|
+
specification_version: 3
|
198
|
+
summary: irbtools is a meta gem which installs some great irb gems for you and configures your irb.
|
199
|
+
test_files: []
|
200
|
+
|