Screencast: Clientseitige Validierung von Formularen

Clientseitige Validierung, also die Überprüfung von eingegebenen Werten innerhalb des Webbrowsers, können dem Benutzer bereits bei der Eingabe über die Korrektheit der Daten informieren. Dies kann unter Umständen den einen oder anderen Korrigier-Zyklus ersparen. Wie dies innerhalb von Rails eingesetzt werden kann zeigt Ryan diese Woche anhand eines gems, welches die Entwicklung erleichtert.

 

Download:

Download(20.2 MB, 8:42)
Alternativer Download für iPod & Apple TV(19.3 MB, 8:42)

 

Resourcen:

 

Quellcode:

[bash]
bundle
rails g client_side_validations:install
[/bash]

[ruby]
# Gemfile
gem ‚client_side_validations‘

# models/user.rb
validates_uniqueness_of :username, :email
validates :email, :email_format => true

# lib/email_format_validator.rb
class EmailFormatValidator < ActiveModel::EachValidator
def validate_each(object, attribute, value)
unless value =~ /^([^@s]+)@((?:[-a-z0-9]+.)+[a-z]{2,})$/i
object.errors.add(attribute, :email_format, options)
end
end
end

# config/application.rb
config.autoload_paths << "#{config.root}/lib"
[/ruby]

[html]
<!– users/_form.html.erb –>
<%= form_for @user, :validate => true do |f| %>

<!– layouts/application.html.erb –>
<%= javascript_include_tag :defaults, "rails.validations", "rails.validations.custom" %>
[/html]

[text]
# locals/en.yml
en:
errors:
messages:
email_format: "is not formatted properly"
[/text]

[javascript]
/* rails.validations.custom.js */
clientSideValidations.validators.local["email_format"] = function(element, options) {
if (!/^([^@s]+)@((?:[-a-z0-9]+.)+[a-z]{2,})$/i.test(element.val())) {
return options.message;
}
}
[/javascript]

RubyGems 1.5.0 erschienen: Jetzt mit Ruby 1.9.2 Unterstützung

RubyGems ist in Version 1.5 erschienen und bringt nun endlich Unterstützung für Ruby 1.9.2 mit. Dieses Release behebt nun die Probleme die es in der vorherigen Version (rubygems 1.4) mit der aktuellen Ruby-Version gab.

Neben Bugfixes bringt diese Version auch einige Neuerungen und Verbesserungen mit.

  • Wie schon erwähnt Unterstützung für Ruby 1.9
  • Post-build hooks die ein „gem install“ abbrechen könnenl
  • Gem.find_files ist jetzt 40% schneller (on Ruby 1.9)
  • Bessere Fehlerausgabe für beschädigte/korrupte Gem Dateien (inklusive Pfad)
  • Neue Hilfe Dokumente zur Unterstützung von Ruby 1.9
  • gem update aktualsiert nicht mehr defaultmäßig und falscher weise RubyGems selber

Die Aktualisierung kann wie gewohnt über gem selber vollzogen werden:

 

[bash]
gem update –system
[/bash]

 

Alternative Installations- und Aktualisierungmöglichkeiten sind in der neuen Dokumentation verfügbar:

https://github.com/rubygems/rubygems/blob/master/UPGRADING.rdoc

 

Benutzer von Bundler sollten mit dem Update noch ein wenig warten, weil die atktuelle Bundler-Version nicht perfekt mit dem neuen RubyGems funktioniert. In der Regel sollte auch hier eine aktualisierte Version relativ schnell erscheinen.

Screencast: Ein Gem mit Bundler erstellen

Bundler kann nicht nur zur Installation von gems benutzt werden, es kann auch mit dem Befehl ‚bundle gem‘ ein gem generieren. Ryan zeigt wie das funktioniert und führt den Zuschauer durch die einzelnen Schritte.

 

Download:

Download(23.6 MB, 7:25)
Alternativer Download für iPod & Apple TV(19.4 MB, 7:25)

 

Resourcen:

 

Quellcode:

[bash]
bundle gem lorem
gem build lorem.gemspec
gem push lorem-0.0.1.gem
bundle
rake -T
rake build
rake install
rake release
[/bash]

[ruby]
# lorem.gemspec
# -*- encoding: utf-8 -*-
$:.push File.expand_path("../lib", __FILE__)
require "lorem/version"

Gem::Specification.new do |s|
s.name = "lorem"
s.version = Lorem::VERSION
s.platform = Gem::Platform::RUBY
s.authors = ["Ryan Bates"]
s.email = ["ryan@railscasts.com"]
s.homepage = ""
s.summary = %q{Lorem ipsum generator}
s.description = %q{Simply generates lorem ipsum text.}

s.add_development_dependency "rspec"

s.rubyforge_project = "lorem"

s.files = `git ls-files`.split("n")
s.test_files = `git ls-files — {test,spec,features}/*`.split("n")
s.executables = `git ls-files — bin/*`.split("n").map{ |f| File.basename(f) }
s.require_paths = ["lib"]
end

# Gemfile
source "http://rubygems.org"

# Specify your gem’s dependencies in lorem.gemspec
gemspec

# Rakefile
require ‚bundler‘
Bundler::GemHelper.install_tasks

# lib/lorem.rb
module Lorem
def self.ipsum
"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
end
end

# lib/lorem/version.rb
module Lorem
VERSION = "0.0.2"
end
[/ruby]

RubyGems 1.3.7 veröffentlicht

Das Paketveraltungswerkzeug RubyGem für Ruby ist in der Version 1.3.7 erschienen. Dieses Update bringt einige Neuerungen und Bugfixes mit sich.
Um das eigene System zu aktualisieren muss eine 1.3’er Version bereits installiert sein, da die Versionen 1.1 und 1.2 das Update mit “Nothing to update” abbrechen.

Das Update kann folgendermaßen installiert werden:

[bash]
gem update –system
# ggf. sind Administrationsrechte (root) erforderlich, dann sollte das Update über sudo o. Ä. ausgeführt werden:
sudo gem update –system
[/bash]

Wenn rvm benutzt wird, sollte die Installation nicht als root erfolgen.

Falls eine ältere Version von RubyGems aktualisiert werden soll, muss diese erst auf eine kompatible Version gebracht werden:

[bash]
# Auch hier müssen die Befehle ggf. als root ausgeführt werden. Dazu muss lediglich sudo vor das jeweilge Kommando gesetzt werden
gem install rubygems-update
update_rubygems
[/bash]

Falls RubyGems noch nicht vorhanden ist bzw. neu installiert werden soll, kann dies folgendwermaßen erfolgen:

  1. RubyGems runterladen unter: rubyforge.org/frs/?group_id=126
  2. Das Archiv entpacken und mit „cd“ in das entpackte Verzeichnis navigieren
  3. Dann die Installation mit „ruby setup.rb“ ausführen. (Auch hier: ggf. als root)

Weiter Details können vor der Installation mit folgendem Befehl angezeigt werden:

[bash]
ruby setup.rb –help
[/bash]

Eine der Neuerungen in dieser Version ist, dass nun rubygems.org nun als Standard-Adresse für die Paketsuche + Installation verwendet wird. gems.rubyforge.org wird noch auf unbestimmte Zeit funktionieren.

 

Neue Features:

  • „gem install“ und „gem fetch“ zeigen nun alternative Platformen an, wenn keine passende gefunden wird
  • „gem contents“ –prefix ist nun standardmäßig spezifiziert in –help
  • „gem fetch“ kann nun wieder ätere Versionen holen
  • „gem query“ und Ähnliche zeigen nun eine Liste von Platformen bei der Ausgabe an
  • „gem server“ erlaubt nun mehrere gem-Installations-Verzeichnise anzugeben
  • „gem unpack“ entpackt wieder gems
  • „gem unpack“ entpackt nun auch entfernte gems (z.B. noch nicht installierte)
  • „–user-install“ wird nicht mehr als Standard bei der Installation von gems gesetzt
  • RubyGems unterstützt nun IronRuby als Zielplatform

Neben den Neuerungen hat diese Version auch ein paar Bugfixes erfahren.

Hilfe und weitere Informationen können nach der Installation mit folgendem Befehl auf der Konsole abgefragt werden:

[bash]
ri Gem
[/bash]

Betriebssystem herausfinden

Hin und wieder ist es erforderlich das Betriebssystem, auf dem die Applikation gerade ausgeführt wird, herauszufinden. Oft wird hierzu die „RUBY_PLATFORM“ dazu benutzt. Wie das folgende Beispiel zeigt, kann dies zu einem „falschen“ Ergenis führen.

RUBY_PLATFORM gibt z.B. bei der Verwendung von JRuby den Wert „java“ zurück. Das spiegelt nicht das Betriebssystem wieder, sondern die verwendete Engine unter der die Applikation läuft.

Ein Beispiel-Modul um das Betriebssystem herauszufinden wäre:

[ruby]
module Betriebssystem
def macintosh?
RUBY_PLATFORM.downcase.include?("darwin")
end

def windows?
RUBY_PLATFORM.downcase.include?("mswin")
end

def linux?
RUBY_PLATFORM.downcase.include?("linux")
end
end
[/ruby]

Um einen verlässlichen Wert zu bekommen, sollte man das Gem „sys-uname“ verwenden. Damit bekommt neben dem Betriebssystem auch viele weitere Informationen über die Umgebung heraus.

Installation von sys-uname:

[bash]
gem install sys-uname
[/bash]

Verwendung von sys-uname:

[ruby]
require ’sys/uname‘
include Sys

puts Uname.nodename
puts Uname.version
puts Uname.sysname
puts Uname.machine
puts Uname.release

p Uname.uname
[/ruby]

Auf diese Weise bekommt alle relevanten Daten die man ggf. benötigt.

Screencast: Gemcutter & Jeweler

Neue Woche, neuer Screencast. In dieser Woche zeigt Ryan wie man Gemcutter, ein Service für Gem-Hosting, und Jewelery, Ein Tool zur Verwaltung von Gems, einsetzt.

Download(18.8 MB, 7:24)
Alternativer Download für iPod & Apple TV(10.5 MB, 7:24)

Ressourcen:

[bash]
sudo gem update –system
sudo gem install gemcutter
gem tumble
gem build uniquify.gemspec
gem push uniquify-0.1.0.gem
sudo gem install jeweler
rake –tasks
rake version:write
rake version:bump:minor
rake gemcutter:release
[/bash]

[ruby]
# Rakefile
begin
require ‚jeweler‘
Jeweler::Tasks.new do |gemspec|
gemspec.name = "uniquify"
gemspec.summary = "Generate a unique token with Active Record."
gemspec.description = "Generate a unique token with Active Record."
gemspec.email = "ryan@railscasts.com"
gemspec.homepage = "http://github.com/ryanb/uniquify"
gemspec.authors = ["Ryan Bates"]
end
Jeweler::GemcutterTasks.new
rescue LoadError
puts "Jeweler not available. Install it with: sudo gem install jeweler -s http://gemcutter.org"
end

# uniquify.gemspec
Gem::Specification.new do |s|
s.name = %q{uniquify}
s.version = "0.1.0"

s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
s.authors = ["Ryan Bates"]
s.date = %q{2008-11-09}
s.description = %q{Generate a unique token with Active Record.}
s.email = %q{ryan@railscasts.com}
s.extra_rdoc_files = ["lib/uniquify.rb", "README.rdoc"]
s.files = ["lib/uniquify.rb", "Rakefile", "README.rdoc", "Manifest", "uniquify.gemspec"]
s.has_rdoc = true
s.homepage = %q{http://github.com/ryanb/uniquify}
s.rdoc_options = ["–line-numbers", "–inline-source", "–title", "Uniquify", "–main", "README.rdoc"]
s.require_paths = ["lib"]
s.rubyforge_project = %q{uniquify}
s.rubygems_version = %q{1.2.0}
s.summary = %q{Generate a unique token with Active Record.}

if s.respond_to? :specification_version then
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
s.specification_version = 2

if current_version >= 3 then
else
end
else
end
end
[/ruby]

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]

Practical Ruby Gems

Practical Ruby Gems is a comprehensive guide to utilizing and creating Ruby Gems ready-made Ruby code modules that can be easily added to Ruby and Rails projects. This book is ideal for Ruby programmers as well as web developers who use Rails and wish to extend the functionality of their projects.

You’ll get a prime selection of 34 of the best and most useful Gems, which makes up the core of this book. Each of these also comes complete with actual use cases and code examples that you can use immediately in your own projects. You ll learn how Ruby Gems can be used to * Validate credit cards. * Create graphical interfaces on multiple platforms. * Speed up Rails applications. * Develop lightweight web applications. * Use ActiveRecord to make databases easy. * Process RSS feeds. * Prevent spam using CAPTCHA. * Crop and scale images. * Tap into the same caching system that runs LiveJournal.com. And much, much more! You ll also learn how to package and distribute your own Ruby Gems. This lets you tap into powerful mechanisms for resolving dependencies.And the book takes a detailed look at how Gems differ between operating systems, so you ll be prepared whether your desktop runs OS X, Windows, or Linux.

You ll also learn how you can share code more easily between projects, optionally sharing your contributions with the world!

  • Taschenbuch: 271 Seiten
  • Verlag: (2007-04-25 )
  • Preis: 22.45 €
  • Sprache: english
  • ISBN-10: 1590598113
  • Autor(en): David Berube
  • kaufen