irt 1.2.0.p01 → 1.2.0.p02
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/README.markdown +38 -4
- data/VERSION +1 -1
- data/bin/irt +14 -8
- data/lib/irt/commands/core.rb +1 -1
- data/lib/irt/commands/help.rb +5 -9
- data/lib/irt/commands/test.rb +2 -2
- data/lib/irt/extensions/irb.rb +14 -1
- data/lib/irt/extensions/irb/commands.rb +1 -0
- data/lib/irt/extensions/rails.rb +14 -0
- data/lib/irt/history.rb +5 -0
- data/lib/irt/session.rb +0 -1
- data/lib/irt/utils.rb +18 -10
- metadata +7 -41
data/README.markdown
CHANGED
@@ -12,8 +12,9 @@ that will make your life a lot easier.
|
|
12
12
|
|
13
13
|
- clean colored output for easy reading
|
14
14
|
- 3 types of sessions: interactive, inspecting and binding
|
15
|
-
- irb opening from your code (or erb templates) as binding session
|
16
|
-
-
|
15
|
+
- irb/irt opening from your code (or erb templates) as a binding session
|
16
|
+
- irb/irt opening from inside the Rails Server window
|
17
|
+
- optional colored Rails log in the console
|
17
18
|
- contextual ri doc with completion
|
18
19
|
- recording of session steps with filtering
|
19
20
|
- easy testing based on recorded steps
|
@@ -225,6 +226,18 @@ If you want to edit the running file, just type 'nano' or 'vi' without any argu
|
|
225
226
|
the file at the current line. Edit, save and exit from the editor, and you will continue your session
|
226
227
|
from the point you left. You can also 'rerun' the same file (or 'rr') when you need to reload the whole code.
|
227
228
|
|
229
|
+
### Rerun vs restart
|
230
|
+
|
231
|
+
When you make any change in an irt file being evaluated you should perform a 'rerun' (or 'rr')
|
232
|
+
in order to see the effect of your change.
|
233
|
+
The 'rerun' command will exit from all the opened sessions, call the at_exit procs and rerun the same file
|
234
|
+
without reloading any library or required file. That is the fastest behaviour when your changes are limited to any irt file.
|
235
|
+
|
236
|
+
If you change some library in any required file and you wants to rerun the same file against the changes,
|
237
|
+
you need to 'restart' (or 'rs') the whole process, so all the required files will be re-evaluated
|
238
|
+
and your irt file will be rerun in the new context. That is notably slower in complex application, but guarantees
|
239
|
+
a fresh loaded environment.
|
240
|
+
|
228
241
|
## Editing Tools
|
229
242
|
|
230
243
|
### In Place Editing
|
@@ -590,21 +603,40 @@ irt_helper.rb #1, #2 and #3. If you are running the testA.irt and testB.irt, IRT
|
|
590
603
|
require the irt_helper.rb #1, #2. But if you run the same from the first_level dir, the irt_helper.rb #1
|
591
604
|
will not be loaded, so be careful to be in the right dir to make it work properly.
|
592
605
|
|
606
|
+
Notice: the irt helpers files are 'require'd (not 'load'ed). For that reason they are
|
607
|
+
suitable for adding constants, methods, require(s) that will be loaded only once.
|
608
|
+
If you change any irt helper you should 'restart (or 'rs') once before your changes get reloaded.
|
609
|
+
|
593
610
|
## Rails
|
594
611
|
|
595
612
|
You can use irt instead of the standard Rails console, by just calling the irt executable from
|
596
613
|
any Rails application dir. If you want to skip the autoloading of the Rails app even from that
|
597
614
|
dir, you must pass the -n option (--no-rails).
|
598
615
|
|
616
|
+
$ cd my_rails_app
|
617
|
+
|
618
|
+
# will use the test environment in sandbox mode
|
619
|
+
$ irt -b--sandbox -etest
|
620
|
+
|
621
|
+
# will open a normal irt console, skipping the rails app
|
622
|
+
$ irt -n
|
623
|
+
|
599
624
|
By default IRT will output the rails log (colored in blue) right in the console.
|
600
625
|
You can switch the rails log ON or OFF by using the 'rails\_log\_on' (or 'rlo') and 'rails\_log\_off' (or 'rlf')
|
601
626
|
commands in any session, besides you can set the option IRT.rails_log to true or false in the ~/.irtrc file.
|
602
627
|
|
628
|
+
## Rerun, restart, reload!-rerun
|
629
|
+
|
630
|
+
The 'rerun' (or 'rr') irt command in rails will also perform a 'reload!' first, so if you are in development mode
|
631
|
+
your changes will be reloaded, so the command should do what you need: if it doesn't you
|
632
|
+
should use the regular 'restart' (or 'rs') as the last resort. The 'restart' causes the Rails environment
|
633
|
+
to be fully reloaded, so it is slower, but guaranteed.
|
634
|
+
|
603
635
|
### Rails Server Sessions
|
604
636
|
|
605
637
|
The server sessions are a quick way to interact with your application while your server is running,
|
606
638
|
without the need to launch a the irt executable: you can do almost everything you can from a regular IRT session
|
607
|
-
launched from the irt executable.
|
639
|
+
launched from the irt executable, besides you have access to the server internals.
|
608
640
|
|
609
641
|
If you want to open a session from your Rails code or from a template while the server is running,
|
610
642
|
you don't have to use the IRT executable: you can just add an 'irt binding' statement where you want
|
@@ -627,7 +659,9 @@ you will be asked if you want to shutdown the server or open an IRT session.
|
|
627
659
|
Notice that the execution of the web response is halted until you exit from the session.
|
628
660
|
When you exit, the response process will be resumed, and the server will return to its normal behaviour.
|
629
661
|
|
630
|
-
Note: The Server Sessions are known to work with WEBrick and Mongrel (using Rack)
|
662
|
+
Note: The Server Sessions are known to work with WEBrick and Mongrel (using Rack).
|
663
|
+
WEBrick might spit some error closing an Interactive Session, while it is ok
|
664
|
+
with Binding Sessions. Mongrel works perfectly.
|
631
665
|
|
632
666
|
### Rails 3
|
633
667
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.2.0.
|
1
|
+
1.2.0.p02
|
data/bin/irt
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
+
at_exit{ Dye.print_reset_colors }
|
4
|
+
|
3
5
|
require 'rubygems'
|
4
6
|
require 'fileutils'
|
5
7
|
require 'optparse'
|
@@ -13,9 +15,12 @@ optparse = OptionParser.new do |opts|
|
|
13
15
|
|
14
16
|
opts.banner = <<EOB
|
15
17
|
Interactive Ruby Tools:
|
16
|
-
Improved irb and
|
18
|
+
Improved irb and Rails Console with lots of easy and powerful tools.
|
17
19
|
Usage:
|
18
|
-
irt [
|
20
|
+
irt [PATHS] [options]
|
21
|
+
Paths:
|
22
|
+
List of irt files and/or dirs containing irt files.
|
23
|
+
If PATHS is omitted IRT will create and run a temporary empty file.
|
19
24
|
Options:
|
20
25
|
EOB
|
21
26
|
|
@@ -25,7 +30,7 @@ EOB
|
|
25
30
|
end
|
26
31
|
|
27
32
|
options[:irb_options] = nil
|
28
|
-
opts.on( '-b', '--irb-options [OPTIONS]', 'Sets the irb or
|
33
|
+
opts.on( '-b', '--irb-options [OPTIONS]', 'Sets the irb or Rails Console options' ) do |opt|
|
29
34
|
options[:irb_options] = opt
|
30
35
|
end
|
31
36
|
|
@@ -58,7 +63,11 @@ puts copy
|
|
58
63
|
|
59
64
|
paths = if ARGV.empty?
|
60
65
|
options[:interactive_eof] = true
|
61
|
-
|
66
|
+
tmp_path = IRT::Utils.create_tmp_file do |as_file, tmp_path|
|
67
|
+
ENV['IRT_COMMAND'] = ENV['IRT_COMMAND'].sub(/#{Regexp.quote(tmp_path)}/, as_file)
|
68
|
+
exec ENV['IRT_COMMAND']
|
69
|
+
end
|
70
|
+
[ tmp_path ]
|
62
71
|
else
|
63
72
|
ARGV.map {|p| File.expand_path(p) }
|
64
73
|
end
|
@@ -103,8 +112,5 @@ ENV['IRT_INTERACTIVE_EOF'] = options[:interactive_eof].inspect if options[:inter
|
|
103
112
|
|
104
113
|
files.each do |file|
|
105
114
|
ENV['IRT_COMMAND'] = sprintf cmd_format, options[:irb_options], file, options[:rails_env]
|
106
|
-
unless system
|
107
|
-
puts Dye.sgr(:clear) if Dye.color?
|
108
|
-
exit(1)
|
109
|
-
end
|
115
|
+
exit(1) unless system ENV['IRT_COMMAND']
|
110
116
|
end
|
data/lib/irt/commands/core.rb
CHANGED
data/lib/irt/commands/help.rb
CHANGED
@@ -5,7 +5,7 @@ module IRT
|
|
5
5
|
def irt_help
|
6
6
|
ensure_session
|
7
7
|
puts %(
|
8
|
-
#{label "
|
8
|
+
#{label " Irt Help ", :log_color}
|
9
9
|
- The #{IRT.dye "Commands", :interactive_color, :bold} are methods generally available in any IRT session
|
10
10
|
- The #{IRT.dye "Directives", :file_color, :bold} are methods available in any file but not in IRT sessions
|
11
11
|
- The #{IRT.dye "Extensions", :log_color, :bold} are methods available anywhere
|
@@ -13,8 +13,8 @@ module IRT
|
|
13
13
|
#{label " Inspecting Commands ", :interactive_color}
|
14
14
|
irt object Opens an inspecting session into object
|
15
15
|
vdiff|vd obj_a, obj_b Prints the visual diff of the yaml dump of 2 objects
|
16
|
-
|
17
|
-
|
16
|
+
p, pp, ap, y When invoked with no arguments print the last_value
|
17
|
+
(e.g. just type 'y' instead 'y _')
|
18
18
|
|
19
19
|
#{label " Log Commands ", :interactive_color}
|
20
20
|
log|l [limit] Prints limit or 'tail_size' lines of the virtual log
|
@@ -50,16 +50,12 @@ module IRT
|
|
50
50
|
by automatically choosing the :_eql?, or :_yaml_eql?
|
51
51
|
method, depending on the type of the last value (_)
|
52
52
|
add_test|tt desc Like add_test but adds a 'desc' directive first'
|
53
|
-
save_as|sa path Saves the current irt file as path
|
53
|
+
save_as|sa path Saves the current irt file as path
|
54
54
|
|
55
55
|
#{label " FileUtils Commands ", :interactive_color}
|
56
56
|
All the FileUtils methods are availabe as IRT Commands
|
57
57
|
(e.g. pwd, touch, mkdir, mv, cp, rm, rm_rf, compare_files, ...)
|
58
58
|
|
59
|
-
#{label " Enhanced Commands ", :interactive_color}
|
60
|
-
p, pp, ap, y When invoked with no arguments print the last_value
|
61
|
-
(e.g. just type 'y' instead 'y _')
|
62
|
-
|
63
59
|
#{label " Documentation Commands ", :interactive_color}
|
64
60
|
ri to_search Search the ri doc for to_search (no quotes needed)
|
65
61
|
ri obj.any_method Search the method.owner ri doc for of any_method
|
@@ -82,7 +78,7 @@ module IRT
|
|
82
78
|
run file Run an irt file (exiting from the current sessions)
|
83
79
|
rerun|rr Reruns the current irt file (exiting from the
|
84
80
|
current sessions)
|
85
|
-
restart|
|
81
|
+
restart|rs Restart the executable, reload IRT (and Rails) and
|
86
82
|
rerun the current file
|
87
83
|
irt_help|hh Shows this screen
|
88
84
|
sh command Alias for system("command") (no quotes needed)
|
data/lib/irt/commands/test.rb
CHANGED
data/lib/irt/extensions/irb.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'irb'
|
2
|
+
require 'irb/ext/save-history.rb'
|
2
3
|
require 'irt/extensions/irb/context'
|
3
4
|
require 'irt/extensions/irb/commands'
|
4
5
|
|
@@ -16,7 +17,6 @@ module IRB #:nodoc:
|
|
16
17
|
|
17
18
|
def IRB.init_config(ap_path)
|
18
19
|
original_init_config(ap_path)
|
19
|
-
|
20
20
|
@CONF[:AP_NAME] = 'irt'
|
21
21
|
@CONF[:PROMPT][:IRT] = { :PROMPT_I => "%02n >> ",
|
22
22
|
:PROMPT_S => ' "> ',
|
@@ -34,8 +34,21 @@ module IRB #:nodoc:
|
|
34
34
|
if IRB.CurrentContext.irt_mode == :file && !IRT::Session.exit_all?} \
|
35
35
|
if !!ENV['IRT_INTERACTIVE_EOF']
|
36
36
|
@CONF[:AT_EXIT] << proc{ IRT::Directives.test_summary }
|
37
|
+
@CONF[:AT_EXIT] << proc{ IRT::History.save_history }
|
37
38
|
@CONF[:RC_NAME_GENERATOR] = proc {|rc| File.expand_path '~/.irtrc' }
|
39
|
+
end
|
40
|
+
|
38
41
|
|
42
|
+
module HistorySavingAbility
|
43
|
+
def HistorySavingAbility.extended(obj)
|
44
|
+
# save_history has to be called just one time at exit
|
45
|
+
# IRB.conf[:AT_EXIT].push proc{obj.save_history}
|
46
|
+
obj.load_history
|
47
|
+
obj
|
48
|
+
end
|
39
49
|
end
|
40
50
|
|
41
51
|
end
|
52
|
+
|
53
|
+
require 'irt/history'
|
54
|
+
|
data/lib/irt/extensions/rails.rb
CHANGED
data/lib/irt/history.rb
ADDED
data/lib/irt/session.rb
CHANGED
@@ -36,7 +36,6 @@ module IRT
|
|
36
36
|
IRT.log.print_status unless mode == :file
|
37
37
|
old_trap = trap('SIGINT'){new_context.irb.signal_handle}
|
38
38
|
catch(:IRB_EXIT) { new_context.irb.eval_input }
|
39
|
-
# rethrow if there is a parent context, and it is a reading file
|
40
39
|
begin throw(:IRB_EXIT) ; rescue ArgumentError ; end if @@exit_all
|
41
40
|
ensure
|
42
41
|
IRT::Session.exit unless @@exit_all
|
data/lib/irt/utils.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'irt/prompter'
|
2
2
|
|
3
3
|
module IRT
|
4
|
+
|
4
5
|
module Utils
|
5
6
|
|
6
7
|
extend self
|
@@ -11,31 +12,38 @@ module IRT
|
|
11
12
|
return if IRT.initialized
|
12
13
|
puts IRT::Utils.copyright
|
13
14
|
ARGV.clear
|
14
|
-
tmp_path =
|
15
|
+
tmp_path = if run
|
16
|
+
create_tmp_file {|as_file| IRT::Session.run_file as_file}
|
17
|
+
else
|
18
|
+
create_tmp_file
|
19
|
+
end
|
15
20
|
ARGV.push tmp_path
|
16
21
|
IRB.start
|
17
22
|
end
|
18
23
|
|
19
|
-
def create_tmp_file(
|
24
|
+
def create_tmp_file(&block)
|
20
25
|
require 'tempfile'
|
21
26
|
tmp_file = Tempfile.new(['', '.irt'])
|
22
27
|
tmp_file << "\n" # one empty line makes irb of 1.9.2 happy
|
23
28
|
tmp_file.flush
|
24
|
-
|
25
|
-
|
29
|
+
# ENV used because with IRT.cli? 2 different processes need to access the same path
|
30
|
+
ENV['IRT_TMP_PATH'] = tmp_path = tmp_file.path
|
31
|
+
at_exit { check_save_tmp_file(tmp_file, &block) }
|
26
32
|
tmp_path
|
27
33
|
end
|
28
34
|
|
29
|
-
def save_as(as_file_local,
|
35
|
+
def save_as(as_file_local, source_path=IRT.irt_file, &block)
|
30
36
|
as_file = File.expand_path(as_file_local)
|
31
37
|
if File.exists?(as_file)
|
32
38
|
return false if IRT::Prompter.no? %(Do you want to overwrite "#{as_file}"?), :hint => '[y|<enter=n]', :default => 'n'
|
33
39
|
end
|
34
40
|
dirname = File.dirname(as_file)
|
35
41
|
FileUtils.mkdir_p(dirname) unless File.directory?(dirname)
|
36
|
-
FileUtils.cp
|
37
|
-
if
|
38
|
-
|
42
|
+
FileUtils.cp source_path, as_file
|
43
|
+
if block && IRT::Prompter.yes?( %(Do you want to run the file "#{as_file_local}" now?) )
|
44
|
+
# reset the tmpfile content so the at_exit proc will not be triggered
|
45
|
+
File.open(source_path, 'w'){|f| f.puts "\n"} if IRT.irt_file == Pathname.new(ENV['IRT_TMP_PATH']).realpath
|
46
|
+
block.call as_file, source_path
|
39
47
|
end
|
40
48
|
end
|
41
49
|
|
@@ -49,11 +57,11 @@ module IRT
|
|
49
57
|
|
50
58
|
private
|
51
59
|
|
52
|
-
def check_save_tmp_file(tmp_file,
|
60
|
+
def check_save_tmp_file(tmp_file, &block)
|
53
61
|
if tmp_file.size > 1
|
54
62
|
IRT::Prompter.yes? %(The template file has been modified, do you want to save it?) do
|
55
63
|
IRT::Prompter.choose %(Enter the file path to save:), /[\w0-9_]/ do |as_file|
|
56
|
-
save_as(as_file,
|
64
|
+
save_as(as_file, tmp_file.path, &block)
|
57
65
|
end
|
58
66
|
end
|
59
67
|
end
|
metadata
CHANGED
@@ -1,14 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: irt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 2
|
9
|
-
- 0
|
10
|
-
- p01
|
11
|
-
version: 1.2.0.p01
|
4
|
+
prerelease: 6
|
5
|
+
version: 1.2.0.p02
|
12
6
|
platform: ruby
|
13
7
|
authors:
|
14
8
|
- Domizio Demichelis
|
@@ -16,7 +10,7 @@ autorequire:
|
|
16
10
|
bindir: bin
|
17
11
|
cert_chain: []
|
18
12
|
|
19
|
-
date: 2011-02-
|
13
|
+
date: 2011-02-22 00:00:00 -04:00
|
20
14
|
default_executable:
|
21
15
|
dependencies:
|
22
16
|
- !ruby/object:Gem::Dependency
|
@@ -27,11 +21,6 @@ dependencies:
|
|
27
21
|
requirements:
|
28
22
|
- - ">="
|
29
23
|
- !ruby/object:Gem::Version
|
30
|
-
hash: 25
|
31
|
-
segments:
|
32
|
-
- 0
|
33
|
-
- 1
|
34
|
-
- 1
|
35
24
|
version: 0.1.1
|
36
25
|
type: :runtime
|
37
26
|
version_requirements: *id001
|
@@ -43,11 +32,6 @@ dependencies:
|
|
43
32
|
requirements:
|
44
33
|
- - ">="
|
45
34
|
- !ruby/object:Gem::Version
|
46
|
-
hash: 29
|
47
|
-
segments:
|
48
|
-
- 0
|
49
|
-
- 1
|
50
|
-
- 3
|
51
35
|
version: 0.1.3
|
52
36
|
type: :runtime
|
53
37
|
version_requirements: *id002
|
@@ -59,29 +43,18 @@ dependencies:
|
|
59
43
|
requirements:
|
60
44
|
- - ">="
|
61
45
|
- !ruby/object:Gem::Version
|
62
|
-
hash: 19
|
63
|
-
segments:
|
64
|
-
- 0
|
65
|
-
- 1
|
66
|
-
- 4
|
67
46
|
version: 0.1.4
|
68
47
|
type: :runtime
|
69
48
|
version_requirements: *id003
|
70
49
|
- !ruby/object:Gem::Dependency
|
71
|
-
name:
|
50
|
+
name: bri
|
72
51
|
prerelease: false
|
73
52
|
requirement: &id004 !ruby/object:Gem::Requirement
|
74
53
|
none: false
|
75
54
|
requirements:
|
76
55
|
- - ">="
|
77
56
|
- !ruby/object:Gem::Version
|
78
|
-
|
79
|
-
segments:
|
80
|
-
- 0
|
81
|
-
- 3
|
82
|
-
- 1
|
83
|
-
- 1
|
84
|
-
version: 0.3.1.1
|
57
|
+
version: 0.1.5
|
85
58
|
type: :runtime
|
86
59
|
version_requirements: *id004
|
87
60
|
description: If you use IRT in place of irb or rails console, you will have more tools that will make your life a lot easier.
|
@@ -125,6 +98,7 @@ files:
|
|
125
98
|
- lib/irt/extensions/method.rb
|
126
99
|
- lib/irt/extensions/object.rb
|
127
100
|
- lib/irt/extensions/rails.rb
|
101
|
+
- lib/irt/history.rb
|
128
102
|
- lib/irt/hunks.rb
|
129
103
|
- lib/irt/init.rb
|
130
104
|
- lib/irt/log.rb
|
@@ -146,25 +120,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
146
120
|
requirements:
|
147
121
|
- - ">="
|
148
122
|
- !ruby/object:Gem::Version
|
149
|
-
hash: 3
|
150
|
-
segments:
|
151
|
-
- 0
|
152
123
|
version: "0"
|
153
124
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
154
125
|
none: false
|
155
126
|
requirements:
|
156
127
|
- - ">="
|
157
128
|
- !ruby/object:Gem::Version
|
158
|
-
hash: 23
|
159
|
-
segments:
|
160
|
-
- 1
|
161
|
-
- 3
|
162
|
-
- 6
|
163
129
|
version: 1.3.6
|
164
130
|
requirements: []
|
165
131
|
|
166
132
|
rubyforge_project:
|
167
|
-
rubygems_version: 1.
|
133
|
+
rubygems_version: 1.5.0
|
168
134
|
signing_key:
|
169
135
|
specification_version: 3
|
170
136
|
summary: Interactive Ruby Tools - Improved irb and rails console with a lot of easy and powerful tools.
|