Methoden-Ketten: Rubys Object#tap und Datenkapselung

Eine nette, mir bisher unbekannte Methode ist Rubys Object#tap, der man einen Block übergeben kann, in dem das Objekt als Argument zur Verfügung steht. Klingt im ersten Moment vielleicht unnötig, kann aber insbesondere in Views für etwas schöneren Code sorgen. Ein kleines Negativbeispiel in HAML: %table %tbody %tr %td= current_company.name %td= current_company.owner ? „#{current_company.owner.first_name} #{current_company.owner.last_name}“… Methoden-Ketten: Rubys Object#tap und Datenkapselung weiterlesen

Git-Commit-Messages aus Redmine-Issues

Ein nerviges Prozedere ist das Suchen nach Issue-Nummern, wenn ich via Git eine Änderung commiten möchte. Git kann hier helfen und bietet mit seinen Hooks die Möglichkeit eigene Skripts in allen denkbaren Situationen auszulösen. Hierzu zählt auch die Modifikation der Commit-Message-Vorlage, die Git mit Status-Kommentaren füllt: # Please enter the commit message for your changes.… Git-Commit-Messages aus Redmine-Issues weiterlesen

Formtastics I18n-Cache abschalten

Formtastic ist ein wahrer Segen, da es die Erzeugung und Lokalisierungen von Formularen in Rails dramatisch vereinfacht. Nervig ist nur, dass Änderungen an der Lokalisierungsdatei während der Entwicklung nicht übernommen werden. Grund hierfür ist ein Cache, der die recht komplexen Suchanfragen nach passenden Übersetzungen minimieren soll. Um im Entwicklungsbetrieb nicht ständig den Server neustarten zu… Formtastics I18n-Cache abschalten weiterlesen

Ruby, Currying und Block-Vereinfachung

Der für mich faszinierendste Aspekt funktionaler Programmierung ist das Currying. Es erlaubt das Erzeugen neuer Funktionen, indem ein oder mehrere Argumente einer Ausgangsfunktion vorbelegt werden. Auch in der objektorientierten Entwicklung bieten sich solche Ansätze an. Mir fällt dies immer dann auf, wenn ich in Ruby bei einem Array#map einen Block angeben muss und das Gefühl… Ruby, Currying und Block-Vereinfachung weiterlesen

RSpec durch Parallelisierung beschleunigen

Mit der testgetriebenen Entwicklung gibt es vor allem ein großes Problem: Finished in 2 minutes 32.8 seconds 547 examples, 0 failures, 4 pending Schon in einem frühen Stadium läuft die Testsuite locker zwei Minuten. Parallel Tests will die Dauer verkürzen, indem es Tests auf mehreren Prozessorkernen gleichzeitig ausführt. Ein wesentlicher Aspekt bei der Parallelisierung ist… RSpec durch Parallelisierung beschleunigen weiterlesen

Vim Surround, Zeilennummern, Coffeescript und Probleme mit dem Mausmodus

Teil 3 meiner Erfahrungen vom Umstieg von Sublime zu Vim. vim.surround cd ~/.vim/bundle git clone git://github.com/tpope/vim-surround.git Dieses Plugin erlaubt es (unter anderem), bestimmte umschließende Zeichen der aktuellen Position zu ersetzen. So lassen sich die umschließenden doppelten Anführungszeichen mittels cs“‚ („change surrounding double quotes to single quotes“) ersetzen. Surround unterstützt Anführungszeichen, Klammern und auch HTML.

Rspec: Arrayvergleich ohne Reihenfolge

Um zwei Arrays auf Gleichheit der Elemente zu testen, ohne dabei die Reihenfolge zu beachten, kann der Rspec-Matcher match_array verwendet werden: expect([1, 2, 3]).to match_array([1, 2, 3]) ✔ expect([1, 2, 3]).to match_array([3, 2, 1]) ✔ expect([1, 2, 3]).to match_array([1, 2, 4]) ✘

Von Sublime zu Vim? Ein Um- und Einstiegsversuch

Vim ist so einiges, aber sicher nicht einsteigerfreundlich. Dennoch bin ich immer wieder fasziniert, wie sich erfahrene Anwender durch ihren Code navigieren und in der kleinen Kommandozeile Aktionen auslösen, für die die meisten erstmal ein anderes Programm starten müssen. Zudem ist alles frei konfigurierbar und vor allem freie Software. Mal sehen, wie ich meinen auf… Von Sublime zu Vim? Ein Um- und Einstiegsversuch weiterlesen

Javascript: Klick außerhalb eines Bereiches

Folgendes Beispiel überwacht ein Dokument auf einen beliebigen Klick, außer wenn dieser in einem bestimmten Element (.container) liegt: $(document).on ‚click‘, (ev) -> if $(‚.container‘).has(ev.target).length == 0 # … Dies ist beispielsweise hilfreich um ein Popup oder Dropdown-Menü schließen möchte, wenn der Nutzer „irgendwo“ außer auf das Widget selbst klickt.