Gems schneller installieren

Bei der Installation von gems wird in der Regel auch die zugehörige Dokumentation installiert. Dies ist z.B. auf produktiven System nicht nötig und häufig auch nicht gewollt. Daher zeigt der heutige Script-Tip wie ihr die Installation der Dokumentation vermeiden könnt, und dadurch auch den Installations-Prozess beschleunigt.

Quellcode:

[bash]
user@rechner:~$ sudo gem install httparty –no-ri –no-rdoc
[sudo] password for user:

When you HTTParty, you must party hard!
Successfully installed httparty-0.3.1
1 gem installed
[/bash]

Verschiedene Datumsformate in Rails

Neben der sprachlichen Übersetzungen unterscheiden sich auch Datumsformate im internationalen Kontext. Daher wollen wir euch in unserem heutigen Script-Tip zeigen, wie ihr diese Einstellung innerhalb von Rails vornehmen könnt.

Dies könnt ihr in eure environment.rb eintragen.

[ruby]
meine_formate = {

:mein_format_1 => ‚%l %p, %b %d, %Y‘,

:mein_format_2 => ‚%l:%M %p, %B %d, %Y‘

}



ActiveSupport::CoreExtensions::Time::Conversions::DATE_FORMATS.merge!(meine_formate)

ActiveSupport::CoreExtensions::Date::Conversions::DATE_FORMATS.merge!(meine_formate)

[/ruby]

Für euer angepasstes Format könnt ihr die zugelassenen Einstellungen, die auch für Ruby gelten, nutzen.
Ausschnitt aus der Ruby-Dokumentation:

[ruby]
%a – The abbreviated weekday name („Sun“)
%A – The full weekday name („Sunday“)
%b – The abbreviated month name („Jan“)
%B – The full month name („January“)
%c – The preferred local date and time representation
%d – Day of the month (01..31)
%H – Hour of the day, 24-hour clock (00..23)
%I – Hour of the day, 12-hour clock (01..12)
%j – Day of the year (001..366)
%m – Month of the year (01..12)
%M – Minute of the hour (00..59)
%p – Meridian indicator („AM“ or „PM“)
%S – Second of the minute (00..60)
%U – Week number of the current year,
starting with the first Sunday as the first
day of the first week (00..53)
%W – Week number of the current year,
starting with the first Monday as the first
day of the first week (00..53)
%w – Day of the week (Sunday is 0, 0..6)
%x – Preferred representation for the date alone, no time
%X – Preferred representation for the time alone, no date
%y – Year without a century (00..99)
%Y – Year with century
%Z – Time zone name
%% – Literal „%“ character
[/ruby]

Ruby Log in der Konsole

Im heutigen Script-Tip wollen wir euch zeigen wie ihr die Logeinträge in der Konsole anzeigen könnt. Dazu müsst ihr eure .irbrc um den folgenden Code-Eintrag erweitern.

Folgenden Code müsst in eure .irbrc eintragen:

[ruby]
if ENV.include?(‚RAILS_ENV‘)&& !Object.const_defined?(‚RAILS_DEFAULT_LOGGER‘)
Object.const_set(‚RAILS_DEFAULT_LOGGER‘, Logger.new(SDTOUT))
end
[/ruby]

curl Helper für REST

In unserem heutigen Script-Tip stellen wir euch einen kleinen Helfer für REST-Schnittstellen vor. Das Script ruft im Hintergrund das curl-Kommando auf. Durch die Konfiguration-Parameter werden die Übergabe-Parameter auf ein Minimum reduziert.

Quellcode:
 
[bash language="wrap-line=true"]
#!/bin/bash
AUTH="benutzer:passwort"
BASE="http://example.com:3000"
METHOD=$1
DEST="$BASE$2"
XML=$3

# Sicherstellen, dass alle nötigen Parameter übergeben wurden...
if [ $# -eq 0 ]; then
echo "Aufruf: ./`basename $0` HTTP-METHOD ZIEL_URI [XML]"
echo "Beispiel: ./`basename $0` POST "/accounts" "test@example.com""
exit 1
fi

# Rufe CURL mit den übergebenen Parametern auf
curl -H 'Accept: application/xml' -H 'Content-Type: application/xml' -w 'nHTTP STATUS: %{http_code}nTIME: %{time_total}n' 
-X $METHOD 
-d "$XML" 
-u "$AUTH" 
"$DEST"

exit 0
[/bash]

Proxy für open-uri verwenden

In vielen Umgebungen ist der direkte Zugriff auf z.B. Web-Inhalte nur über einen Proxy möglich. In unserem heutigen Script-Tip zeigen wir euch wie ihr für open-uri einen Proxy setzen könnt.

[ruby]
require ‚open-uri‘

url = ‚http://www.example.com/‘
proxy_adresse = ‚http://123.456.789.10‘
proxy_port = ‚8888‘

seite = open(url, :proxy => (proxy_adresse + ":" + proxy_port))

[/ruby]

Parameter an send Methode übergeben

Wenn der direkte Aufruf eine Methode nicht möglich ist oder auch häufig bei der Meta-Programmierung, kann in Ruby die send-Methode verwendet werden. Diese Methode wird von Ruby selber benutz um Methoden in Klassen aufzurufen.

Da Methoden auch Parameter erwarten können, wollen wir euch in unserem heutigen Script-Tip zeigen wie das geht.

[ruby]

class MeineKlasse
def hallo(*args)
"Hallo " + args.join(‚ ‚)
end
end

mk = MeineKlasse.new

mk.send :hallo, "ihr", "lieben", "Leser"

#=> "Hallo ihr lieben Leser"

[/ruby]

RGB Werte in HEX umwandeln

Hin und wieder ist es nötig Farbwerte in RGB in die entsprechende HEX-Form umzuwandeln. Die HEX-Form kann dann z.B. in CSS etc. verwendet werden. In unserem heutigen Script-Tip stellen wie euch ein Ruby-Script vor, dass euch bei der Konvertierung unterstützen kann.

Das Script ließe sich auch in Rails-Applikationen einsetzen, wenn dort eine Konvertierung nötig ist.

[ruby]

#!/usr/bin/env ruby
# rgb-konverter.rb

if ARGV.size < 3 then
puts "Falsche Anzahl an Argumenten: Es müssen drei Werte übergeben werden!"
exit
end

konvertierter_string = []

for arg in ARGV do
konvertierter_string << "%02x" % arg.to_i
end

puts "##{konvertierter_string.join}"

[/ruby]

Das Script ließe sich folgendermaßen benutzen

[bash]
./rgb-konverter.rb 0 255 255
#00ffff
[/bash]

Zeitgesteuerte Programmausführung ohne cron

Hin und wieder ist nötig Scripte/Programme zu einem bestimmten Zeitpunkt auszuführen. Auf unixoiden System wird in der Regel cron oder at dafür benutzt. Bei Windows kommt hierfür häufig die Services zum Einsatz. Wenn all dies nicht möglich ist oder man lieber bei Ruby bleiben will, kann unseren heutigen Script-Tip dafür benutzen.

Bei dieser Lösung wird lediglich Ruby (und selbstverständlich das auszuführende Programm) benötigt.

[ruby]

#!/usr/bin/ruby

def background_run_at(time)
fork do
sleep(1) until Time.now >= time
yield
end
end

heute = Time.now
mittag = Time.local(heute.year, heute.month, heute.day, 12, 0, 0)
raise Exception, "Es ist bereits mittag" if mittag < Time.now

background_run_at(mittag) { puts "Am mittag ausgeführt!" }

[/ruby]