irt 1.1.4 → 1.1.5
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 +16 -11
- data/VERSION +1 -1
- data/bin/irt +10 -1
- data/lib/irt.rb +1 -1
- data/lib/irt/commands/{system.rb → edit.rb} +1 -13
- data/lib/irt/commands/help.rb +5 -0
- data/lib/irt/extensions/irb/commands.rb +2 -2
- data/lib/irt/extensions/irb/context.rb +18 -12
- data/lib/irt/extensions/rails.rb +14 -8
- data/lib/irt/hunks.rb +0 -6
- data/lib/irt/log.rb +6 -2
- data/lib/irt/ruby_version.rb +6 -6
- metadata +41 -7
data/README.markdown
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# IRT
|
2
2
|
|
3
3
|
Interactive Ruby Tools - Improved irb and rails console with a lot of easy and powerful tools.
|
4
4
|
|
@@ -76,7 +76,7 @@ IRT uses colors consistently, so you will have an instant feedback about what a
|
|
76
76
|
- __cyan__ for files, saved values (and object 'a' in a diff)
|
77
77
|
- __magenta__ for interactive sessions
|
78
78
|
- __black/white__ for generic stdin/stdout and inspecting sessions (e.g. 'irt my_obj')
|
79
|
-
- __blue__ for the Virtual Log and generic labels
|
79
|
+
- __blue__ for the Virtual Log, Rails Log and generic labels
|
80
80
|
- __yellow__ for result echo (not setting last value), for binding sessions and for tests with diffs
|
81
81
|
- __green__ for result echo (setting last value) (and object 'b' in a diff)
|
82
82
|
- __red__ for erros, exceptions and rerun
|
@@ -102,23 +102,21 @@ There are 4 irt modes / session types: file, interactive, inspect, binding.
|
|
102
102
|
IRT always start in file mode, which simply means that it will execute the code in a file.
|
103
103
|
Indeed you launch irt passing a path argument of one or more existing files or dirs. If any path does not refer
|
104
104
|
to any existing file, irt will ask you to confirm that you want to create that file. Eventually
|
105
|
-
if you don't pass any path argument, irt will create a temporary empty file.
|
106
|
-
|
107
|
-
A new or temporary created file contains just one statement: 'irt' which will open an interactive session.
|
105
|
+
if you don't pass any path argument, irt will create a temporary one-empty-line file.
|
108
106
|
|
109
107
|
Notice: When you pass a dir as the path, irt will recursively execute all the '.irt' files in it, so suffixing
|
110
108
|
with '.irt' the files is not just a convention. It allows to skyp any non .irt file, like libraries or files
|
111
|
-
used with the '
|
109
|
+
used with the 'insert\_file' directive.
|
112
110
|
|
113
111
|
#### Note about new files
|
114
112
|
|
115
113
|
The new created files are implicitly run with the -i (--interative-eol) flag by default.
|
116
114
|
That flag instruct irt to open an interactive session at the end of the file, so you will have the possibilty
|
117
115
|
to add your statements. As long as you rerun the file (with the 'rr' command) IRT will remember the flag,
|
118
|
-
anyway, if the session ends and you have to re-launch it from the command line, you must pass the -
|
116
|
+
anyway, if the session ends and you have to re-launch it from the command line, you must pass the -i flag
|
119
117
|
explicitly or no interactive session will be opened automatically.
|
120
118
|
|
121
|
-
You can save any running file as another file with the '
|
119
|
+
You can save any running file as another file with the 'save\_as' command.
|
122
120
|
|
123
121
|
### Interactive Sessions (magenta)
|
124
122
|
|
@@ -397,7 +395,7 @@ Besides it offers a very useful contextual search, that will find the ri doc of
|
|
397
395
|
Example:
|
398
396
|
|
399
397
|
# autocompletion
|
400
|
-
>> ri "any string".eq[TAB]
|
398
|
+
>> ri "any string".eq[TAB][TAB]
|
401
399
|
.eql? .equal?
|
402
400
|
|
403
401
|
>> ri "a string".eql?
|
@@ -424,9 +422,16 @@ The status line shows the nesting status of your sessions: each time you open a
|
|
424
422
|
session or exit from the current session it is automatically printed.
|
425
423
|
You can also print it with 'status' (or 'ss') at any time.
|
426
424
|
|
427
|
-
###
|
425
|
+
### Quasi-shell
|
426
|
+
|
427
|
+
Save some typing for system calls and avoid to open a shell.
|
428
|
+
You can use the '$' as an alias of 'system' with the difference that you don't need to use quotes
|
429
|
+
(although quotes will work anyway), and the command will not be logged. Examples:
|
428
430
|
|
429
|
-
|
431
|
+
>> $ ls -F
|
432
|
+
>> $ tail /some/path
|
433
|
+
>> $ git rebase -i HEAD~5
|
434
|
+
>> $ cat #{file_path}
|
430
435
|
|
431
436
|
### FileUtils
|
432
437
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.1.
|
1
|
+
1.1.5
|
data/bin/irt
CHANGED
@@ -84,6 +84,15 @@ end
|
|
84
84
|
|
85
85
|
cmd_format = if File.exists?('./config/environment.rb')
|
86
86
|
if File.exists?('./script/rails')
|
87
|
+
gemfile = File.read('Gemfile')
|
88
|
+
unless gemfile.match(/\bgem\b.+\birt\b/)
|
89
|
+
Prompter.say_warning %(The Gemfile doesn't look to include any 'gem "irt"' statement.\nIRT will probably not work until you add it!)
|
90
|
+
Prompter.yes?("Do you want to add irt to your Gemfile?", :hint => '[enter=y|n]', :default => 'y') do
|
91
|
+
File.open('Gemfile', 'a') do |f|
|
92
|
+
f.puts %(gem "irt")
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
87
96
|
'rails c %s %s %s'
|
88
97
|
elsif File.exists?('./script/console')
|
89
98
|
'ruby script/console --irb="irt_rails2 %s"'
|
@@ -101,7 +110,7 @@ ENV['IRT_INTERACTIVE_EOF'] = options[:interactive_eof].inspect if options[:inter
|
|
101
110
|
files.each do |file|
|
102
111
|
ENV['IRT_COMMAND'] = sprintf cmd_format, file, options[:irb_options], options[:rails_env]
|
103
112
|
unless system(ENV['IRT_COMMAND'])
|
104
|
-
puts
|
113
|
+
puts Dye.sgr(:clear) if Dye.color?
|
105
114
|
exit(1)
|
106
115
|
end
|
107
116
|
end
|
data/lib/irt.rb
CHANGED
@@ -99,9 +99,9 @@ module IRT
|
|
99
99
|
|
100
100
|
def init_files
|
101
101
|
@irt_file = IRB.conf[:SCRIPT]
|
102
|
+
require 'irt/extensions/rails' if defined?(ActiveSupport::BufferedLogger)
|
102
103
|
@log = Log.new
|
103
104
|
@log.print_running_file
|
104
|
-
require 'irt/extensions/rails' if defined?(ActiveSupport::BufferedLogger)
|
105
105
|
IRT::Directives.load_helper_files
|
106
106
|
end
|
107
107
|
|
@@ -1,18 +1,6 @@
|
|
1
1
|
module IRT
|
2
2
|
module Commands
|
3
|
-
module
|
4
|
-
|
5
|
-
def cat(*args)
|
6
|
-
ensure_session
|
7
|
-
return system "cat #{context.file_line_pointers.first}" if args.empty?
|
8
|
-
system "cat #{args * ' '}"
|
9
|
-
end
|
10
|
-
|
11
|
-
def ls(*args)
|
12
|
-
ensure_session
|
13
|
-
args = %w[.] if args.empty?
|
14
|
-
system "ls #{args * ' '}"
|
15
|
-
end
|
3
|
+
module Edit
|
16
4
|
|
17
5
|
def copy_lines
|
18
6
|
ensure_session
|
data/lib/irt/commands/help.rb
CHANGED
@@ -69,12 +69,17 @@ module IRT
|
|
69
69
|
ri n Search the ri doc for the method n in a multiple
|
70
70
|
choices list
|
71
71
|
|
72
|
+
#{label(" Rails Commands ", :interactive_color) + IRT.dye(" (only available for Rails Apps)", :interactive_color, :bold)}
|
73
|
+
rails_log_on Turn the rails log-in-console ON
|
74
|
+
rails_log_off Turn the rails log-in-console OFF
|
75
|
+
|
72
76
|
#{label " Misc Commands ", :interactive_color}
|
73
77
|
x|q Aliases for exit (from the current session)
|
74
78
|
xx|qq Aliases for abort (abort the irt process)
|
75
79
|
status|ss Prints the session status line
|
76
80
|
rerun|rr Reruns the same file
|
77
81
|
irt_help|hh Shows this screen
|
82
|
+
$ shell_command Alias for system("shell_command") (no quotes needed)
|
78
83
|
|
79
84
|
#{label " Session Directives ", :file_color}
|
80
85
|
irt Opens an interactive session which retains the
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'irt/commands/log'
|
2
2
|
require 'irt/commands/test'
|
3
|
-
require 'irt/commands/
|
3
|
+
require 'irt/commands/edit'
|
4
4
|
require 'irt/commands/core'
|
5
5
|
require 'irt/commands/help'
|
6
6
|
require 'irt/commands/ri'
|
@@ -11,7 +11,7 @@ module IRB
|
|
11
11
|
|
12
12
|
include IRT::Commands::Log
|
13
13
|
include IRT::Commands::Test
|
14
|
-
include IRT::Commands::
|
14
|
+
include IRT::Commands::Edit
|
15
15
|
include IRT::Commands::Core
|
16
16
|
include IRT::Commands::Help
|
17
17
|
include IRT::Commands::Ri
|
@@ -38,18 +38,18 @@ module IRB
|
|
38
38
|
end
|
39
39
|
log_file_line(line_no) if irt_mode == :file
|
40
40
|
begin
|
41
|
-
# ri arg to string
|
42
|
-
if m = line.match(/^(\s*ri[ \t]+)(.+)$/)
|
43
|
-
pre, to_search = m.captures
|
44
|
-
line = "#{pre}#{to_search.inspect}" unless to_search.match(/^('|").+\1$/)
|
45
|
-
else
|
46
|
-
IRT::Commands::Ri.reset_choices_map
|
47
|
-
end
|
48
41
|
# skip setting last_value for non_setting_commands
|
49
|
-
if line =~ /^\s*(#{IRT.log.non_setting_commands
|
42
|
+
if line =~ /^\s*(#{quoted_option_string(IRT.log.non_setting_commands)})(?:[ \t]+|\b)(.+)*/
|
43
|
+
command, args = $1, $2
|
44
|
+
if command =~ /^(\$|ri)$/ && irt_mode != :file
|
45
|
+
cmd = command == '$' ? 'system' : command
|
46
|
+
args = "%(#{args})" unless args.match(/^('|").+\1$/)
|
47
|
+
line = "#{cmd} #{args}"
|
48
|
+
end
|
49
|
+
IRT::Commands::Ri.reset_choices_map unless command == 'ri'
|
50
50
|
self.echo = false
|
51
51
|
res = @workspace.evaluate(self, line, irb_path, line_no)
|
52
|
-
if
|
52
|
+
if command =~ /^(#{IRT.log.ignored_echo_commands * '|'})$/
|
53
53
|
output_ignored_echo_value(res)
|
54
54
|
end
|
55
55
|
else
|
@@ -59,14 +59,14 @@ module IRB
|
|
59
59
|
rescue Exception => e
|
60
60
|
@exception_raised = true
|
61
61
|
process_exception(e)
|
62
|
-
print
|
62
|
+
print Dye.sgr(IRT.dye_styles[:error_color]) if Dye.color?
|
63
63
|
raise
|
64
64
|
else
|
65
65
|
log_session_line(line, line_no) unless irt_mode == :file
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
69
|
-
|
69
|
+
[:prompt_i, :prompt_s, :prompt_c, :prompt_n].each do |m|
|
70
70
|
define_method(m) do
|
71
71
|
pr = instance_variable_get("@#{m}")
|
72
72
|
col_pr = IRT.dye pr, "#{irt_mode}_color".to_sym
|
@@ -95,6 +95,10 @@ module IRB
|
|
95
95
|
|
96
96
|
private
|
97
97
|
|
98
|
+
def quoted_option_string(arr)
|
99
|
+
arr.map{|c|Regexp.quote(c.to_s)} * '|'
|
100
|
+
end
|
101
|
+
|
98
102
|
def process_exception(e)
|
99
103
|
bktr = e.backtrace.reject do |m|
|
100
104
|
workspace.filter_backtrace(m).nil? || !IRT.debug && File.expand_path(m).match(/^#{IRT.lib_path}/)
|
@@ -141,7 +145,9 @@ private
|
|
141
145
|
i = -1
|
142
146
|
str.each_line do |l|
|
143
147
|
@last_line_no = line_no + i+=1
|
144
|
-
IRT.log.
|
148
|
+
unless l =~ /^\s*(#{quoted_option_string(IRT.log.ignored_commands)})/
|
149
|
+
IRT.log.add_line l, @last_line_no
|
150
|
+
end
|
145
151
|
end
|
146
152
|
end
|
147
153
|
|
data/lib/irt/extensions/rails.rb
CHANGED
@@ -16,16 +16,22 @@ class ActiveSupport::BufferedLogger
|
|
16
16
|
|
17
17
|
end
|
18
18
|
|
19
|
-
module
|
20
|
-
module
|
19
|
+
module IRT
|
20
|
+
module Commands
|
21
|
+
module Rails
|
21
22
|
|
22
|
-
|
23
|
-
IRT.rails_log = true
|
24
|
-
end
|
23
|
+
extend self
|
25
24
|
|
26
|
-
|
27
|
-
|
28
|
-
|
25
|
+
def rails_log_on
|
26
|
+
IRT.rails_log = true
|
27
|
+
end
|
29
28
|
|
29
|
+
def rails_log_off
|
30
|
+
IRT.rails_log = false
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
30
34
|
end
|
31
35
|
end
|
36
|
+
|
37
|
+
IRB::ExtendCommandBundle.send :include, IRT::Commands::Rails
|
data/lib/irt/hunks.rb
CHANGED
data/lib/irt/log.rb
CHANGED
@@ -5,11 +5,15 @@ module IRT
|
|
5
5
|
attr_reader :status
|
6
6
|
|
7
7
|
def initialize
|
8
|
-
@ignored_echo_commands = FileUtils.own_methods
|
8
|
+
@ignored_echo_commands = FileUtils.own_methods + [:_]
|
9
|
+
@ignored_echo_commands += IRT::Commands::Rails.own_methods if defined?(IRT::Commands::Rails)
|
10
|
+
@ignored_echo_commands = @ignored_echo_commands.map(&:to_sym)
|
9
11
|
@ignored_commands = @ignored_echo_commands +
|
10
12
|
IRB::ExtendCommandBundle.instance_methods +
|
11
|
-
|
13
|
+
[ :p, :pp, :ap, :y, :puts, :print, :irt, :irb, :'$']
|
14
|
+
@ignored_commands = @ignored_commands.map(&:to_sym)
|
12
15
|
@non_setting_commands = @ignored_commands + IRT::Directives.own_methods
|
16
|
+
@non_setting_commands = @non_setting_commands.map(&:to_sym)
|
13
17
|
@tail_size = tail_size || 10
|
14
18
|
self << FileHunk.new(IRT.irt_file)
|
15
19
|
@status = [[File.basename(IRT.irt_file), :file]]
|
data/lib/irt/ruby_version.rb
CHANGED
@@ -1,20 +1,20 @@
|
|
1
1
|
module IRT
|
2
2
|
module RubyVersion
|
3
3
|
|
4
|
-
extend self
|
5
|
-
|
6
4
|
class Version < Array
|
7
5
|
include Comparable
|
8
6
|
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
def initialize(version)
|
8
|
+
replace version.split('.').map(&:to_i)
|
9
|
+
end
|
12
10
|
end
|
13
11
|
|
12
|
+
extend self
|
13
|
+
|
14
14
|
[:>, :>=, :<, :<=, :==, :between?].each do |m|
|
15
15
|
define_method(m) do |*args|
|
16
16
|
vers = args.map{|a| Version.new(a)}
|
17
|
-
Version.new.send m, *vers
|
17
|
+
Version.new(RUBY_VERSION).send m, *vers
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
metadata
CHANGED
@@ -1,8 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: irt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
4
|
+
hash: 25
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 1
|
8
|
+
- 1
|
9
|
+
- 5
|
10
|
+
version: 1.1.5
|
6
11
|
platform: ruby
|
7
12
|
authors:
|
8
13
|
- Domizio Demichelis
|
@@ -10,7 +15,7 @@ autorequire:
|
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
17
|
|
13
|
-
date: 2011-02-
|
18
|
+
date: 2011-02-06 00:00:00 -04:00
|
14
19
|
default_executable:
|
15
20
|
dependencies:
|
16
21
|
- !ruby/object:Gem::Dependency
|
@@ -21,6 +26,11 @@ dependencies:
|
|
21
26
|
requirements:
|
22
27
|
- - ">="
|
23
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 25
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
- 1
|
33
|
+
- 1
|
24
34
|
version: 0.1.1
|
25
35
|
type: :runtime
|
26
36
|
version_requirements: *id001
|
@@ -32,6 +42,11 @@ dependencies:
|
|
32
42
|
requirements:
|
33
43
|
- - ">="
|
34
44
|
- !ruby/object:Gem::Version
|
45
|
+
hash: 25
|
46
|
+
segments:
|
47
|
+
- 0
|
48
|
+
- 1
|
49
|
+
- 1
|
35
50
|
version: 0.1.1
|
36
51
|
type: :runtime
|
37
52
|
version_requirements: *id002
|
@@ -43,18 +58,29 @@ dependencies:
|
|
43
58
|
requirements:
|
44
59
|
- - ">="
|
45
60
|
- !ruby/object:Gem::Version
|
61
|
+
hash: 31
|
62
|
+
segments:
|
63
|
+
- 0
|
64
|
+
- 1
|
65
|
+
- 2
|
46
66
|
version: 0.1.2
|
47
67
|
type: :runtime
|
48
68
|
version_requirements: *id003
|
49
69
|
- !ruby/object:Gem::Dependency
|
50
|
-
name:
|
70
|
+
name: fastri
|
51
71
|
prerelease: false
|
52
72
|
requirement: &id004 !ruby/object:Gem::Requirement
|
53
73
|
none: false
|
54
74
|
requirements:
|
55
75
|
- - ">="
|
56
76
|
- !ruby/object:Gem::Version
|
57
|
-
|
77
|
+
hash: 81
|
78
|
+
segments:
|
79
|
+
- 0
|
80
|
+
- 3
|
81
|
+
- 1
|
82
|
+
- 1
|
83
|
+
version: 0.3.1.1
|
58
84
|
type: :runtime
|
59
85
|
version_requirements: *id004
|
60
86
|
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.
|
@@ -83,10 +109,10 @@ files:
|
|
83
109
|
- irtrc
|
84
110
|
- lib/irt.rb
|
85
111
|
- lib/irt/commands/core.rb
|
112
|
+
- lib/irt/commands/edit.rb
|
86
113
|
- lib/irt/commands/help.rb
|
87
114
|
- lib/irt/commands/log.rb
|
88
115
|
- lib/irt/commands/ri.rb
|
89
|
-
- lib/irt/commands/system.rb
|
90
116
|
- lib/irt/commands/test.rb
|
91
117
|
- lib/irt/differ.rb
|
92
118
|
- lib/irt/directives.rb
|
@@ -117,17 +143,25 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
117
143
|
requirements:
|
118
144
|
- - ">="
|
119
145
|
- !ruby/object:Gem::Version
|
146
|
+
hash: 3
|
147
|
+
segments:
|
148
|
+
- 0
|
120
149
|
version: "0"
|
121
150
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
122
151
|
none: false
|
123
152
|
requirements:
|
124
153
|
- - ">="
|
125
154
|
- !ruby/object:Gem::Version
|
155
|
+
hash: 23
|
156
|
+
segments:
|
157
|
+
- 1
|
158
|
+
- 3
|
159
|
+
- 6
|
126
160
|
version: 1.3.6
|
127
161
|
requirements: []
|
128
162
|
|
129
163
|
rubyforge_project:
|
130
|
-
rubygems_version: 1.
|
164
|
+
rubygems_version: 1.3.7
|
131
165
|
signing_key:
|
132
166
|
specification_version: 3
|
133
167
|
summary: Interactive Ruby Tools - Improved irb and rails console with a lot of easy and powerful tools.
|