Railscamp

In knapp drei Wochen findet in Münster das nächste Railcamp statt. Railcamp bezeichnet sich selber als „Unkonferenz“, da es keine feste Struktur für die Vorträge gibt. Stattdessen werden die Vorträge vor Ort je nach Bedarf und Interesse von den Teilnehmern bestimmt. Die (Un)-Konferenz wird volständig gesponsert und ist daher für die Teilnehmer laut ihrem Blog kostenlos.

Weitere Details gibt es auf der (Un)-Konferenz-Homepage: http://railscamp.de/

Screencast: Exceptions Testen

Eine Applikation ist nicht immer frei von Bugs. Einige Fehler treten erst auf wenn das Projekt bereits online ist. Wie mit solchen Fällen umgegangen werden kann und wie man anschließend den Fehler in seine Integrationtest einschließen kann, zeigt Ryan Bates in dieser Folge seiner Screencasts.

Download (14.4 MB, 10:01)
Alternative download für iPod & Apple TV(11.2 MB, 10:01)

Quellcode:

[bash]
script/generate integration_test exceptions
rake test:integration
[/bash]

[ruby]
# test/integration/exceptions_test.rb
class ExceptionsTest < ActionController::IntegrationTest
fixtures :all

test "POST /products" do
post "/products", "commit"=>"Submit", "product"=>{"name"=>"Headphones", "price"=>"-2"}
assert_response :success
end

test "GET /products/8/edit" do
product = Product.first
get "/products/#{product.id}/edit"
assert_response :success
end
end
[/ruby]

Doppelte Einträge filtern

Heute wollen wir euch eine Möglichkeit vorstellen um Datensätze / Arrayelemente von doppelten Einträgen zu befreien.
Um dies zu ermöglichen wird die Array-Klasse um eine weitere Methode erweitert und kann dann in einer beliebigen Ruby/Rails-App benutzt werden.

Dies ist die Erweiterung die benötigt wird.
[ruby]
require ’set‘

class Array
def uniq_by
seen = Set.new
select{ |x| seen.add?( yield( x ) ) }
end
end
[/ruby]

Danach könnt ihr eure Ergebnisse folgendermaßen filtern:

[ruby]
@uniqueposts = Posts.all.uniq_by { |h| h.body }
[/ruby]

Screencast: Pickle mit Cucumber

Neue Woche, neuer Screencast. In dieser Woche behandelt Ryan Pickle, eine Erweiterungs-Gem für Cucumber. Nebenbei gibt es ein bisschen Knowhow zu diffs.

Download(32.5 MB, 16:43)
alternativer download für iPod & Apple TV (21.7 MB, 16:43)

Resourcen:

Quellcode:

[bash]
rails store
sudo rake gems:install RAILS_ENV=test
script/generate cucumber
script/generate pickle
script/generate rspec_model product name:string price:decimal
rake db:migrate
rake db:test:clone
script/generate rspec_controller products show
cucumber features -q
[/bash]

[ruby]
# config/environments/test.rb
config.gem "rspec", :lib => false, :version => ">=1.2.9"
config.gem "rspec-rails", :lib => false, :version => ">=1.2.9"
config.gem "webrat", :lib => false, :version => ">=0.5.3"
config.gem "cucumber", :lib => false, :version => ">=0.4.3"
config.gem "pickle", :lib => false, :version => ">=0.1.21"

# product_steps.rb
Then(/^I should see products table$/) do |expected_table|
html_table = table_at("#products").to_a
html_table.map! { |r| r.map! { |c| c.gsub(/<.+?>/, “) } }
expected_table.diff!(html_table)
end
[/ruby]

[bash]
# display_products.feature
Feature: Display Products
In order to purchase the right product
As a customer
I want to browse products and see detailed information

Scenario: Show product
Given a product exists with name: "Milk", price: "2.99"
When I go to the show page for that product
Then I should see "Milk" within "h1"
And I should see "$2.99"

Scenario: List products
Given the following products exist
| name | price |
| Milk | 2.99 |
| Puzzle | 8.99 |
When I go to path "/products"
Then I should see products table
| Milk | $2.99 |
| Puzzle | $8.99 |
Then show me the page
[/bash]