RailsConf Europe was een succes!

Geplaatst door Remco van 't Veer za, 23 sep 2006 05:37:00 GMT

Vorige week was ik in London om RailConf Europe bij te wonen. Het waren 2 dagen maal 4 tracks met in totaal 40 presentaties. Helaas heb ik ze niet allemaal bij kunnen wonen. Zie voor wat ik wel bij heb gewoond m’n privé blog artikelen over de eerste en de tweede dag.

Wat was de beste presentatie? Dat is moeilijk, Kathy Sierra is een fantastische spreker, Jim Weirich had een interessant verhaal en de afsluiting van Dave Thomas was erg inspirerend.

Er zijn een paar (technische) presentaties die ik eruit wil lichten. Ze zijn voorzien van mijn eigen voorbeelden; omdat ik de code zelf wilde voelen en omdat ik de voorbeelden die in London gegeven werden niet allemaal meer kan reproduceren.

David Heinemeier Hansson over simply Helpful

DHH opent RailConf met een verhaal over de voortgang in ontwikkeling van Rails. Hij vertelt, net als in Chicago, over simply RESTful, hoe daar voortgang in geboekt wordt met o.a. een resource scaffolder (zie changeset 5147). Er komt een beetje ActiveResource voorbij en hij stipt daar wat probleempjes in aan.

Nieuw (in ieder geval voor mij) is simply Helpful. David geeft een demonstratie van deze nieuwe helpers methoden welke nu al als plugin op edge inzetbaar zijn.

Simply helpful introduceert conventies voor de view laag en reduceert daarmee een hoop herhaling. Een nieuwe helper methode is bijvoorbeeld div_for;

<div id="comment_<%= @comment.id %>" class="comment">
  <%= @comment.body %>
</div>

kan met div_for herschreven worden als:

<% div_for @comment do %>
  <%= @comment.body %>
<% end %>

Simply helpful is vooral een complement op simply RESTful. Bij het gebruik van RESTful controllers kan er voor een formulier het volgende geschreven worden:

<% form_for @comment do %>
  <%= text_field 'comment', 'body' %>
  <input type="submit" />
<% end %>

De class, id en action attributen op dit form element zijn meteen goed gezet. En voor links zelfs naar een object zelfs:

<%= link_to :title, @comment %>

In beiden gevallen bevraagt de helper routing voor de juist URL.

Aan de JavaScript kant scheelt het ook een hoop duplicatie;

page["comment_#{@comment.id}"].visual_effect(:highlight)
page.select('.comment').each { |c| c.hide }

kan geschreven worden als:

page[@comment].visual_effect(:highlight)
page.select(Comment).each { |c| c.hide }

Rails applicaties worden steeds schoner!

Dan Webb over de Unobtrusive JavaScript plugin

Om mooie schone applicaties ook toegankelijk te houden hebben Dan Webb en Luke Redpath de Unobtrusive JavaScript plugin gebouwd.

Deze plugin biedt helper methoden om gedragingen (behaviours) ala event:selectors bovenop HTML elementen in je view te plakken. Als JavaScript aanwezig en functioneel is op de browser wordt de interface voor de gebruiker verrijkt met AJAX varianten na het laden en als JavaScript niet beschikbaar is zijn de classic methoden nog beschikbaar. Op deze manier is je web applicatie altijd functioneel.

Een simpel voorbeeld, een “volgende” knop:

<div class="paging">
  <%= link_to 'volgende', :action => 'next' %>
</div>

kan ver-AJAX-t worden met:

<% apply_behaviour '.paging a:click',
    'new Ajax.Request(this.href);return false;'%>

of, beter nog, met de bijgeleverde make_remote_link helper:

<% apply_behaviour '.paging a', make_remote_link %>

De next actie moet uiteraard op gepaste manier reageren op de AJAX aanroep door bijvoorbeeld in een op de pagina gebruikte div het “volgende” element te tonen.

Deze plugin moet je zeker eens bekijken als je robuste web applicaties wilt schrijven. Zelf heb ik genoeg geworsteld met eigen helpers die link_to_remote 'meer', {:action => 'next'}, {:href => url_for(:action => 'next')}-achtige constructies maken, om hiermee aan de slag te willen. Zie Dann’s slides en voorbeeld code voor meer informatie.

Thomas Fuchs over JavaScript testing

Nu we toch aan het JavaScripten zijn, script.aculo.us held Thomas Fuchs vertelt over het unit testen van JavaScript code. Het unit test framework dat hij heeft gebouwd op basis van Ruby’s Test::Unit library bestaat al een tijdje maar nu is er ook een javascript test plugin welke JavaScript tests integreert in je Rails applicatie, net als je andere tests.

Om test templates te maken, net als de model en controller generators doen, is een javascript_test generator gemaakt. De volgende aanroep maakt een test template voor een public/javascripts/puzzle_solver.js script:

ruby script/generate javascript_test puzzle_solver

Dit levert een html bestand; test/javascript/puzzle_solver_test.html. Het belangrijkste onderdeel van dit bestand ziet er als volgt uit:

<script type="text/javascript">
// <![CDATA[
  new Test.Unit.Runner({
    // replace this with your real tests

    setup: function() {
    },

    teardown: function() {
    },

    testTruth: function() { with(this) {
      assert(true);
    }}

  }, "testlog");
// ]]>
</script>

Nu kunnen we voor onze solver een test toevoegen door testTruth te vervangen door:

testSolver: function() { with(this) {
  assertEqual(42,
    PuzzleSolver.solve("Life, the Universe, and Everything"));
}}

Dat is mooi maar hoe draai je deze test dan?

rake test:javascripts

Deze rake taak start beschikbare browsers op (nu nog alleen Safari, Firefox, Internet Explorer en Konqueror) en opent de test pagina’s. De unit tests gaan meteen draaien en geven feedback via een instancie van Webrick. Op mijn computer levert dit het volgende in de console:

(in .../Development/rails/test)
/test/javascript/puzzle_solver_test.html on Safari: SUCCESS
/test/javascript/puzzle_solver_test.html on Firefox: SUCCESS
Skipping Internet Explorer, not supported on this OS
Skipping Konqueror, not supported on this OS

en een paar open browser windows met een overzicht van de gedraaide testen met eventuele meldingen daarin over asserts die gefaald zijn.

Het voelt allemaal nog wat brak. De geopende browser windows worden niet automatisch afgesloten, je kan de test HTML’s niet direct in je browser draaien en functioneel testen is nog onmogelijk omdat browser events niet te emuleren zijn. Maar het is een stap in de goede richting en een ontwikkeling die het in de gaten houden waard is.

Zie voor meer informatie Thomas z’n slides.

Geplaatst in ,  | geen reacties

Reacties

(Laat url/e-mail achter »)

   Voorvertoning