Rush, a shell that will yield to you

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    3 Favorites

    Rush, a shell that will yield to you - Presentation Transcript

    1. ru sh
      • a shell that will yield to you
    2. http://flickr.com/photos/exquisitur/2551255999/
    3. What is ru sh ?
      • Unix shell with ruby syntax and idioms
      • by Adam Wiggins (Heroku)
    4. Install and Run $ sudo gem install rush $ rush rush> home=> localhost:/Users/schlueter/
    5. No Working Directory $ home => localhost:/Users/schlueter $ root=> localhost://// $ rushmate = home[ "mydev/github/rushmate/" ] => localhost:/Users/schlueter/mydev/github/rushmate/
    6. But ls Still Works $ home[ "mydev/github/rushmate/" ].ls /Users/schlueter/mydev/github/rushmate/ coverage/ lib/ test/ History.txt MIT-LICENSE Manifest.txt
    7. Make a Variable $ rushmate = home[ "mydev/github/rushmate/" ]
    8. File Manipulation http://flickr.com/photos/takashi/18862634/
    9. Rename # assign a file to a variable $ file = rushmate[ 'app/models/rushmate.rb' ] $ file.rename 'russian_mate.rb'
    10. Duplicate a File $ file = rushmate[ 'README' ] $ file.duplicate 'README.markdown'
    11. Copy Different Directory $ file = rushmate[ 'README' ] $ file.copy_to other_project[ 'README' ]
    12. Move $ file = rushmate[ 'README' ] $ file.move_to home[ 'Desktop/' ]
    13. Write a File $ file = rushmate[ 'README' ] $ file.write "You Read Me"
    14. Read a File $ rushmate[ "README" ].contents You Read Me
    15. File Globbing
    16. Basic Globbing $ rushmate[ "**/*.rb" ] .../mydev/github/rushmate/lib/rushmate.rb.../mydev/github/rushmate/lib/rushmate/command.rb.../mydev/github/rushmate/lib/rushmate/exit.rb ... => 9 x Rush :: File
    17. Glob into an Editor $ rushmate[ "**/*.rb" ].vi $ rushmate[ "**/*.rb" ].mate
    18. Operate on Results $ rails_proj[ '**/*.rhtml' ].each { | f | f.rename f.name.gsub( / . rhtml/ , '.html.erb' ) }
    19. Results Are an Array $ rushmate[ "**/*.rb" ].reject {| f | f.name.match( /test.rb/ )} Go Nuts! $ rails_project[ "**/*.rhtml" ] + rails_project[ "**/*.html.erb" ]
    20. embed http://flickr.com/photos/liamngls/413522957/ Rush :: EmbeddableShell . new .execute_in_shell do #anything in here delegates to rush end
    21. Sake Quick Index of RDoc task 'rdoc:local' => 'rush' do shell = Rush :: EmbeddableShell . new shell.execute_in_shell do end end ruby = root[ &quot;/Library/Ruby/Gems/1.8/&quot; ] indexes = ruby[ &quot;doc/*/rdoc/index.html&quot; ] hrefs = indexes.collect { | f | path = f.full_path text = path.match( /doc / (.*) / rdoc/ )[ 1 ] &quot;<a href= &quot; #{path} &quot; >#{text}</a>&quot; } home[ &quot;rdoc.html&quot; ].write hrefs.join( &quot;<br />&quot; ) home.bash( &quot;open rdoc.html&quot; )
    22. sake rdoc:local
    23.  
    24. Refactoring http://flickr.com/photos/tonyjcase/2262229518/
    25. Search $ work[ &quot;**/*.rb&quot; ].search( /  Rushmate  / ) .../test/user_input_test.rb => assert_equal(&quot;foo&quot;, Rushmate ::.../lib/rushmate/command.rb => module Rushmate .../lib/rushmate/exit.rb => module Rushmate ...7 matching files with 25 matching lines $ work[ &quot;**/*.rb&quot; ].search( /  Rushmate  / ).mate
    26. and Replace
      • $ rushmate[ &quot;**/*.rb&quot; ].replace_contents!
        • ( /  Rushmate  / , &quot;RussianMate&quot; )
      .../lib/rushmate.rb.../lib/rushmate/command.rb.../lib/rushmate/exit.rb => 9 x Rush :: File
    27. Regex is your friend $ project_files.replace_contents! ( /User.authenticate (s *(.*), s *(.*) ) / , 'User.authenticate( \ 2, \ 1)' ) User .authenticate(user, password) User .authenticate(password, user)
    28. Processes
      • ff.alive?
      • ff.mem
      • ff.pid
      • ff.cpu
      • ff.kill
      $ ff = processes.filter( :cmdline => /firefox/ ).first
    29. Real World Rush :: EmbeddableShell . new .execute_in_shell do end ff_processes = processes. filter ( :cmdline => /firefox/ ) if ff = ff_processes.select{| p | p.mem > 400000 }.first ff_cmdline = ff.cmdline ff.kill home.bash ff_cmdline, :background => true end
    30. Permissions $ file.access = { :user_can => :read_and_write , :group_and_other_can => :read } $ file.access[ :user_can_read ] => true
    31. Use BASH if you must $ rushmate.bash &quot;rm -rf .&quot; # D'oh!
    32. Shell Locally Act Globally
    33. Remote $ remote = Rush :: Box . new ( 'user@server.com' ) $ remote[ &quot;/u/app/current/REVISION&quot; ].contents => 160
    34. Starts a Mongrel on Remote Server Use in production with caution
    35. Customize # setup variables to common directories rushmate = home[ &quot;mydev/github/rushmate/&quot; ] # setup variables to common servers qa = Rush :: Box . new ( 'user@qa.local' ) ~/.rush/evn.rb
    36. Cheap Backup def cheap_backup (directory) unless directory.dir? puts &quot;cheap backup only works on dirs&quot; return end backup_path = directory.path + &quot;/&quot; + directory.name + &quot;.bak&quot; if self [backup_path].exists? puts &quot;backup already exists&quot; else directory.duplicate(directory.name + &quot;.bak&quot; ) end end
    37. Extend # allows you to run # directory.coverage def coverage self .rake( &quot;coverage&quot; ) end ~/.rush/commands.rb
    38. Another Command def ruby_files self [ &quot;**/*.rb&quot; ] end $ rushmate.ruby_files .../mydev/github/rushmate/lib/rushmate.rb.../mydev/github/rushmate/lib/rushmate/command.rb.../mydev/github/rushmate/lib/rushmate/exit.rb ... => 9 x Rush::File
    39.  
    40. TextMate Rushmate :: Command . new { # find ruby files with the current word in textmate found_files = project_directory[ &quot;**/#{current_word.downcase}.rb&quot; ] if found_files.size == 1 found_files.mate else menu_files = found_files.collect { | f | f.full_path.gsub(project_directory.full_path, &quot;&quot; ) } project_directory[user_input.quick_menu_from_array(menu_files)].mate end }
    41. The Take Away
    42. Questions ?
    43. Thank You
      • schlueter @gmail.com
      http://www.simpl try.com

    + guestdd9d06guestdd9d06, 2 years ago

    custom

    932 views, 3 favs, 2 embeds more stats

    Rush is a shell with ruby syntax and idioms. This more

    More info about this document

    CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License

    Go to text version

    • Total Views 932
      • 823 on SlideShare
      • 109 from embeds
    • Comments 0
    • Favorites 3
    • Downloads 19
    Most viewed embeds
    • 108 views on http://www.simpltry.com
    • 1 views on http://static.slideshare.net

    more

    All embeds
    • 108 views on http://www.simpltry.com
    • 1 views on http://static.slideshare.net

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories

    Tags