Seit Jahren verwende ich privat wie beruflich will_paginate. Da es stets gute Dienste leistete habe ich dies auch nie hinterfragt und bin nur durch die mangelnde Weiterentwicklung und Limitation-Warnung auf pagy gestoßen. Dieses punktet nicht mit Bescheidenheit, sondern mit den folgenden Aussagen: ~ 40x Faster!~ 36x Lighter!~ 35x Simpler!~ 1,410x More Efficient! Der Ansatz ist… Pagy-Gem für Paginierung weiterlesen
Schlagwort: Ruby
JSON-Warnungen in Rails-Projekten
Immer wieder tauchen bei mir folgende Warnungen auf: Eine schnelle (vermutlich nicht dauerhafte) Lösung ist bundle clean:
Vollständige Dependent-Einstellungen in Rails-Models testen
Ein selten, aber leider regelmäßig wiederkehrendes Problem sind Fremdschlüsselbeziehungen beim Löschen. In Rails muss auf Seite des Schlüsselziels definiert werden, ob ein Fremdschlüssel auf null gesetzt werden darf oder ob das ganze Model gelöscht werden muss. Vergisst man diese Konfiguration wirft die Datenbank beim Löschen einen Fehler. Um dies zu vermeiden möchte ich alle Fremdschlüssel,… Vollständige Dependent-Einstellungen in Rails-Models testen weiterlesen
Verwischte Font-Awesome-Icons in Phantom JS
Wir reichern unsere auf Capybara und Phantom JS basierenden Feature-Tests gerne mit Screenshots an. Hierbei kam es regelmäßig zu einem Problem mit Font Awesome, wodurch der automatische Abgleich fehl schlug. Bei einzelnen Specs tritt das Problem nicht auf, erst wenn mehrere Tests mit unterschiedlichen Seiten abgelichtet werden zeigte sich folgendes Phänomen: Alle Icons, wie hier das Such-Icon rechts,… Verwischte Font-Awesome-Icons in Phantom JS weiterlesen
Herausfinden, wo eine Methode definiert wurde
In manchen Situationen ist es alles andere als offensichtlich, welche Klasse oder welches Modul eine Methode bereitstellt. Wer implementiert die Get-Methode für Rspec-Controller-Tests? Gerade in solch zusammengewürfelten Umgebungen ist das nur schwer nachvollziehbar. Ruby hilft hierbei: Die Metamethode method gibt Auskunft, woher eine Methodendefinition stammt: require „rails_helper“ RSpec.describe MyController do it do puts method(:get) end end… Herausfinden, wo eine Methode definiert wurde weiterlesen
Factory-Girl-Daten im Development-Modus
Testdaten aus Factory-Girl lassen sich in einer Rails-Konsole auch für den Development-Modus (und entsprechend jeden anderen Modus) bereitstellen: require ‚factory_girl‘; FactoryGirl.find_definitions FactoryGirl.create :my_model
Rails-Konfiguration in Engine auslagern
Für die meisten Rails-Projekte verwende ich die gleichen Gems mit ähnlichen Konfigurationen. Um den Projektstart und den Update-Prozess zu vereinheitlichen, möchte ich eine Engine, die diese Abhängigkeiten und Konfigurationen übernimmt. Für den einfacheren Einstieg erzeuge ich innerhalb einer bestehenden Rails-App eine neue Engine: rails plugin new m3 –full Diese wird zu Testzwecken im Gemfile des Elternprojekts verlinkt: gem… Rails-Konfiguration in Engine auslagern weiterlesen
Bundler überspringt Gems mit Todo-Beschreibung
Komisches Verhalten von Bundler, welches bei mir vorher nie aufkam: $ bundle install … Source does not contain any versions of ‚gem (>= 0) ruby‘ Das Problem scheint hier tatsächlich zu sein, dass die Gem-Spezifikation noch Todos enthält: Gem::Specification.new do |s| # … s.summary = „TODO: Summary of Gem.“ s.description = „TODO: Description of Gem.“… Bundler überspringt Gems mit Todo-Beschreibung weiterlesen
Match API output with YAML fixture
A nice and simple approach to test you JSON APIs: # spec/features/api/user_spec.rb require ‚rails_helper‘ RSpec.feature ‚User‘, type: :feature do it ‚lists users‘ do user = create(:user, :as_admin) visit api_user_path(user, format: :json) expect(page).to match_yaml_fixture(‚api/user‘) end end This checks if the page source matches the data given in the fixture file. To make it more readable we format… Match API output with YAML fixture weiterlesen
Overwriting and Overriding with define_method
Recently we stumbled upon this inheritance issue, which seemed very weird at the first: class A def talk ‚A‘ end end class B < A def self.define_talk define_method :talk do super() << ‚B‘ end end end class C < B define_talk def talk super << ‚C‘ end end > C.new.talk => „AC“ The talk addition from class… Overwriting and Overriding with define_method weiterlesen