TulipeMoutarde.be    About

Seaside WAAnchor fun

This blog post was written a long time ago and may not reflect my current opinion or might be technically out of date. Read with a grain of salt.

Written on June 14, 2010.

I’m currently playing with Seaside (a Smalltalk web framework) for a pet project. As you maybe know, Seaside is, by default, not very friendly with URLs. I wanted to have bookmarkable URLs for user convenience and for search engine. Ramon Leon explains how he managed to get nice urls for his blog in a super-interesting blog post.

When playing with WAAnchor methods, I fought with a weird behaviour:

html anchor
  callback: [self moveToPage: page];
  useBaseUrl;
  extraPath: page slug;
  with: page title.

did not work, while

html anchor
  useBaseUrl;
  extraPath: page slug;
  callback: [self moveToPage: page];
  with: page title.

worked fine. Can you see the difference in these two snippets?

The reason of the resulting bug is quite simple but is hard to spot when you’re not careful: the method useBaseUrl should always be the first to be called in a method cascade on a WAAnchor. Indeed, both extraPath: and callback: will affect the url of the WAAnchor while useBaseUrl will reset it. This reset will cancel all the operations you’ve done before on the url of the WAAnchor.

Moral of the story: beware of side effect (or How I Learned to Stop Worrying and Love Functional Programming)