Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails console history command (via pry) -- can it be grepped or tailed?

In Rails 4 rails console I can type history and it will behave just like the history command from the bash shell. E.g.:

[25] my_rails_project »  history
  1: Nomination
  2: {:ad => "asdfsdasadf"}
  3: Nomination.count
  4: Nomination.count.to_sql
  5: Nomination.all.class
  6: Nomination.all.to_sql
  ...

Is there a way to search that history, e.g. history | grep Nomination? How about tail?

Note: When I initially wrote this question I thought the history command came from Rails itself, but it comes from the pry gem which I have in my system (my Gemfile specifies the jazz_hands gem which pulls in pry). Pry does in fact have a grep feature, e.g. history --grep Nomination will give me lines 1 and 3-6 above. It also has a tail feature. These are documented here: https://github.com/pry/pry/wiki/History

like image 460
Purplejacket Avatar asked Dec 06 '22 04:12

Purplejacket


2 Answers

You can use ~/.irb-history for this purpose. So, the following can be used (you must be knowing how to do this, but this is only for reference):

tail -fn0 ~/.irb-history  # for tailing
cat ~/.irb-history | grep something # for searching

Note that, you might have both the files: ~/.irb-history and ~/.irb_history, and any one of them can be more up to date than the other. I have not been able to resolve this mystery yet. So, use the one you find more suitable for yourself.


UPDATE: You can access history in a variable using the following logic (it took me a while to read the code Pry uses, try edit history inside pry):

 def pry_history
   arr = []
   history = Pry::History.new
   history.send(:read_from_file) do |line|
     arr.push line.chomp
   end
   arr
 end

Now, you can simply call pry_history to get an array of pry's history. You can further save it inside your .pryrc configuration file and use it whenever you want in pry.

like image 182
Stoic Avatar answered Jan 05 '23 01:01

Stoic


  1. Go to rails console

  2. press <ctrl> + r and type few letters of the command.

  3. use <ctrl> + r to choose other commands that match the search

  4. use <ctrl> + <shift> + r to choose the command in the reverse direction

Exactly like the <ctrl> + r in bash shell

like image 38
usha Avatar answered Jan 04 '23 23:01

usha