Posted 5 months ago. Visible to the public. Repeats. Linked content.

Rails developers: Have better context in Git diffs

Git diffs show the surrounding contexts for diff hunks. It does so by applying regular expressions to find the beginning of a context. When it comes to Ruby, however, it will not find method heads and travel up to the class definition:

Copy
@@ -24,7 +24,7 @@ class TicketPdf # <=== Actually expected here: the method definition ApplicationController.render( "tickets/index.html.haml", layout: "tickets", - assigns: { tickets: tickets } + assigns: { tickets: tickets, event_name: event_name } ) end end

When Git is told how to recognize a Ruby file, it will correctly display the expected context:

Copy
@@ -24,7 +24,7 @@ def tickets_as_html # <=== Now correct ApplicationController.render( "tickets/index.html.haml", layout: "tickets", - assigns: { tickets: tickets } + assigns: { tickets: tickets, event_name: event_name } ) end end

How to configure

Copy
# in ~/.gitattributes: *.rb diff=ruby *.rake diff=ruby *_spec.rb diff=rspec *.feature diff=cucumber

Then tell Git where it can find its global attributes file with git config --global core.attributesfile ~/.gitattributes. (Note that you could configure this on a per-project base as well.)

Ruby support is built in, but RSpec and Cucumber need a little more help:

Copy
# in ~/.gitconfig [diff "rspec"] xfuncname = "^[ \t]*((RSpec|describe|context|it|before|after|around|feature|scenario)[ \t].*)$" [diff "cucumber"] xfuncname = "^[ \t]*((Feature|Background|Scenario|Scenario Outline|Examples): .*)$"

Configuring more formats is a simple as extending ~/.gitattributes, and if Git has no built-in support, adding an entry to ~/.gitconfig like above.

Once an application no longer requires constant development, it needs periodic maintenance for stable and secure operation. makandra offers monthly maintenance contracts that let you focus on your business while we make sure the lights stay on.

Owner of this card:

Avatar
Dominik Schöler
Last edit:
4 months ago
by Tobias Kraze
About this deck:
We are makandra and do test-driven, agile Ruby on Rails software development.
License for source code
Posted by Dominik Schöler to makandra dev
This website uses short-lived cookies to improve usability.
Accept or learn more