Datasheet
Chapter 1: Building Resources
29
:instruction = > “”, :unit = > “”, :amount = > 0)
parser = IngredientParser.new(str, result)
parser.parse
end
Finally, the display _ string method of Ingredient makes sure everything is in a standard format
as follows:
def display_string
str = [amount_as_fraction, unit_inflected,
ingredient_inflected].compact.join(“ “)
str += “, #{instruction}” unless instruction.blank?
str
end
The compact.join( “ “ ) construct gets rid of the unit if the unit is not set, and does so without putting
an extra space in the output. The
amount_as_fraction method converts the decimal amount to a
fraction, matching the typical usage of cookbooks. (Although this may later be subject to localization,
because metric cookbooks generally don ’ t use fractions.) The inflected methods just ensure that the units
and ingredients are the proper singular or plural case to match the amount — because “ 1 cups carrots ”
will just make the site look stupid.
Adding a Coat of Paint
At this point, I went to www.freewebtemplates.com and chose the canvass template, also available at
www.freecsstemplates.org/preview/canvass . I wanted to spruce up the look of the site with
something clean that didn ’ t look like Generic Boring Business Site. The free templates on this site are
generally licensed via Creative Commons (although if you use one, check the download to make sure).
It ’ s a good place to get ideas and to see how various CSS effects can be managed. Naturally, if you were
doing a real commercial site, you ’ d probably want something more unique and original.
Integrating the template was straightforward. The template download has an HTML file, a CSS file, and
a bunch of image files. I copied the image files into the application ’ s
public/images directory, and then
took the CSS file and copied the entries into the preexisting
public/scaffold.css file. Alternately,
I could have just copied the entire file and added a link to it in the layout. Then I copied the body
elements from the provided HTML file into the
app/layouts/recipes.html.erb file so that the main
content in the provided file was replaced by the
< %= yield = > call that will tell Rails to include the
content for the action. I also tweaked the text somewhat to make it work for Soups OnLine. Finally, I had
to go back into the CSS file and change the relative references to image files (
images/img01.gif ) to
absolute references (
/images/img01.gif ), so that they would be correctly found. The finished result is
shown in Figure 1 - 2 . The final layout and CSS files are a bit long and off - point to be included in the text
here, but are available as part of the downloadable source code for this book.
c01.indd 29c01.indd 29 1/30/08 4:02:29 PM1/30/08 4:02:29 PM