Sebastians Blog Neues aus den Softwareminen…

Neuste Beiträge

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:

font-awesome-phantomjs

Alle Icons, wie hier das Such-Icon rechts, wurden wie links zu sehen verzerrt. Den Lösungsansatz brachte dieser Eintrag auf Stackoverflow: Ist die Schriftart nativ auf dem System vorhanden, tritt die Verzerrung nicht mehr auf. Unter Ubuntu ist das schnell gemacht:

sudo apt-get install fonts-font-awesome
sudo fc-cache -f -v
Veröffentlicht unter | Verschlagwortet mit , , , , , | Hinterlasse einen Kommentar

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

# => #<Method: RSpec::ExampleGroups::MyController(ActionController::TestCase::Behavior)#get>

Das Beispiel zeigt nicht nur die Klasse, sondern auch das includete Modul, welches für die Methode verantwortlich ist. Dies hilft beim Googeln oder man verwendet Ri:

ri ActionController::TestCase::Behavior#get

 

Veröffentlicht unter | Verschlagwortet mit , , | Hinterlasse einen Kommentar

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
Veröffentlicht unter | Verschlagwortet mit , , , | Hinterlasse einen Kommentar

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 'm3', path: 'm3'

Weiterlesen

Veröffentlicht unter | Verschlagwortet mit , , , | Hinterlasse einen Kommentar

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."
end

Entferne ich diese, so läuft die Installation durch.

Ironischerweise warnt Bundler sogar, dass das Gem Todos oder Fixmes in der Spezifikation enthält. Dass es das Verzeichnis deshalb nicht ordnungsgemäß ausliest erschließt sich aber nicht. Hier wäre eine Fehlermeldung statt der Warnung geeigneter. Möglicherweise ist es auch nur ein Bug, eine fehlende Beschreibung rechtfertigt kein Ignorieren eines Gems.

Veröffentlicht unter | Verschlagwortet mit , , , | 2 Kommentare

Hacker-Serie Mr. Robot

Mir fällt es nicht leicht, mich an neue Serien zu gewöhnen. Die ersten Folgen muss ich mich meist zwingen, um den Einstieg zu finden. Das ist auch bei Mr. Robot nicht anders, die es jetzt bei Amazon Prime gibt. Ein paar Sachen haben mich dann aber doch positiv gestimmt. „Ich habe kein Facebook.“ und „Ich hasse Facebook.“, ein erstes Kennenlernen bei dem die Gnome-oder-KDE-Frage geklärt wird und recht deutliche Kritik an der gesellschaftlichen Überbewertung von Steve Jobs – nette Details die mich durchaus ansprechen. Ich bin gespannt was die ersten Folgen noch so bringen…

Veröffentlicht unter | Verschlagwortet mit , , | Hinterlasse einen Kommentar

Ubuntu-Update kränkelt nach Owncloud-Installation

Nach der Installation des Owncloud-Clients über eine zusätzliche Paketquelle erhalte ich vom Ubuntu-Update-Manager Fehlermeldungen. Ein Update in der Konsole jammert:

sudo apt-get update
...
Paketlisten werden gelesen... Fertig
W: GPG-Fehler: http://download.opensuse.org Release: Die folgenden Signaturen konnten nicht überprüft werden, weil ihr öffentlicher Schlüssel nicht verfügbar ist: NO_PUBKEY 977C43A8BA684223

Das Problem wurde bereits auf Ubuntuusers diskutiert und die vorgeschlagene Lösung funktioniert problemlos:

wget -q http://download.opensuse.org/repositories/isv:/ownCloud:/community/xUbuntu_14.04/Release.key -O- | sudo apt-key add -

Die Updates laufen wieder durch.

Veröffentlicht unter | Verschlagwortet mit , , | 3 Kommentare

Neue Star-Trek-Serie 2017

Eine Meldung die trotz großem Interesse fast an mir vorbeiging: Für das Jahr 2017 hat das amerikanische Medienunternehmen CBS eine neue Star-Trek-Serie angekündigt. Der verantwortliche Produzent Alex Kurtzman war allerdings schon bei den letzten beiden Pseudo-Star-Trek-Actionfilmen beteiligt. Misstrauen ist wie beim neuen Star-Wars-Film also angebracht. Zudem sollen die Folgen in den USA weitgehend über einen vergleichsweise wenig relevanten Streaming-Dienst angeboten werden. Auch das klingt nicht wirklich erfolgversprechend.

Viel mehr ist derzeit nicht bekannt. Wann und in welchem Paralleluniversum welches Schiff unterwegs sein wird darf also spekuliert werden.

Veröffentlicht unter | Verschlagwortet mit , | Hinterlasse einen Kommentar

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 the expected JSON as YAML:

# spec/fixtures/api/user.yaml

---
user:
- id: 1
  first_name: Max
  last_name: Power
  role:
    id: 1
    name: Admin

Weiterlesen

Veröffentlicht unter , | Verschlagwortet mit , , | Hinterlasse einen Kommentar

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 B doesn’t appear, even though define_talk is triggered by Class C. C’s super call seems to ignore its direct parent B.

Weiterlesen

Veröffentlicht unter , | Verschlagwortet mit , , , , | Hinterlasse einen Kommentar