irt 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile ADDED
@@ -0,0 +1,60 @@
1
+ name = 'irt'
2
+
3
+ def ensure_clean(action, force=false)
4
+ if !force && ! `git status -s`.empty?
5
+ puts <<-EOS.gsub(/^ {6}/, '')
6
+ Rake task aborted: the working tree is dirty!
7
+ If you know what you are doing you can use \`rake #{action}[force]\`"
8
+ EOS
9
+ exit(1)
10
+ end
11
+ end
12
+
13
+ desc "Install the gem"
14
+ task :install, :force do |t, args|
15
+ ensure_clean(:install, args.force)
16
+ orig_version = version = File.read('VERSION').strip
17
+ begin
18
+ commit_id = `git log -1 --format="%h" HEAD`.strip
19
+ version = "#{orig_version}.#{commit_id}"
20
+ File.open('VERSION', 'w') {|f| f.puts version }
21
+ gem_name = "#{name}-#{version}.gem"
22
+ sh %(gem build #{name}.gemspec)
23
+ sh %(gem install #{gem_name} --local)
24
+ puts <<-EOS.gsub(/^ {6}/, '')
25
+
26
+ *******************************************************************************
27
+ * NOTICE *
28
+ *******************************************************************************
29
+ * The version id of locally installed gems is comparable to a --pre version: *
30
+ * i.e. it is alphabetically ordered (not numerically ordered), besides it *
31
+ * includes the sah1 commit id which is not aphabetically ordered, so be sure *
32
+ * your application picks the version you really intend to use *
33
+ *******************************************************************************
34
+
35
+ EOS
36
+ ensure
37
+ remove_entry_secure gem_name, true
38
+ File.open('VERSION', 'w') {|f| f.puts orig_version }
39
+ end
40
+ end
41
+
42
+ desc %(Remove all the "#{name}" installed gems and executables and install this version)
43
+ task :clean_install, :force do |t, args|
44
+ ensure_clean(:install, args.force)
45
+ sh %(gem uninstall #{name} --all --ignore-dependencies --executables)
46
+ Rake::Task['install'].invoke(args.force)
47
+ end
48
+
49
+ desc "Push the gem to rubygems.org"
50
+ task :push, :force do |t, args|
51
+ begin
52
+ ensure_clean(:push, args.force)
53
+ version = File.read('VERSION').strip
54
+ gem_name = "#{name}-#{version}.gem"
55
+ sh %(gem build #{name}.gemspec)
56
+ sh %(gem push #{gem_name})
57
+ ensure
58
+ remove_entry_secure gem_name, true
59
+ end
60
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.1.1
data/bin/irt ADDED
@@ -0,0 +1,101 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'irt'
5
+ require 'fileutils'
6
+ require 'tempfile'
7
+ require 'optparse'
8
+
9
+
10
+ copy = "irt #{IRT::VERSION} (c) 2010-2011 Domizio Demichelis".log_color.bold
11
+
12
+ options = {}
13
+
14
+ optparse = OptionParser.new do |opts|
15
+
16
+ opts.banner = <<EOB
17
+ Interactive Ruby Tools:
18
+ Improved irb and rails console with lots of easy and powerful tools.
19
+ Usage:
20
+ irt [PATH] [options]
21
+ Options:
22
+ EOB
23
+
24
+ options[:interactive_eof]
25
+ opts.on( '-i', '--interactive-eof', 'Opens an interactive session at EOF') do
26
+ options[:interactive_eof] = true
27
+ end
28
+
29
+ options[:irb_options] = nil
30
+ opts.on( '-b', '--irb-options [OPTIONS]', 'Sets the irb Options' ) do |opt|
31
+ options[:irb_options] = opt
32
+ end
33
+
34
+ options[:rails_env] = 'development'
35
+ opts.on( '-r', '--rails-env [ENVIRONMENT]', 'Sets the Rails Environment' ) do |env|
36
+ options[:rails_env] = env
37
+ end
38
+
39
+ opts.on( '-v', '--version', 'Shows the version and exits' ) do
40
+ puts IRT::VERSION
41
+ exit
42
+ end
43
+
44
+ opts.on( '-h', '--help', 'Display this screen' ) do
45
+ puts copy
46
+ puts opts
47
+ exit
48
+ end
49
+
50
+ end
51
+
52
+ optparse.parse!
53
+
54
+ puts copy
55
+
56
+ paths = if ARGV.empty?
57
+ options[:interactive_eof] = true
58
+ [ Tempfile.new(%w[tmp- .irt]).path ]
59
+ else
60
+ ARGV.map {|p| File.expand_path(p) }
61
+ end
62
+
63
+ files = paths.map do |path|
64
+ unless File.exists?(path)
65
+ next if IRT.prompter.no? %(Do you want to create the file "#{path}"?), :hint => '[<enter=y|n]', :default => 'y'
66
+ options[:interactive_eof] = true
67
+ dirname = File.dirname(path)
68
+ FileUtils.mkdir_p(dirname) unless File.directory?(dirname)
69
+ FileUtils.touch(path)
70
+ end
71
+ File.directory?(path) ? Dir.glob(File.join(path, '**/*.irt')) : path
72
+ end.flatten
73
+
74
+ if files.empty?
75
+ puts 'No *.irt files to run'
76
+ exit
77
+ end
78
+
79
+ cmd_format = if File.exists?('./config/environment.rb')
80
+ if File.exists?('./script/rails')
81
+ 'rails c %s %s %s'
82
+ elsif File.exists?('./script/console')
83
+ 'ruby script/console --irb="irt_rails2"'
84
+ end
85
+ else
86
+ 'irt_irb %s %s'
87
+ end
88
+
89
+ if cmd_format.match(/^ruby script\/console/)
90
+ ENV['RAILS_ENV'] ||= options[:rails_env]
91
+ end
92
+
93
+ ENV['IRT_INTERACTIVE_EOF'] = options[:interactive_eof].inspect if options[:interactive_eof]
94
+
95
+ files.each do |file|
96
+ ENV['IRT_COMMAND'] = sprintf cmd_format, file, options[:irb_options], options[:rails_env]
97
+ unless system(ENV['IRT_COMMAND'])
98
+ puts "\e[0m" if Colorer.color
99
+ exit(1)
100
+ end
101
+ end
data/bin/irt_irb ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'irt'
4
+ IRB.start
data/bin/irt_rails2 ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ argv = ARGV.dup
4
+ argv.pop
5
+ argv << ENV['IRT_FILE']
6
+ exec "irt_irb #{argv.join(' ')}"
@@ -0,0 +1,6 @@
1
+ In order to syntax-highlight *.irt files as ruby files in nano, you must add the following lines to your .nanorc file:
2
+
3
+ include "/path/to/irt.nanorc"
4
+
5
+ (change the "/path/to/irt.nanorc" to the real path where you store the irt.nanorc file included in this dir)
6
+
@@ -0,0 +1,86 @@
1
+ # Ruby syntax file with additional irt keywords - Distributed with the irt gem
2
+ # The regular expressions in this file have been copied
3
+ # and adapted from many sources
4
+
5
+ # Automatically use for '.rb' and '.irt' files
6
+ syntax "ruby" ".*\.*(rb|irt)$"
7
+
8
+ # Shebang
9
+ color brightcyan "^#!.*"
10
+
11
+ # Operators
12
+ color brightmagenta "\<not\>|\<and\>|\<or\>"
13
+ color brightmagenta "\*\*|!|~|\*|/|%|\+|-|&|<<|>>|\|\^|>|>=|<|<="
14
+ color brightmagenta "<=>|\|\||!=|=~|!~|&&|\+=|-=|=|\.\.|\.\.\."
15
+
16
+ # Keywords
17
+ color brightmagenta "\<(BEGIN|END|alias|and|begin|break|case)\>"
18
+ color brightmagenta "\<(class|def|defined|do|else|elsif|end)\>"
19
+ color brightmagenta "\<(ensure|for|if|in|module|next|not|or|redo)\>"
20
+ color brightmagenta "\<(rescue|retry|return|self|super|then|undef)\>"
21
+ color brightmagenta "\<(unless|until|when|while|yield)\>"
22
+
23
+ # Load
24
+ color brightgreen "\<(load|require)\>"
25
+
26
+ # FILE LINE END and similar markers
27
+ color brightyellow "\<__[A-Z_]+__\>"
28
+
29
+ # irt Keywords
30
+ color brightmagenta "\<(_eql|_yaml_eql|last_value_eql|last_yaml_eql)\?"
31
+ color brightmagenta "\<(desc|irt|capture|irt_at_exit|eval_file|insert_file)\>"
32
+
33
+ # Constants
34
+ color brightblue "(\$)?\<[A-Z]+[0-9A-Z_a-z]*\>"
35
+ color brightblue "::[A-Z]"
36
+
37
+ # Predefined Constants
38
+ color brightred "\<(TRUE|FALSE|NIL|STDIN|STDOUT|STDERR|ENV|ARGF|ARGV|DATA|RUBY_VERSION|RUBY_RELEASE_DATE|RUBY_PLATFORM)\>"
39
+
40
+ # Predefined Variables
41
+ color brightred "\$[^A-Za-z]" "\$-.\>" "\$std(err|in|out)\>"
42
+
43
+ # Object Variables
44
+ color green "(@|@@)\<[^:][a-z]+[0-9A-Z_a-z]*\>"
45
+
46
+ # Symbols
47
+ icolor red "[^:]:\<[0-9A-Z_]+\>"
48
+
49
+ # false, nil, true
50
+ color yellow "\<(false|nil|true)\>"
51
+
52
+ # Above must not match 'nil?'
53
+ color red "\<nil\?"
54
+
55
+ # Iterators
56
+ color brightgreen "\|\w*\|"
57
+
58
+ # Regular expressions
59
+ # color green "/(\\.|[^\\/])*/[imox]*"
60
+
61
+ ## Regular expressions
62
+ color brightmagenta "/([^/]|(\\/))*/[iomx]*" "%r\{([^}]|(\\}))*\}[iomx]*"
63
+
64
+ # Shell command expansion is in `backticks` or like %x{this}.
65
+ color cyan "`[^`]*`" "%x\{[^}]*\}"
66
+
67
+ ## Strings, double-quoted
68
+ color brightcyan ""([^"]|(\\"))*"" "%[QW]?\{[^}]*\}" "%[QW]?\([^)]*\)" "%[QW]?<[^>]*>" "%[QW]?\[[^]]*\]" "%[QW]?\$[^$]*\$" "%[QW]?\^[^^]*\^" "%[QW]?![^!]*!"
69
+
70
+ ## Strings, single-quoted
71
+ color cyan "'([^']|(\\'))*'" "%[qw]\{[^}]*\}" "%[qw]\([^)]*\)" "%[qw]<[^>]*>" "%[qw]\[[^]]*\]" "%[qw]\$[^$]*\$" "%[qw]\^[^^]*\^" "%[qw]![^!]*!"
72
+
73
+ # Escapes
74
+ color red "\\[0-7][0-7][0-7]|\\x[0-9a-fA-F][0-9a-fA-F]"
75
+ color red "\\[abefnrs]"
76
+ color red "(\\c|\\C-|\\M-|\\M-\\C-)."
77
+
78
+ # Expression substitution
79
+ color green "#\{[^}]*\}"
80
+
81
+ # Comments
82
+ color cyan "#[^{].*$" "#$"
83
+ color brightcyan "##[^{].*$" "##$"
84
+
85
+ # Multiline comments
86
+ color cyan start="^=begin" end="^=end"
data/goodies/vi/README ADDED
@@ -0,0 +1,5 @@
1
+ In order to syntax-highlight *.irt files as ruby files in vi, you must add the following lines to your .vimrc file:
2
+
3
+ syntax on
4
+ filetype on
5
+ au BufRead,BufNewFile *.irt set filetype=ruby
data/irt.gemspec ADDED
@@ -0,0 +1,29 @@
1
+ name = File.basename( __FILE__, '.gemspec' )
2
+ version = File.read(File.expand_path('../VERSION', __FILE__)).strip
3
+ require 'date'
4
+
5
+ Gem::Specification.new do |s|
6
+
7
+ s.authors = ["Domizio Demichelis"]
8
+ s.email = 'dd.nexus@gmail.com'
9
+ s.homepage = 'http://github.com/ddnexus/irt'
10
+ s.summary = 'Interactive Ruby Tools - Improved irb and rails console with a lot of easy and powerful tools.'
11
+ s.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.'
12
+
13
+ s.add_runtime_dependency('differ', [">= 0.1.1"])
14
+ s.add_runtime_dependency('colorer', [">= 0.7.0"])
15
+ s.add_runtime_dependency('prompter', [">= 0.1.1"])
16
+ s.add_runtime_dependency('fastri', [">= 0.3.1.1"])
17
+
18
+ s.executables = ['irt', 'irt_irb', 'irt_rails2']
19
+ s.files = `git ls-files -z`.split("\0") - %w[irt-tutorial.pdf]
20
+
21
+ s.name = name
22
+ s.version = version
23
+ s.date = Date.today.to_s
24
+
25
+ s.required_rubygems_version = ">= 1.3.6"
26
+ s.rdoc_options = ["--charset=UTF-8"]
27
+ s.require_paths = ["lib"]
28
+
29
+ end
data/irtrc ADDED
@@ -0,0 +1,48 @@
1
+ # IRT RC file
2
+ # ITR conf options
3
+
4
+ # set this to true if your prompt get messed up when you use the history
5
+ # IRT.fix_readline_prompt = false
6
+
7
+ # will open an interactie session if a test has diffs
8
+ # IRT.irt_on_diffs = true
9
+
10
+ # will print the log tail when an interactive session is opened
11
+ # IRT.tail_on_irt = false
12
+
13
+ # the lines you want to be printed as the tail
14
+ # IRT.log.tail_size = 10
15
+
16
+ # loads irt_helper.rb files automatically
17
+ # IRT.autoload_helper_files = true
18
+
19
+ # force true/false regardless the terminal ANSI support
20
+ # IRT.force_color = true
21
+
22
+ # the command that should set the clipboard to the last lines from STDIN
23
+ # default to 'pbcopy' on mac, 'xclip -selection c' on linux/unix and 'clip' on windoze
24
+ # IRT.copy_to_clipboard_command = 'your command'
25
+
26
+ # the format to build the command to launch nano
27
+ # IRT.nano_command_format = 'nano +%2$d %1$s'
28
+
29
+ # the format to build the command to launch vi
30
+ # IRT.vi_command_format ="vi -c 'startinsert' %1$s +%2$d"
31
+
32
+ # the format to build the command to launch the ri tool
33
+ # IRT.ri_command_format = "qri -f #{Colorer.color? ? 'ansi' : 'plain'} %s"
34
+
35
+ # add your command format if you want to use another editor than nano or vi
36
+ # default 'open -t %1$s' on MacOX; 'kde-open %1$s' or 'gnome-open %1$s' un unix/linux; '%1$s' on windoze
37
+ # IRT.edit_command_format ="your_preferred_GUI_editor %1$s +%2$d"
38
+
39
+ # any log-ignored-echo command you want to add
40
+ # IRT.log.ignored_echo_commands << %w[commandA commandB ...]
41
+
42
+ # any log-ignored command you want to add (includes all the log-ignored-echo commands)
43
+ # IRT.log.ignored_commands << %w[commandC commandD ...]
44
+
45
+ # any command that will not set the last value (includes all the log-ignored commands)
46
+ # IRT.log.non_setting_commands << %w[commandE commandF ...]
47
+
48
+ # add your stuff here
data/lib/irt.rb ADDED
@@ -0,0 +1,143 @@
1
+ require 'rubygems'
2
+ begin
3
+ require 'ap'
4
+ rescue LoadError
5
+ end
6
+
7
+ require 'pp'
8
+ require 'yaml'
9
+ require 'rbconfig'
10
+ require 'pathname'
11
+ require 'irt/extensions/kernel'
12
+ require 'irt/extensions/object'
13
+ require 'irt/extensions/method'
14
+ require 'irt/extensions/irb'
15
+ require 'irb/completion'
16
+ require 'colorer'
17
+ require 'irt/log'
18
+ require 'irt/hunks'
19
+ require 'irt/differ'
20
+ require 'irt/directives'
21
+ require 'irt/session'
22
+
23
+ module IRT
24
+
25
+ VERSION = File.read(File.expand_path('../../VERSION', __FILE__)).strip
26
+
27
+ class IndexError < RuntimeError ; end
28
+ class SessionModeError < RuntimeError ; end
29
+ class ArgumentTypeError < RuntimeError ; end
30
+ class NotImplementedError < RuntimeError ; end
31
+
32
+ extend self
33
+
34
+ attr_accessor :irt_on_diffs, :tail_on_irt, :fix_readline_prompt, :debug,
35
+ :full_exit, :exception_raised, :session_no, :autoload_helper_files,
36
+ :copy_to_clipboard_command, :nano_command_format, :vi_command_format, :edit_command_format, :ri_command_format
37
+ attr_reader :log, :irt_file, :differ, :os
38
+
39
+ Colorer.def_custom_styles :bold => :bold,
40
+ :reversed => :reversed,
41
+ :null => :clear,
42
+
43
+ :log_color => :blue,
44
+ :file_color => :cyan,
45
+ :interactive_color => :magenta,
46
+ :inspect_color => :clear,
47
+ :binding_color => :yellow,
48
+ :actual_color => :green,
49
+ :ignored_color => :yellow,
50
+
51
+ :error_color => :red,
52
+ :ok_color => :green,
53
+ :diff_color => :yellow,
54
+ :diff_a_color => :cyan,
55
+ :diff_b_color => :green
56
+
57
+ def force_color=(bool)
58
+ Colorer.color = bool
59
+ end
60
+
61
+ def init
62
+ @session_no = 0
63
+ @differ = IRT::Differ
64
+ @irt_on_diffs = true
65
+ @tail_on_irt = false
66
+ @fix_readline_prompt = false
67
+ @autoload_helper_files = true
68
+ @os = get_os
69
+ @copy_to_clipboard_command = case @os
70
+ when :windows
71
+ 'clip'
72
+ when :macosx
73
+ 'pbcopy'
74
+ when :linux, :unix
75
+ 'xclip -selection c'
76
+ end
77
+ @edit_command_format = case @os
78
+ when :windows
79
+ '%1$s'
80
+ when :macosx
81
+ 'open -t %1$s'
82
+ when :linux, :unix
83
+ case ENV['DESKTOP_SESSION']
84
+ when /kde/i
85
+ 'kde-open %1$s'
86
+ when /gnome/i
87
+ 'gnome-open %1$s'
88
+ end
89
+ end
90
+ @vi_command_format = "vi -c 'startinsert' %1$s +%2$d"
91
+ @nano_command_format = 'nano +%2$d %1$s'
92
+ @ri_command_format = "qri -f #{Colorer.color? ? 'ansi' : 'plain'} %s"
93
+ @debug = false
94
+ end
95
+
96
+ def init_files
97
+ @irt_file = IRB.conf[:SCRIPT]
98
+ @log = Log.new
99
+ @log.print_running_file
100
+ IRT::Directives.load_helper_files
101
+ end
102
+
103
+ def lib_path
104
+ File.expand_path '../../lib', __FILE__
105
+ end
106
+
107
+ # this fixes a little imperfection of the YAML::dump method
108
+ # which adds a space at the end of the class
109
+ def yaml_dump(val)
110
+ yml = "\n" + YAML.dump(val)
111
+ yml.gsub(/ +\n/, "\n")
112
+ end
113
+
114
+ def prompter
115
+ @prompter ||= begin
116
+ require 'prompter'
117
+ pr = Prompter.new
118
+ def pr.say_echo(result, opts={})
119
+ opts = {:style => :ignored_color}.merge opts
120
+ say ' #> ' + result.inspect, opts
121
+ end
122
+ pr
123
+ end
124
+ end
125
+
126
+ private
127
+
128
+ def get_os
129
+ case RbConfig::CONFIG['host_os']
130
+ when /mswin|msys|mingw32|windows/i
131
+ :windows
132
+ when /darwin|mac os/i
133
+ :macosx
134
+ when /linux/i
135
+ :linux
136
+ when /solaris|bsd/i
137
+ :unix
138
+ else
139
+ :unknown
140
+ end
141
+ end
142
+
143
+ end