irbtools 0.7.4 → 0.8.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/CHANGELOG CHANGED
@@ -1,3 +1,9 @@
1
+ 0.8.0
2
+ * added Object#ri method
3
+ * feature: extension package loading (e.g. irbtools-more)
4
+ * feature: loading in IRB.conf[:IRB_RC] (loading when a subirb starts, no more guessmethod rails errors)
5
+ * added rerequire (rrq) and ld load helper
6
+
1
7
  0.7.4
2
8
  * added workaround to use irb_rocket and hirb at the same time (basic hack, e.g. paging does not work)
3
9
  * fixed little VERSION bug
data/README.rdoc CHANGED
@@ -23,12 +23,21 @@ If it does not exist, just create a new one.
23
23
  It's possible to modify, which libraries get loaded:
24
24
 
25
25
  require 'irbtools/configure'
26
- # here you can edit the <tt>Irbtools.libs</tt> array or add libraries inclusive load callbacks with <tt>Irbtools.add_library</tt>
26
+ # here you can modify which libraries get loaded (see below)
27
27
  Irbtools.init
28
28
 
29
+ === How to load more or less libraries
30
+
31
+ You have the following ways:
32
+ * <tt>Irbtools.add_library(lib, in_proc = false, &block)</tt>
33
+ * <tt>Irbtools.remove_library(lib)</tt>
34
+ * <tt>Irbtools.add_package(pkg)</tt>
35
+ * <tt>Irbtools.remove_package(pkg)</tt>
36
+ * Edit the <tt>Irbtools.libraries</tt>, <tt>Irbtools.libraries_in_proc</tt> or <tt>Irbtools.packages</tt> arrays directly (no way to set callbacks).
37
+
29
38
  == Features
30
39
 
31
- See http://rbjl.net/40-irbtools-release-the-power-of-irb or read the commented source file: lib/irbtools.rb
40
+ See http://rbjl.net/40-irbtools-release-the-power-of-irb or read the commented source file.
32
41
 
33
42
  === Included gems and libraries
34
43
 
@@ -46,16 +55,27 @@ See http://rbjl.net/40-irbtools-release-the-power-of-irb or read the commented s
46
55
  * boson[http://tagaholic.me/boson/] IRB commands repository (which also works for the shell!)
47
56
  * irb_rocket[http://merbi.st/plugins/22] put result as comment instead of a new line!
48
57
 
58
+ === Helper methods
59
+ See the source/rdoc for a description. These methods are defined directly by irbtools.
60
+
61
+ *General*: <tt>ls, cat, rq, rrq/rerequire, ls, session_history, reset!, clear, use_ruby/use, dbg, Object#ri</tt>
62
+
63
+ *Clipboard*: <tt>copy, paste, copy_input, copy_output</tt>
64
+
65
+ *CodeRay*: <tt>colorize, ray</tt>
66
+
49
67
  == Bugs / TODO
50
68
 
51
69
  * Make guessmethod 1.9 compatible
52
70
  * Fix Clipboard Windows issues
53
71
  * Fix irb_rockets general stdout problem. If something stdout related fails, odds are high that it's irb_rockets fault.
72
+ * Pager for hirb and ri
73
+ * Use RDoc driver instead of system ri for ri (?)
54
74
  * ...
55
75
 
56
76
  == More Features
57
77
 
58
- * suggest something ;)
78
+ * See the irbtools-more[http://github.com/janlelis/irbtools-more] package.
59
79
 
60
80
  == Copyright
61
81
 
data/Rakefile CHANGED
@@ -10,7 +10,7 @@ begin
10
10
  gem.email = "mail@janlelis.de"
11
11
  gem.homepage = "http://github.com/janlelis/irbtools"
12
12
  gem.authors = ["Jan Lelis"]
13
- gem.requirements << 'You need to add http://merbi.st to your gem sources (irb_rocket)'
13
+ gem.requirements << "It's recommended to use the irb_rocket gem: gem install irb_rocket --source http://merbi.st"
14
14
  gem.add_dependency 'wirble'
15
15
  gem.add_dependency 'hirb'
16
16
  gem.add_dependency 'zucker', '>=8'
@@ -30,7 +30,7 @@ end
30
30
 
31
31
  require 'rake/rdoctask'
32
32
  Rake::RDocTask.new do |rdoc|
33
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
33
+ version = File.exist?('VERSION') ? File.read('VERSION').chomp : ""
34
34
 
35
35
  rdoc.rdoc_dir = 'doc'
36
36
  rdoc.title = "irbtools #{version}"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.7.4
1
+ 0.8.0
data/irbtools.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{irbtools}
8
- s.version = "0.7.4"
8
+ s.version = "0.8.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Jan Lelis"]
12
- s.date = %q{2010-10-09}
12
+ s.date = %q{2010-10-12}
13
13
  s.description = %q{irbtools is a meta gem which installs some useful irb gems and configures your irb. Simply put a require 'irbtools' in the .irbrc file in your home directory.}
14
14
  s.email = %q{mail@janlelis.de}
15
15
  s.extra_rdoc_files = [
@@ -36,7 +36,7 @@ Gem::Specification.new do |s|
36
36
  s.homepage = %q{http://github.com/janlelis/irbtools}
37
37
  s.rdoc_options = ["--charset=UTF-8"]
38
38
  s.require_paths = ["lib"]
39
- s.requirements = ["You need to add http://merbi.st to your gem sources (irb_rocket)"]
39
+ s.requirements = ["It's recommended to use the irb_rocket gem: gem install irb_rocket --source http://merbi.st"]
40
40
  s.rubygems_version = %q{1.3.7}
41
41
  s.summary = %q{irbtools is a meta gem which installs some useful irb gems and configures your irb.}
42
42
 
data/lib/irbtools.rb CHANGED
@@ -3,31 +3,56 @@
3
3
  # # # # #
4
4
  # require 'irbtools' in your .irbrc
5
5
  # see the README file for more information
6
-
7
6
  require File.expand_path('irbtools/configure', File.dirname(__FILE__) ) unless defined? Irbtools
8
7
 
8
+ # # # # #
9
+ # load extension packages
10
+ Irbtools.packages.each{ |pkg|
11
+ begin
12
+ require "irbtools/#{pkg}"
13
+
14
+ rescue LoadError => err
15
+ warn "Couldn't load an extension package: #{err}"
16
+ end
17
+ }
18
+
9
19
  # # # # #
10
20
  # load libraries
11
- remember_verbose_and_debug = $VERBOSE, $DEBUG
12
- $VERBOSE = $DEBUG = false
13
21
 
14
- Irbtools.libraries.each{ |lib|
15
- begin
16
- require lib.to_s
22
+ # load helper proc
23
+ load_libraries_proc = proc{ |libs|
24
+ remember_verbose_and_debug = $VERBOSE, $DEBUG
25
+ $VERBOSE = $DEBUG = false
17
26
 
18
- Irbtools.send :library_loaded, lib
27
+ libs.each{ |lib|
28
+ begin
29
+ require lib.to_s
19
30
 
20
- rescue LoadError => err
21
- if err.to_s =~ /irb_rocket/ && RubyEngine.mri?
22
- warn "Couldn't load the irb_rocket gem.
31
+ Irbtools.send :library_loaded, lib
32
+
33
+ rescue LoadError => err
34
+ if err.to_s =~ /irb_rocket/ && RubyEngine.mri?
35
+ warn "Couldn't load the irb_rocket gem.
23
36
  You can install it with: gem install irb_rocket --source http://merbi.st"
24
- else
25
- warn "Couldn't load an irb library: #{err}"
37
+ else
38
+ warn "Couldn't load an irb library: #{err}"
39
+ end
26
40
  end
27
- end
41
+ }
42
+ $VERBOSE, $DEBUG = remember_verbose_and_debug
28
43
  }
29
44
 
30
- $VERBOSE, $DEBUG = remember_verbose_and_debug
45
+ # load them :)
46
+ load_libraries_proc[ Irbtools.libraries ]
47
+
48
+ # load these each time a new sub irb starts
49
+ original_irbrc_proc = IRB.conf[:IRB_RC]
50
+ IRB.conf[:IRB_RC] = proc{
51
+ load_libraries_proc[ Irbtools.libraries_in_proc ]
52
+ original_irbrc_proc[ ] if original_irbrc_proc
53
+ }
54
+
55
+
31
56
 
32
57
  # # # # #
33
58
  # general shortcuts & helper methods
@@ -53,10 +78,14 @@ IRB.conf[:PROMPT_MODE] = :IRBTOOLS
53
78
 
54
79
  # # # # #
55
80
  # misc
81
+
82
+ # add current directory to the loadpath
83
+ $: << '.' if RubyVersion.is.at_least? '1.9.2'
84
+
85
+ # shoter ruby info constants
56
86
  Object.const_set 'RV', RubyVersion rescue nil
57
87
  Object.const_set 'RE', RubyEngine rescue nil
58
88
 
59
- # # # # #
60
89
  # load rails.rc
61
90
  begin
62
91
  if ( ENV['RAILS_ENV'] || defined? Rails ) && Irbtools.railsrc
@@ -16,52 +16,70 @@ end
16
16
  # define module methods
17
17
  module Irbtools
18
18
  @lib_hooks = Hash.new{|h,k| h[k] = [] }
19
- @libs = %w[rubygems]
19
+ @libs = [] # %w[rubygems]
20
+ @libs_in_proc = []
21
+ @packages = []
20
22
  @railsrc = '~/.railsrc'
21
23
 
22
24
  class << self
23
- def libraries
24
- @libs
25
- end
26
- aliases_for :libraries, :gems, :libs
25
+ # lets you define the path to the irbrc or deactivate this feature with nil
26
+ attr_accessor :railsrc
27
27
 
28
- def libraries=(value)
29
- @libs = value
30
- end
31
- aliases_for :'libraries=', :'gems=', :'libs='
28
+ # an array of the libraries which get loaded at start
29
+ attr_accessor :libs
30
+ aliases_for :libs, :libraries, :gems
31
+ aliases_for :libs=, :libraries=, :gems=
32
+
33
+ # an array of the libraries which get loaded everytime a new subirb starts (IRB.conf[:IRB_RC])
34
+ attr_accessor :libs_in_proc
35
+ aliases_for :libs_in_proc, :libraries_in_proc, :gems_in_proc
36
+ aliases_for :libs_in_proc=, :libraries_in_proc=, :gems_in_proc=
37
+
38
+ # an array of extension packages which get loaded (e.g. irbtools-more)
39
+ attr_accessor :packages
40
+
41
+ # add a library. the block gets executed, when the library was loaded.
42
+ # if the second param is true, it's hooked in into IRB.conf[:IRB_RC] instead of the start.
43
+ def add_library(lib, in_proc = false, &block)
44
+ libs = in_proc ? @libs_in_proc : @libs
45
+ libs << lib.to_s unless libs.include? lib.to_s
32
46
 
33
- def add_library(lib, &block)
34
- @libs << lib.to_s unless @libs.include? lib.to_s
35
47
  @lib_hooks[lib.to_s] << block if block_given?
36
48
  end
37
49
  aliases_for :add_library, :add_lib, :add_gem
38
50
 
51
+ # don't load a specific library
39
52
  def remove_library(lib)
40
53
  @libs.delete lib.to_s
54
+ @libs_in_proc.delete lib.to_s
41
55
  @lib_hooks.delete lib.to_s
42
56
  end
43
57
  aliases_for :remove_library, :remove_lib, :remove_gem
44
58
 
45
- def railsrc
46
- @railsrc
59
+ # add extensions packages
60
+ def add_package(pkg)
61
+ @packages << pkg.to_s
47
62
  end
48
63
 
49
- def railsrc=(path)
50
- @railsrc = path
64
+ # remove extension package
65
+ def remove_package(pkg)
66
+ @packages.delete pkg.to_s
51
67
  end
52
68
 
53
- def library_loaded(lib)
69
+
70
+ def library_loaded(lib) #:nodoc:
54
71
  @lib_hooks[lib.to_s].each{ |hook| hook.call }
55
72
  end
56
73
  private :library_loaded
57
74
 
75
+ # loads all the stuff ;)
58
76
  def init
59
77
  require File.expand_path( '../irbtools.rb', File.dirname(__FILE__) )
60
78
  end
61
79
  alias start init
62
80
  end
63
81
 
64
- VERSION = File.read File.expand_path( '../../VERSION', File.dirname(__FILE__) ).chomp
82
+ VERSION = ( File.read File.expand_path( '../../VERSION', File.dirname(__FILE__)) ).chomp
65
83
  end
66
84
 
67
85
  # # # # #
@@ -9,11 +9,23 @@ def cat(path)
9
9
  File.read path
10
10
  end
11
11
 
12
- # allows concise syntax like rq:mathn
12
+ # allows concise syntax like rq:mathn and reloading/requireing
13
13
  def rq(lib)
14
14
  require lib.to_s
15
15
  end
16
16
 
17
+ # reloading, hints from http://www.themomorohoax.com/2009/03/27/irb-tip-load-files-faster
18
+ def rerequire(lib)
19
+ $".delete( "#{lib}.rb" )
20
+ require( lib.to_s )
21
+ end
22
+ alias rrq rerequire
23
+
24
+ # load shortcut
25
+ def ld(lib)
26
+ load lib.to_s + '.rb'
27
+ end
28
+
17
29
  # returns the last lines, needed for some copy_ methods
18
30
  def session_history(number_of_lines = context.instance_variable_get(:@line_no) )
19
31
  Readline::HISTORY.entries[-number_of_lines...-1]*"\n"
@@ -25,7 +37,13 @@ def reset!
25
37
  exit
26
38
  end
27
39
 
28
- def ruby_version(which = nil)
40
+ # just clear the screen
41
+ def clear
42
+ system 'clear'
43
+ end
44
+
45
+ # change ruby version (requires rvm)
46
+ def use_ruby(which = nil)
29
47
  # test if installed
30
48
  unless `rvm -v` =~ /Seguin/
31
49
  raise 'Ruby Version Manager must be installed to use this command'
@@ -53,7 +71,7 @@ def ruby_version(which = nil)
53
71
  puts "Sorry, that Ruby version could not be found."
54
72
  end
55
73
  end
56
- alias use ruby_version
74
+ alias use use_ruby
57
75
 
58
76
  # load debugger, inspired by rdp
59
77
  def dbg
@@ -64,3 +82,19 @@ def dbg
64
82
  throw "Sorry, unable to load ruby-debug gem for debugger: #{e}"
65
83
  end
66
84
  end
85
+
86
+ class Object
87
+ # display ri entry
88
+ def ri(meth)
89
+ ri_cmd = 'ri'
90
+ if instance_of?( Kernel ) || instance_of?( Object )
91
+ puts `#{ri_cmd} #{meth}`
92
+ elsif is_a? Module
93
+ puts `#{ri_cmd} #{self}.#{meth}`
94
+ else
95
+ puts `#{ri_cmd} #{self.class}##{meth}`
96
+ end
97
+ end
98
+ end
99
+
100
+ # J-_-L
@@ -70,13 +70,13 @@ Irbtools.add_library 'zucker/debug' # nice debug printing (q, o, c, .m, .d)
70
70
  Irbtools.add_library 'ap' # nice debug printing (ap)
71
71
  Irbtools.add_library 'yaml' # nice debug printing (y)
72
72
  Irbtools.add_library 'g' # nice debug printing (g) - MacOS only :/
73
- Irbtools.add_library 'guessmethod' # automatically correct typos (method_missing hook)
73
+ Irbtools.add_library 'guessmethod', true # automatically correct typos (method_missing hook)
74
74
  Irbtools.add_library 'interactive_editor' # lets you open vim (or your favourite editor), hack something, save it, and it's loaded in the current irb session
75
- #Irbtools.add_library 'zucker/all' # see rubyzucker.info
75
+ #Irbtools.add_library 'zucker/all' # see rubyzucker.info
76
76
 
77
77
  Irbtools.add_library :boson do
78
- undef :install if respond_to?( :install, true )
79
- Boson.start :verbose => false
78
+ undef :install if respond_to?( :install, true )
79
+ Boson.start :verbose => false
80
80
  end
81
81
 
82
82
  # remove failing/not needed libs
@@ -89,8 +89,7 @@ unless OS.mac?
89
89
  end
90
90
 
91
91
  if RubyVersion.is? 1.9
92
- Irbtools.libraries -= %w[guessmethod]
92
+ Irbtools.libraries_in_proc -= %w[guessmethod]
93
93
  end
94
94
 
95
95
  # J-_-L
96
-
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: irbtools
3
3
  version: !ruby/object:Gem::Version
4
- hash: 11
4
+ hash: 63
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 7
9
- - 4
10
- version: 0.7.4
8
+ - 8
9
+ - 0
10
+ version: 0.8.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jan Lelis
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-10-09 00:00:00 +02:00
18
+ date: 2010-10-12 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -211,7 +211,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
211
211
  - 0
212
212
  version: "0"
213
213
  requirements:
214
- - You need to add http://merbi.st to your gem sources (irb_rocket)
214
+ - "It's recommended to use the irb_rocket gem: gem install irb_rocket --source http://merbi.st"
215
215
  rubyforge_project:
216
216
  rubygems_version: 1.3.7
217
217
  signing_key: