I’m a backend student @TuringSchool and when we started classes back in mod 1 (Module 1) we were asked to keep it simple. Instructors recommended using something like Atom or VS studio code which are pretty good code editors, so I did. I used Atom and VS Code for 4 and 6 weeks, respectively, and with some patience you can make them behave “almost” like RubyMine. Still, they didn’t compare.
This is my humble opinion and I’m NOT trying to go into a battle over which code editor or IDE is better. However, I do feel that this IDE doesn’t receive the love and/or appreciation that it should.
Here are some of my favorite features:
Search. There are several ways to search using RubyMine. The methods I use most frequently are:
Recently Edited files
Command key + e will let you search your recent files which is pretty useful since in my projects I go through almost the same files everytime.
Search File Name
Cmd + Shift + N will let you search your entire project without having to look at the file tree. I love this because you can search by name or extension file and if you don’t know the name but remember part of it, just enter a fraction of the name file and RubyMine will do its magic (yes, Atom and Vs code has something similar).
RubyMine is super keyboard friendly; everything has a shortcut and if you come across something you want and don’t have you can always add a new one. In my case I wasn’t happy using the mouse to split views and the default interferes with a default mac screen setting.
So I added Cmd + Opt + V to split views vertically and along the same vein, another shortcut I made is Fn + Ctrl + arrow left or right to navigate through my open tabs.
Cmd + 9 another one of my faves displays version control where you can browse through your git history with a very nice GUI.
Finally, since I don’t like typing that much, here comes Cmd + K to the rescue for not only committing but also adding file changes to version control without having to reach for the terminal. From here you can select or deselect the files you want to add and/or commit. You can also see the changes in those files and add emoticons to your commit messages for a little bit of personal flair. :)
Do you find yourself having to add Shoulda-Matchers, Database Cleaners, and Factory Girl quite often? Well let me tell you! Adding file templates in RubyMine is a breeze…
Step1: Ctrl + N in your file tree where you want to add your file.
Step2: Go to Edit Template file
Step3: Add the name of the file, the extension and the code that you want to add to that file template when creating it. In my case I have file templates for DB cleaners, Factory Girl, Rspec Test files, Rails helper and many more.
This feature made my life easier in Mod 3 @Turing School. I found myself having to type the same snippet of code over and over again. Don’t get me wrong, when coding, typing the same thing will allow you to build muscle memory but after the 20th time I think you’re good.
In my case, in mod 3 I had to connect to APIs somewhere around 50 times during the period of 6 weeks, maybe I’m exaggerating but again I don’t like to type.
So for example, now when I need to add the snippet of code below I will start typing @conn hit Tab key and the snippet will populate in my editor like this:
@conn = Faraday.new(url: "api_url_goes_here") do |faraday| faraday.headers["X-API-KEY"] = "API_KEY_GOES_HERE" faraday.adapter Faraday.default_adapter end response = @conn.get("2nd_piece_of_api_url") results = JSON.parse(response.body, symbolize_names: true)
And just as simple as that you can create as many as you want!
Step1: go to Preferences or Cmd +, inside RubyMine
Step2: select Editor > Live Templates
From here you will see a list of already populated templates and you just add your own. Just fill in the Abbreviation (how you want to fire up your template), Description and Template text (snippet of code that you want to add) and that is it, no more typos when trying to connect to an API using Faraday.
This might rock your world! Literally! Have you ever needed to change a commit, maybe you realize you weren’t too descriptive or simply you made a mistake and your code says one thing but you committed another? Well, in that case, Cmd + 9 to version control hover over the commit you want to change and right click on Reword.
From there you can undo the commit, revert the commit, reword, etc.
In the pop-up simply add a descriptive commit message that reflects your work. The only gotcha is it will not work after pushing to remote.
Last but not least,
RubyMine its absolutely, in my opinion gorgeous. Yes I had to do some tweaking here and there especially with the colors for classes, methods, strings, etc. Colors that suited my aging eyes better and when coding I try to keep a minimalistic approach. No tool buttons, tool bar, status bar, nothing. The one thing I keep is the navigation bar, because I always like to know under which directory I am at the moment.
Additionally, you can improve the aesthetics of the interface with a plugin that I added called Material UI theme. It has quite a few options, for instance, I have enabled the darker theme. This theme comes with nicer file icons than default in RubyMine.
RubyMine has excellent Cucumber support, and many others like:
- Clipboard history
- Docker support
- Excellent Syntax errors highlighting for Ruby, JS in real time.
- Diff Viewer
- Cross-language refactorings
- Run your tests via Rake tasks or launch from a directory
By the way, if by any chance you are going to be working with files like yaml or haml, guess what? RM recognizes their syntax. It just works no need to be adding extra plugins.
Which brings me to my last point, you can add plugins and extra features to code editors and maybe at some point make it behave like an IDE, but the performance falls short of my expectations for normal actions that work in RM right out-of-the-box with no extra settings. That way I can focus on coding not in searching plugins.
With all these wonderful features, there is one thing that I don’t like about RM is the startup time. It’s like 2 extra seconds longer than a more simple editor, but I know that no code editor is perfect and no IDE is perfect, so for the time being I’m happy. I’m willing to sacrifice the start-up time. For now. RM has become faster in the later releases and hopefully it will keep improving.