irt 1.2.0.p01 → 1.2.0.p02

Sign up to get free protection for your applications and to get access to all the features.
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
- - optional colored rails log in the console
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.p01
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 rails console with lots of easy and powerful tools.
18
+ Improved irb and Rails Console with lots of easy and powerful tools.
17
19
  Usage:
18
- irt [PATH] [options]
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 rails console options' ) do |opt|
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
- [ IRT::Utils.create_tmp_file ]
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(ENV['IRT_COMMAND'])
107
- puts Dye.sgr(:clear) if Dye.color?
108
- exit(1)
109
- end
115
+ exit(1) unless system ENV['IRT_COMMAND']
110
116
  end
@@ -40,7 +40,7 @@ module IRT
40
40
  puts
41
41
  exec ENV["IRT_COMMAND"]
42
42
  end
43
- alias_method :r!, :restart
43
+ alias_method :rs, :restart
44
44
 
45
45
  def rerun
46
46
  ensure_session
@@ -5,7 +5,7 @@ module IRT
5
5
  def irt_help
6
6
  ensure_session
7
7
  puts %(
8
- #{label " NOTICE ", :log_color}
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
- cat args Similar to system cat
17
- ls args Similar to system ls
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 and runs it
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|r! Restart the executable, reload IRT (and Rails) and
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)
@@ -45,8 +45,8 @@ module IRT
45
45
  alias_method :tt, :add_test
46
46
 
47
47
  def save_as(path)
48
- IRT::Utils.save_as(path) do
49
- IRT::Session.run_file path
48
+ IRT::Utils.save_as(path) do |as_file|
49
+ IRT::Session.run_file as_file
50
50
  end
51
51
  end
52
52
  alias_method :sa, :save_as
@@ -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
+
@@ -25,6 +25,7 @@ module IRB
25
25
  def abort
26
26
  ensure_cli
27
27
  IRT::Session.exit_all = true
28
+ IRT::History.save_history
28
29
  original_abort
29
30
  end
30
31
  alias_method :xx, :abort
@@ -87,6 +87,20 @@ private
87
87
 
88
88
  end
89
89
 
90
+
91
+ module Commands
92
+ module Core
93
+
94
+ alias_method :original_rerun, :rerun
95
+ def rerun
96
+ reload!
97
+ original_rerun
98
+ end
99
+
100
+ end
101
+ end
102
+
103
+
90
104
  module Commands
91
105
  module Rails
92
106
 
@@ -0,0 +1,5 @@
1
+ module IRT
2
+ module History
3
+ extend IRB::HistorySavingAbility
4
+ end
5
+ end
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 = create_tmp_file run
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(run=true)
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
- tmp_path = tmp_file.path
25
- at_exit { check_save_tmp_file(tmp_file, run) }
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, run=true)
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 IRT.irt_file, as_file
37
- if run && IRT::Prompter.yes?( %(Do you want to run the file "#{as_file_local}" now?) )
38
- IRT::Session.run_file as_file
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, run)
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, run)
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
- hash: 957451098
5
- prerelease: true
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-17 00:00:00 -04:00
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: fastri
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
- hash: 81
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.3.7
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.