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: Rails
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
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
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
ActiveRecord: Klasse einer Model-Instanz ändern
ActiveRecord erlaubt das direkte Ändern der Klasse einer Model-Instanz mittels #becomes. Dies kann zum Beispiel hilfreich sein, wenn man für einen Spezialfall weitere Funktionen oder Validierungen zu einem Model hinzufügen will: > company = Company.last > company.persisted? => true > company.valid? => true > company = company.becomes(RestrictedCompany) > company.is_a?(RestrictedCompany) => true > company.is_a?(Company) => true >… ActiveRecord: Klasse einer Model-Instanz ändern weiterlesen
Action-Mailer-Previews im Spec-Verzeichnis
Die Mailer-Previews in Rails 4 sind ein Segen. Wer Rspec statt der üblichen Testsuite verwendet kann das Verzeichnis von test in spec ändern, so dass alle Testdateien zusammen bleiben: # config/application.rb # … config.action_mailer.preview_path = „#{Rails.root}/spec/mailers/previews“ Nach einem Serverneustart sollten die Previews gefunden werden: # spec/mailers/previews/user_mailer_preview.rb class UserMailerPreview < ActionMailer::Preview def send_invitation UserMailer.send_invitation(Invitation.first!) end end Die Vorschau kann… Action-Mailer-Previews im Spec-Verzeichnis weiterlesen