Sustainable Web Development with Ruby on Rails:

Title: Sustainable Web Development with Ruby on Rails: Regex incorrect (testing Helpers section)

This code fails:

“# test/helpers/application_helper_test.rb

class ApplicationHelperTest < ActionView::TestCase
test “styled_widget_id” do
rendered_component = styled_widget_id(“1.23”)

→ regexp = %r{
→ <span # match a span tag
→ [^>]* # ignore anything that isn’t >
→ > # match the > to close the opening tag
→ .* # anything at all in here (e.g. other tags)
→ 1.23 # the widget ID we expect, escaping the dot
→ .* # anything after it (e.g. other tags)
→ # closing span tag
→ }x

assert_match regexp, rendered_component
 assert rendered_component.html_safe?
end

end

The line:
→ [^>]* # ignore anything that isn’t >
should be:
→ .* # ignore anything that isn’t >

I’m surprised this fails. The book executes this code when it’s run and that regexp should be correct.

Without the %r{..}x formatting, the regular expression in the book is:

regexp = /<span[^>]*>.*1\.23.*<\/span>/

And this does match the two strings in the book:

> regexp.match?('<span style="font-family: monospace">1.23</span>')
=> true
> regexp.match?('<span class="mono">1.23</span>') 
=> true

I did notice that copying and pasting from the PDF doesn’t copy the regular expression properly. Unfortunately, the tools I use to build the book result in weird uncopyable code blocks.

Can you try copying the code straight from the .zip files and see what happens?

Hi david,

Well that’s embarrassing…
I copied from the book again into a small test program (versus my previous test into the code for the widgets app), and it worked!
I must have had a typo.

However I did notice and forgot to mention that in the book there is a mistake in the line:

“→ # closing span tag”

the “/“ is not escaped.

My apologies for my screw-up.

Love the book.

Cheers,
Rob

That slash in the book does not need to be escaped because of the use of %r{...} syntax for regexps:

> x = %r{/span}
=> /\/span/
> "</span>".match?(x)
=> true

Thanks for the clarification David.
My noob status is obviously showing.

Cheers,
Rob

Heh, don’t sweat it. Regex is pretty complicated and requires a ton of trial and error, even if you think you’ve got it figured out :slight_smile:

Appreciate your allowances. :grinning: