The Depot Application 
    Table of Contents 
    
    Development Log 
    ruby /home/rubys/git/rails/railties/bin/rails -v 
    Rails 3.0.pre 
    /home/rubys/.rvm/ruby-1.9.1-phead/bin/ruby -v 
    ruby 1.9.2dev (2009-09-16 trunk 24965) [x86_64-linux] 
    gem -v 
    1.3.5 
    
      4 Instant Gratification 
     
    erb -r erbshim -T - < /home/rubys/git/awdwr/data/code/erb/ex1.html.erb |  
         sed 's/<!--.*-->//' 
    <ul> 
      <li>Addition: 3 </li> 
      <li>Concatenation: cowboy </li> 
      <li>Time in one hour:  2009-09-16 08:27:22 -0400 </li> 
    </ul> 
    erb -r erbshim -T - < /home/rubys/git/awdwr/data/code/erb/ex2.html.erb | 
         sed 's/<!--.*-->//' 
      
    Ho!<br /> 
      
    Ho!<br /> 
      
    Ho!<br /> 
      
    Merry Christmas! 
    erb -r erbshim -T - < /home/rubys/git/awdwr/data/code/erb/ex2a.html.erb | 
         sed 's/<!--.*-->//' 
    Ho!<br /> 
    Ho!<br /> 
    Ho!<br /> 
      
    Merry Christmas! 
    sed 's/-%>\n/%>/' < /home/rubys/git/awdwr/data/code/erb/ex2b.html.erb |  
         erb -r erbshim -T - | sed 's/<!--.*-->//' 
    Ho!<br /> 
    Ho!<br /> 
    Ho!<br /> 
    Merry Christmas! 
    
      6.1 Iteration A1: Getting Something Running 
     
    ruby /home/rubys/git/rails/railties/bin/rails depot 
          create   
          create  Rakefile 
          create  README 
          create  app 
          create  app/helpers/application_helper.rb 
          create  app/controllers/application_controller.rb 
          create  app/models 
          create  app/views/layouts 
          create  config 
          create  config/routes.rb 
          create  config/environment.rb 
          create  config/environments 
          create  config/environments/test.rb 
          create  config/environments/production.rb 
          create  config/environments/development.rb 
          create  config/initializers 
          create  config/initializers/mime_types.rb 
          create  config/initializers/session_store.rb 
          create  config/initializers/inflections.rb 
          create  config/initializers/new_rails_defaults.rb 
          create  config/initializers/backtrace_silencers.rb 
          create  config/locales 
          create  config/locales/en.yml 
          create  config/boot.rb 
          create  config/database.yml 
          create  db 
          create  db/seeds.rb 
          create  doc 
          create  doc/README_FOR_APP 
          create  lib 
          create  lib/tasks 
          create  log 
          create  log/server.log 
          create  log/production.log 
          create  log/development.log 
          create  log/test.log 
          create  public 
          create  public/422.html 
          create  public/index.html 
          create  public/favicon.ico 
          create  public/robots.txt 
          create  public/500.html 
          create  public/404.html 
          create  public/images 
          create  public/images/rails.png 
          create  public/stylesheets 
           exist  public/stylesheets 
          create  public/javascripts 
          create  public/javascripts/dragdrop.js 
          create  public/javascripts/effects.js 
          create  public/javascripts/controls.js 
          create  public/javascripts/prototype.js 
          create  public/javascripts/application.js 
          create  script 
          create  script/server 
          create  script/dbconsole 
          create  script/destroy 
          create  script/console 
          create  script/performance/benchmarker 
          create  script/performance/profiler 
          create  script/plugin 
          create  script/generate 
          create  script/runner 
          create  script/about 
          create  test 
          create  test/performance/browsing_test.rb 
          create  test/test_helper.rb 
          create  test/fixtures 
          create  test/integration 
          create  test/functional 
          create  test/unit 
          create  tmp 
          create  tmp/sessions 
          create  tmp/sockets 
          create  tmp/cache 
          create  tmp/pids 
          create  vendor/plugins 
    ln -s /home/rubys/git/rails vendor/rails 
    edit config/environments/development.rb 
    # Settings specified here will take precedence over those in config/environment.rb 
      
    # In the development environment your application's code is reloaded on 
    # every request.  This slows down response time but is perfect for development 
    # since you don't have to restart the webserver when you make code changes. 
    config.cache_classes = false 
      
    # Log error messages when you accidentally call methods on nil. 
    config.whiny_nils = true 
      
    # Show full error reports and disable caching 
    config.action_controller.consider_all_requests_local = true 
    config.action_view.debug_rjs                         = true 
    config.action_controller.perform_caching             = false 
      
    # Don't care if the mailer can't send 
    config.action_mailer.raise_delivery_errors = false 
      
    config.logger = Logger.new(config.log_path, 2, 10.kilobytes) 
    
      6.2 Creating the Products Model and Maintenance Application 
     
    ls -p 
    app/ 
    config/ 
    db/ 
    doc/ 
    lib/ 
    log/ 
    public/ 
    Rakefile 
    README 
    script/ 
    test/ 
    tmp/ 
    vendor/ 
    ruby script/generate scaffold product title:string description:text image_url:string 
    racc/parser.rb:33: warning: already initialized constant Racc_Runtime_Version 
    racc/parser.rb:34: warning: already initialized constant Racc_Runtime_Revision 
    racc/parser.rb:36: warning: already initialized constant Racc_Runtime_Core_Version_R 
    racc/parser.rb:37: warning: already initialized constant Racc_Runtime_Core_Revision_R 
    racc/parser.rb:41: warning: already initialized constant Racc_Runtime_Core_Revision_C 
    racc/parser.rb:49: warning: already initialized constant Racc_Main_Parsing_Routine 
    racc/parser.rb:50: warning: already initialized constant Racc_YY_Parse_Method 
    racc/parser.rb:51: warning: already initialized constant Racc_Runtime_Core_Version 
    racc/parser.rb:52: warning: already initialized constant Racc_Runtime_Core_Revision 
    racc/parser.rb:53: warning: already initialized constant Racc_Runtime_Type 
          invoke  active_record 
          create    db/migrate/20090916112725_create_products.rb 
          create    app/models/product.rb 
          invoke    test_unit 
          create      test/unit/product_test.rb 
          create      test/fixtures/products.yml 
           route  map.resources :products 
          invoke  scaffold_controller 
          create    app/controllers/products_controller.rb 
          invoke    erb 
          create      app/views/products 
          create      app/views/products/index.html.erb 
          create      app/views/products/edit.html.erb 
          create      app/views/products/show.html.erb 
          create      app/views/products/new.html.erb 
          create      app/views/products/_form.html.erb 
          create      app/views/layouts/products.html.erb 
          invoke    test_unit 
          create      test/functional/products_controller_test.rb 
          invoke    helper 
          create      app/helpers/products_helper.rb 
          invoke      test_unit 
          create        test/unit/helpers/products_helper_test.rb 
          invoke  stylesheets 
          create    public/stylesheets/scaffold.css 
    rake db:migrate 
    mv 20090916112725_create_products.rb 20080601000001_create_products.rb 
    (in /home/rubys/git/awdwr/work/depot) 
    ==  CreateProducts: migrating ================================================= 
    -- create_table(:products) 
       -> 0.0011s 
    ==  CreateProducts: migrated (0.0012s) ======================================== 
      
    sqlite3> select version from schema_migrations 
    version = 20080601000001 
    Start the server. 
    edit app/views/products/_form.html.erb 
    <% form_for(@product) do |f| %> 
      <%= f.error_messages %> 
      
      <div class="field"> 
        <%= f.label :title %><br /> 
        <%= f.text_field :title %> 
      </div> 
      <div class="field"> 
        <%= f.label :description %><br /> 
        <%= f.text_area :description, :rows => 6 %> 
      </div> 
      <div class="field"> 
        <%= f.label :image_url %><br /> 
        <%= f.text_field :image_url %> 
      </div> 
      <div class="actions"> 
        <% if @product.new_record? %> 
          <%= f.submit 'Create' %> 
        <% else %> 
          <%= f.submit 'Update' %> 
        <% end %> 
      </div> 
    <% end %> 
    get /products 
    
 
Listing products 
  
    Title 
    Description 
    Image url 
     
     
     
   
New product 
     
    
    get /products/new 
    
    
    post /products 
    
      product[title] => Pragmatic Version Control 
      product[description] => <p>
This book is a recipe-based approach to
using Subversion that will get you up
and running quickly---and correctly. All
projects need version control: it's a
foundational piece of any project's
infrastructure. Yet half of all project
teams in the U.S.  dont use any version
control at all. Many others dont use it
well, and end up experiencing
time-consuming problems.
</p>
 
      product[image_url] => /images/svn.jpg 
     
    
You are being 
redirected .    
 
    
    get http://127.0.0.1:3000/products/1 
    
 
  Title: 
  Pragmatic Version Control
  Description: 
  <p>
This book is a recipe-based approach to
using Subversion that will get you up
and running quickly---and correctly. All
projects need version control: it's a
foundational piece of any project's
infrastructure. Yet half of all project
teams in the U.S.  dont use any version
control at all. Many others dont use it
well, and end up experiencing
time-consuming problems.
</p>
  Image url: 
  /images/svn.jpg
Edit  |
Back 
     
    
    get /products 
    
 
Listing products 
  
    Title 
    Description 
    Image url 
     
     
     
   
  
    Pragmatic Version Control 
    <p>
This book is a recipe-based approach to
using Subversion that will get you up
and running quickly---and correctly. All
projects need version control: it's a
foundational piece of any project's
infrastructure. Yet half of all project
teams in the U.S.  dont use any version
control at all. Many others dont use it
well, and end up experiencing
time-consuming problems.
</p>
 
    /images/svn.jpg 
    Show  
    Edit  
    Destroy  
   
New product 
     
    
    sqlite3 db/development.sqlite3 .schema 
    CREATE TABLE "products" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar(255), "description" text, "image_url" varchar(255), "created_at" datetime, "updated_at" datetime); 
    CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL); 
    CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version"); 
    rake test 
    /home/rubys/.rvm/ruby-1.9.1-phead/bin/ruby -I"lib:test" "/home/rubys/.rvm/gems/ruby/1.9.1/gems/rake-0.8.7/lib/rake/rake_test_loader.rb" "test/unit/helpers/products_helper_test.rb" "test/unit/product_test.rb"  
    (in /home/rubys/git/awdwr/work/depot) 
    racc/parser.rb:33: warning: already initialized constant Racc_Runtime_Version 
    racc/parser.rb:34: warning: already initialized constant Racc_Runtime_Revision 
    racc/parser.rb:36: warning: already initialized constant Racc_Runtime_Core_Version_R 
    racc/parser.rb:37: warning: already initialized constant Racc_Runtime_Core_Revision_R 
    racc/parser.rb:41: warning: already initialized constant Racc_Runtime_Core_Revision_C 
    racc/parser.rb:49: warning: already initialized constant Racc_Main_Parsing_Routine 
    racc/parser.rb:50: warning: already initialized constant Racc_YY_Parse_Method 
    racc/parser.rb:51: warning: already initialized constant Racc_Runtime_Core_Version 
    racc/parser.rb:52: warning: already initialized constant Racc_Runtime_Core_Revision 
    racc/parser.rb:53: warning: already initialized constant Racc_Runtime_Type 
    Loaded suite /home/rubys/.rvm/gems/ruby/1.9.1/gems/rake-0.8.7/lib/rake/rake_test_loader 
    Started 
    . 
    Finished in 0.061769 seconds. 
      
    1 tests, 1 assertions, 0 failures, 0 errors, 0 skips 
    /home/rubys/.rvm/ruby-1.9.1-phead/bin/ruby -I"lib:test" "/home/rubys/.rvm/gems/ruby/1.9.1/gems/rake-0.8.7/lib/rake/rake_test_loader.rb" "test/functional/products_controller_test.rb"  
    racc/parser.rb:33: warning: already initialized constant Racc_Runtime_Version 
    racc/parser.rb:34: warning: already initialized constant Racc_Runtime_Revision 
    racc/parser.rb:36: warning: already initialized constant Racc_Runtime_Core_Version_R 
    racc/parser.rb:37: warning: already initialized constant Racc_Runtime_Core_Revision_R 
    racc/parser.rb:41: warning: already initialized constant Racc_Runtime_Core_Revision_C 
    racc/parser.rb:49: warning: already initialized constant Racc_Main_Parsing_Routine 
    racc/parser.rb:50: warning: already initialized constant Racc_YY_Parse_Method 
    racc/parser.rb:51: warning: already initialized constant Racc_Runtime_Core_Version 
    racc/parser.rb:52: warning: already initialized constant Racc_Runtime_Core_Revision 
    racc/parser.rb:53: warning: already initialized constant Racc_Runtime_Type 
    Loaded suite /home/rubys/.rvm/gems/ruby/1.9.1/gems/rake-0.8.7/lib/rake/rake_test_loader 
    Started 
    ....... 
    Finished in 0.176253 seconds. 
      
    7 tests, 10 assertions, 0 failures, 0 errors, 0 skips 
    /home/rubys/.rvm/ruby-1.9.1-phead/bin/ruby -I"lib:test" "/home/rubys/.rvm/gems/ruby/1.9.1/gems/rake-0.8.7/lib/rake/rake_test_loader.rb"   
    
      6.3 Iteration A2: Add a Missing Column 
     
    ruby script/generate migration add_price_to_product price:decimal 
    racc/parser.rb:33: warning: already initialized constant Racc_Runtime_Version 
    racc/parser.rb:34: warning: already initialized constant Racc_Runtime_Revision 
    racc/parser.rb:36: warning: already initialized constant Racc_Runtime_Core_Version_R 
    racc/parser.rb:37: warning: already initialized constant Racc_Runtime_Core_Revision_R 
    racc/parser.rb:41: warning: already initialized constant Racc_Runtime_Core_Revision_C 
    racc/parser.rb:49: warning: already initialized constant Racc_Main_Parsing_Routine 
    racc/parser.rb:50: warning: already initialized constant Racc_YY_Parse_Method 
    racc/parser.rb:51: warning: already initialized constant Racc_Runtime_Core_Version 
    racc/parser.rb:52: warning: already initialized constant Racc_Runtime_Core_Revision 
    racc/parser.rb:53: warning: already initialized constant Racc_Runtime_Type 
          invoke  active_record 
          create    db/migrate/20090916112743_add_price_to_product.rb 
    cat db/migrate/20090916112743_add_price_to_product.rb 
    class AddPriceToProduct < ActiveRecord::Migration 
      def self.up 
        add_column :products, :price, :decimal 
      end 
      
      def self.down 
        remove_column :products, :price 
      end 
    end 
    edit db/migrate/20090916112743_add_price_to_product.rb 
    class AddPriceToProduct < ActiveRecord::Migration 
      def self.up 
        add_column :products, :price, :decimal, 
          :precision => 8, :scale => 2, :default => 0 
      end 
      
      def self.down 
        remove_column :products, :price 
      end 
    end 
    rake db:migrate 
    mv 20090916112743_add_price_to_product.rb 20080601000002_add_price_to_product.rb 
    (in /home/rubys/git/awdwr/work/depot) 
    ==  AddPriceToProduct: migrating ============================================== 
    -- add_column(:products, :price, :decimal, {:precision=>8, :scale=>2, :default=>0}) 
       -> 0.0007s 
    ==  AddPriceToProduct: migrated (0.0009s) ===================================== 
      
    sqlite3 db/development.sqlite3 .schema 
    CREATE TABLE "products" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar(255), "description" text, "image_url" varchar(255), "created_at" datetime, "updated_at" datetime, "price" decimal(8,2) DEFAULT 0); 
    CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL); 
    CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version"); 
    edit app/views/products/index.html.erb 
    <h1>Listing products</h1> 
      
    <table> 
      <tr> 
        <th>Title</th> 
        <th>Description</th> 
        <th>Image url</th> 
        <th>Price</th> 
        <th></th> 
        <th></th> 
        <th></th> 
      </tr> 
      
    <% @products.each do |product| %> 
      <tr> 
        <td><%=h product.title %></td> 
        <td><%=h product.description %></td> 
        <td><%=h product.image_url %></td> 
        <td><%=h product.price %></td> 
        <td><%= link_to 'Show', product %></td> 
        <td><%= link_to 'Edit', edit_product_path(product) %></td> 
        <td><%= link_to 'Destroy', product, :confirm => 'Are you sure?', 
                                            :method => :delete %></td> 
      </tr> 
    <% end %> 
    </table> 
      
    <br /> 
      
    <%= link_to 'New product', new_product_path %> 
    edit app/views/products/_form.html.erb 
    <% form_for(@product) do |f| %> 
      <%= f.error_messages %> 
      
      <div class="field"> 
        <%= f.label :title %><br /> 
        <%= f.text_field :title %> 
      </div> 
      <div class="field"> 
        <%= f.label :description %><br /> 
        <%= f.text_area :description, :rows => 6 %> 
      </div> 
      <div class="field"> 
        <%= f.label :image_url %><br /> 
        <%= f.text_field :image_url %> 
      </div> 
      <div class="field"> 
        <%= f.label :price %><br /> 
        <%= f.text_field :price %> 
      </div> 
      <div class="actions"> 
        <% if @product.new_record? %> 
          <%= f.submit 'Create' %> 
        <% else %> 
          <%= f.submit 'Update' %> 
        <% end %> 
      </div> 
    <% end %> 
    edit app/views/products/show.html.erb 
    <p> 
      <b>Title:</b> 
      <%=h @product.title %> 
    </p> 
      
    <p> 
      <b>Description:</b> 
      <%=h @product.description %> 
    </p> 
      
    <p> 
      <b>Image url:</b> 
      <%=h @product.image_url %> 
    </p> 
      
    <p> 
      <b>Price:</b> 
      <%=h @product.price %> 
    </p> 
      
    <%= link_to 'Edit', edit_product_path(@product) %> | 
    <%= link_to 'Back', products_path %> 
    get /products 
    
 
Listing products 
  
    Title 
    Description 
    Image url 
    
    Price 
    
     
     
     
   
  
    Pragmatic Version Control 
    <p>
This book is a recipe-based approach to
using Subversion that will get you up
and running quickly---and correctly. All
projects need version control: it's a
foundational piece of any project's
infrastructure. Yet half of all project
teams in the U.S.  dont use any version
control at all. Many others dont use it
well, and end up experiencing
time-consuming problems.
</p>
 
    /images/svn.jpg 
    
    0.0 
    
    Show  
    Edit  
    Destroy  
   
New product 
     
    
    get /products/1 
    
 
  Title: 
  Pragmatic Version Control
  Description: 
  <p>
This book is a recipe-based approach to
using Subversion that will get you up
and running quickly---and correctly. All
projects need version control: it's a
foundational piece of any project's
infrastructure. Yet half of all project
teams in the U.S.  dont use any version
control at all. Many others dont use it
well, and end up experiencing
time-consuming problems.
</p>
  Image url: 
  /images/svn.jpg
  Price: 
  0.0
Edit  |
Back 
     
    
    get /products/new 
    
    
    rake test 
    /home/rubys/.rvm/ruby-1.9.1-phead/bin/ruby -I"lib:test" "/home/rubys/.rvm/gems/ruby/1.9.1/gems/rake-0.8.7/lib/rake/rake_test_loader.rb" "test/unit/helpers/products_helper_test.rb" "test/unit/product_test.rb"  
    (in /home/rubys/git/awdwr/work/depot) 
    racc/parser.rb:33: warning: already initialized constant Racc_Runtime_Version 
    racc/parser.rb:34: warning: already initialized constant Racc_Runtime_Revision 
    racc/parser.rb:36: warning: already initialized constant Racc_Runtime_Core_Version_R 
    racc/parser.rb:37: warning: already initialized constant Racc_Runtime_Core_Revision_R 
    racc/parser.rb:41: warning: already initialized constant Racc_Runtime_Core_Revision_C 
    racc/parser.rb:49: warning: already initialized constant Racc_Main_Parsing_Routine 
    racc/parser.rb:50: warning: already initialized constant Racc_YY_Parse_Method 
    racc/parser.rb:51: warning: already initialized constant Racc_Runtime_Core_Version 
    racc/parser.rb:52: warning: already initialized constant Racc_Runtime_Core_Revision 
    racc/parser.rb:53: warning: already initialized constant Racc_Runtime_Type 
    Loaded suite /home/rubys/.rvm/gems/ruby/1.9.1/gems/rake-0.8.7/lib/rake/rake_test_loader 
    Started 
    . 
    Finished in 0.053196 seconds. 
      
    1 tests, 1 assertions, 0 failures, 0 errors, 0 skips 
    /home/rubys/.rvm/ruby-1.9.1-phead/bin/ruby -I"lib:test" "/home/rubys/.rvm/gems/ruby/1.9.1/gems/rake-0.8.7/lib/rake/rake_test_loader.rb" "test/functional/products_controller_test.rb"  
    racc/parser.rb:33: warning: already initialized constant Racc_Runtime_Version 
    racc/parser.rb:34: warning: already initialized constant Racc_Runtime_Revision 
    racc/parser.rb:36: warning: already initialized constant Racc_Runtime_Core_Version_R 
    racc/parser.rb:37: warning: already initialized constant Racc_Runtime_Core_Revision_R 
    racc/parser.rb:41: warning: already initialized constant Racc_Runtime_Core_Revision_C 
    racc/parser.rb:49: warning: already initialized constant Racc_Main_Parsing_Routine 
    racc/parser.rb:50: warning: already initialized constant Racc_YY_Parse_Method 
    racc/parser.rb:51: warning: already initialized constant Racc_Runtime_Core_Version 
    racc/parser.rb:52: warning: already initialized constant Racc_Runtime_Core_Revision 
    racc/parser.rb:53: warning: already initialized constant Racc_Runtime_Type 
    Loaded suite /home/rubys/.rvm/gems/ruby/1.9.1/gems/rake-0.8.7/lib/rake/rake_test_loader 
    Started 
    ....... 
    Finished in 0.177226 seconds. 
      
    7 tests, 10 assertions, 0 failures, 0 errors, 0 skips 
    /home/rubys/.rvm/ruby-1.9.1-phead/bin/ruby -I"lib:test" "/home/rubys/.rvm/gems/ruby/1.9.1/gems/rake-0.8.7/lib/rake/rake_test_loader.rb"   
    edit app/views/products/show.html.erb 
    <p> 
      <b>Title:</b> 
      <%=h @product.title %> 
    </p> 
      
    <p> 
      <b>Description:</b> 
      <%= @product.description %> 
    </p> 
      
    <p> 
      <b>Image url:</b> 
      <%=h @product.image_url %> 
    </p> 
      
    <p> 
      <b>Price:</b> 
      <%=h @product.price %> 
    </p> 
      
    <%= link_to 'Edit', edit_product_path(@product) %> | 
    <%= link_to 'Back', products_path %> 
    get /products/1 
    
 
  Title: 
  Pragmatic Version Control
  Description: 
  
This book is a recipe-based approach to
using Subversion that will get you up
and running quickly---and correctly. All
projects need version control: it's a
foundational piece of any project's
infrastructure. Yet half of all project
teams in the U.S.  dont use any version
control at all. Many others dont use it
well, and end up experiencing
time-consuming problems.
  Image url: 
  /images/svn.jpg
  Price: 
  0.0
Edit  |
Back 
     
    
    
      6.4 Iteration A3: Validate! 
     
    edit app/models/product.rb 
    class Product < ActiveRecord::Base 
      validates_presence_of :title, :description, :image_url 
      validates_numericality_of :price 
      validate :price_must_be_at_least_a_cent 
      validates_uniqueness_of :title 
      validates_format_of :image_url, :allow_blank => true, 
                          :with    => %r{\.(gif|jpg|png)$}i, 
                          :message => 'must be a URL for GIF, JPG ' + 
                                      'or PNG image.' 
      
    protected 
      def price_must_be_at_least_a_cent 
        errors.add(:price, 'should be at least 0.01') if price.nil? || 
                           price < 0.00 
      end 
      
    end 
    get /products/new 
    
    
    post /products 
    
    
    
    get /products/new 
    
    
    post /products 
    
      product[title] => Pragmatic Unit Testing 
      product[description] => A true masterwork.  Comparable to Kafka at
his funniest, or Marx during his slapstick
period.  Move over, Tolstoy, there's a new
funster in town.
 
      product[image_url] => /images/utj.jpg 
      product[price] => wibble 
     
    
    
    edit app/models/product.rb 
    class Product < ActiveRecord::Base 
      validates_presence_of :title, :description, :image_url 
      validates_numericality_of :price 
      validate :price_must_be_at_least_a_cent 
      validates_uniqueness_of :title 
      validates_format_of :image_url, 
                          :with    => %r{\.(gif|jpg|png)$}i, 
                          :message => 'must be a URL for GIF, JPG ' + 
                                      'or PNG image.' 
      
    protected 
      def price_must_be_at_least_a_cent 
        errors.add(:price, 'should be at least 0.01') if price.nil? || 
                           price < 0.01 
      end 
      
    end 
    edit app/views/layouts/products.html.erb 
    
      6.5 Iteration A4: Making Prettier Listings 
     
    edit db/migrate/003_add_test_data.rb 
    class AddTestData < ActiveRecord::Migration 
      def self.up 
        Product.delete_all 
        Product.create(:title => 'Pragmatic Version Control', 
          :description => 
          %{<p> 
             This book is a recipe-based approach to using Subversion that will  
             get you up and running quickly---and correctly. All projects need 
             version control: it's a foundational piece of any project's  
             infrastructure. Yet half of all project teams in the U.S. don't use 
             any version control at all. Many others don't use it well, and end  
             up experiencing time-consuming problems. 
          </p>}, 
        :image_url => '/images/svn.jpg', 
        :price => 28.50) 
        # . . . 
      end 
      
      def self.down 
        Product.delete_all 
      end 
    end 
    rake db:migrate 
    mv 003_add_test_data.rb 20080601000003_add_test_data.rb 
    (in /home/rubys/git/awdwr/work/depot) 
    ==  AddTestData: migrating ==================================================== 
    ==  AddTestData: migrated (0.0141s) =========================================== 
      
    edit app/views/layouts/products.html.erb 
    <!DOCTYPE html> 
    <html> 
    <head> 
      <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> 
      <title>Products: <%= controller.action_name %></title> 
      <%= stylesheet_link_tag 'scaffold', 'depot' %> 
    </head> 
    edit app/views/products/index.html.erb 
    <div id="product-list"> 
      <h1>Listing products</h1> 
      
      <table> 
      <% for product in @products %> 
        <tr class="<%= cycle('list-line-odd', 'list-line-even') %>"> 
      
          <td> 
            <%= image_tag product.image_url, :class => 'list-image' %> 
          </td> 
      
          <td class="list-description"> 
            <dl> 
              <dt><%=h product.title %></dt> 
              <dd><%=h truncate(product.description.gsub(/<.*?>/,''), 
                     :length => 80) %></dd> 
            </dl> 
          </td> 
      
          <td class="list-actions"> 
            <%= link_to 'Show', product %><br/> 
            <%= link_to 'Edit', edit_product_path(product) %><br/> 
            <%= link_to 'Destroy', product,  
                        :confirm => 'Are you sure?', 
                        :method => :delete %> 
          </td> 
        </tr> 
      <% end %> 
      </table> 
    </div> 
      
    <br /> 
      
    <%= link_to 'New product', new_product_path %> 
    cp -v /home/rubys/git/awdwr/data/images/* public/images/ 
    `/home/rubys/git/awdwr/data/images/auto.jpg' -> `public/images/auto.jpg' 
    `/home/rubys/git/awdwr/data/images/logo.png' -> `public/images/logo.png' 
    `/home/rubys/git/awdwr/data/images/rails.png' -> `public/images/rails.png' 
    `/home/rubys/git/awdwr/data/images/svn.jpg' -> `public/images/svn.jpg' 
    `/home/rubys/git/awdwr/data/images/utc.jpg' -> `public/images/utc.jpg' 
    cp -v /home/rubys/git/awdwr/data/depot.css public/stylesheets 
    `/home/rubys/git/awdwr/data/depot.css' -> `public/stylesheets/depot.css' 
    get /products 
    
    
    
      7.1 Iteration B1: Create the Catalog Listing 
     
    ruby script/generate controller store index 
    racc/parser.rb:33: warning: already initialized constant Racc_Runtime_Version 
    racc/parser.rb:34: warning: already initialized constant Racc_Runtime_Revision 
    racc/parser.rb:36: warning: already initialized constant Racc_Runtime_Core_Version_R 
    racc/parser.rb:37: warning: already initialized constant Racc_Runtime_Core_Revision_R 
    racc/parser.rb:41: warning: already initialized constant Racc_Runtime_Core_Revision_C 
    racc/parser.rb:49: warning: already initialized constant Racc_Main_Parsing_Routine 
    racc/parser.rb:50: warning: already initialized constant Racc_YY_Parse_Method 
    racc/parser.rb:51: warning: already initialized constant Racc_Runtime_Core_Version 
    racc/parser.rb:52: warning: already initialized constant Racc_Runtime_Core_Revision 
    racc/parser.rb:53: warning: already initialized constant Racc_Runtime_Type 
          create  app/controllers/store_controller.rb 
          invoke  erb 
          create    app/views/store 
          create    app/views/store/index.html.erb 
          invoke  test_unit 
          create    test/functional/store_controller_test.rb 
          invoke  helper 
          create    app/helpers/store_helper.rb 
          invoke    test_unit 
          create      test/unit/helpers/store_helper_test.rb 
    Restart the server. 
    get /store 
    
Store#index 
Find me in app/views/store/index.html.erb
     
    
    edit app/controllers/store_controller.rb 
    class StoreController < ApplicationController 
      def index 
        @products = Product.find_products_for_sale 
      end 
      
    end 
    edit app/models/product.rb 
    class Product < ActiveRecord::Base 
      
      def self.find_products_for_sale 
        find(:all, :order => "title") 
      end 
      
      # validation stuff... 
      
      
      validates_presence_of :title, :description, :image_url 
      validates_numericality_of :price 
      validate :price_must_be_at_least_a_cent 
      validates_uniqueness_of :title 
      validates_format_of :image_url, 
                          :with    => %r{\.(gif|jpg|png)$}i, 
                          :message => 'must be a URL for GIF, JPG ' + 
                                      'or PNG image.' 
      
    protected 
      def price_must_be_at_least_a_cent 
        errors.add(:price, 'should be at least 0.01') if price.nil? || 
                           price < 0.01 
      end 
      
    end 
    edit app/views/store/index.html.erb 
    <h1>Your Pragmatic Catalog</h1> 
      
    <% for product in @products -%> 
      <div class="entry"> 
        <%= image_tag(product.image_url) %> 
        <h3><%=h product.title %></h3> 
        <%= product.description %> 
        <div class="price-line"> 
        <span class="price"><%= product.price %></span> 
        </div> 
      </div> 
    <% end %> 
    get /store 
    
Your Pragmatic Catalog 
  
     
    Pragmatic Project Automation 
    
       Pragmatic Project Automation  shows you how to improve the 
       consistency and repeatability of your project's procedures using 
       automation to reduce risk and errors.
      
      
        Simply put, we're going to put this thing called a computer to work 
        for you doing the mundane (but important) project stuff. That means 
        you'll have more time and energy to do the really 
        exciting---and difficult---stuff, like writing quality code.
      
    
    29.95 
    
   
  
     
    Pragmatic Unit Testing (C#) 
    
        Pragmatic programmers use feedback to drive their development and 
        personal processes. The most valuable feedback you can get while 
        coding comes from unit testing.
      
      
        Without good tests in place, coding can become a frustrating game of 
        "whack-a-mole." That's the carnival game where the player strikes at a 
        mechanical mole; it retreats and another mole pops up on the opposite side 
        of the field. The moles pop up and down so fast that you end up flailing 
        your mallet helplessly as the moles continue to pop up where you least 
        expect them.
      
    
    27.75 
    
   
  
     
    Pragmatic Version Control 
    
         This book is a recipe-based approach to using Subversion that will 
         get you up and running quickly---and correctly. All projects need
         version control: it's a foundational piece of any project's 
         infrastructure. Yet half of all project teams in the U.S. don't use
         any version control at all. Many others don't use it well, and end 
         up experiencing time-consuming problems.
      
    
    28.5 
    
   
     
    
    
      7.2 Iteration B2: Add a Page Layout 
     
    edit app/views/layouts/store.html.erb 
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
                          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html> 
    <head> 
      <title>Pragprog Books Online Store</title> 
      <%= stylesheet_link_tag "depot", :media => "all" %><!-- <label id="code.slt"/> --> 
    </head> 
    <body id="store"> 
      <div id="banner"> 
        <%= image_tag("logo.png") %> 
        <%= @page_title || "Pragmatic Bookshelf" %><!-- <label id="code.depot.e.title"/> --> 
      </div> 
      <div id="columns"> 
        <div id="side"> 
          <a href="http://www....">Home</a><br /> 
          <a href="http://www..../faq">Questions</a><br /> 
          <a href="http://www..../news">News</a><br /> 
          <a href="http://www..../contact">Contact</a><br /> 
        </div> 
        <div id="main"> 
          <%= yield :layout %><!-- <label id="code.depot.e.include"/> --> 
        </div> 
      </div> 
    </body> 
    </html> 
    edit public/stylesheets/depot.css 
    /* Styles for main page */ 
      
    #banner { 
      background: #9c9; 
      padding-top: 10px; 
      padding-bottom: 10px; 
      border-bottom: 2px solid; 
      font: small-caps 40px/40px "Times New Roman", serif; 
      color: #282; 
      text-align: center; 
    } 
      
    #banner img { 
      float: left; 
    } 
      
    #columns { 
      background: #141; 
    } 
      
    #main { 
      margin-left: 13em; 
      padding-top: 4ex; 
      padding-left: 2em; 
      background: white; 
    } 
      
    #side { 
      float: left; 
      padding-top: 1em; 
      padding-left: 1em; 
      padding-bottom: 1em; 
      width: 12em; 
      background: #141; 
    } 
      
    #side a { 
      color: #bfb; 
      font-size: small; 
    } 
    get /store 
    
 
  
    
    Pragmatic Bookshelf
  
 
  
    
    
      Your Pragmatic Catalog 
  
     
    Pragmatic Project Automation 
    
       Pragmatic Project Automation  shows you how to improve the 
       consistency and repeatability of your project's procedures using 
       automation to reduce risk and errors.
      
      
        Simply put, we're going to put this thing called a computer to work 
        for you doing the mundane (but important) project stuff. That means 
        you'll have more time and energy to do the really 
        exciting---and difficult---stuff, like writing quality code.
      
    
    29.95 
    
   
  
     
    Pragmatic Unit Testing (C#) 
    
        Pragmatic programmers use feedback to drive their development and 
        personal processes. The most valuable feedback you can get while 
        coding comes from unit testing.
      
      
        Without good tests in place, coding can become a frustrating game of 
        "whack-a-mole." That's the carnival game where the player strikes at a 
        mechanical mole; it retreats and another mole pops up on the opposite side 
        of the field. The moles pop up and down so fast that you end up flailing 
        your mallet helplessly as the moles continue to pop up where you least 
        expect them.
      
    
    27.75 
    
   
  
     
    Pragmatic Version Control 
    
         This book is a recipe-based approach to using Subversion that will 
         get you up and running quickly---and correctly. All projects need
         version control: it's a foundational piece of any project's 
         infrastructure. Yet half of all project teams in the U.S. don't use
         any version control at all. Many others don't use it well, and end 
         up experiencing time-consuming problems.
      
    
    28.5 
    
   
     
   
     
    
    
      7.3 Iteration B3: Use a Helper to Format the Price 
     
    edit app/views/store/index.html.erb 
    <h1>Your Pragmatic Catalog</h1> 
      
    <% for product in @products -%> 
      <div class="entry"> 
        <%= image_tag(product.image_url) %> 
        <h3><%=h product.title %></h3> 
        <%= product.description %> 
        <div class="price-line"> 
        <span class="price"><%= number_to_currency(product.price) %></span> 
        </div> 
      </div> 
    <% end %> 
    get /store 
    
 
  
    
    Pragmatic Bookshelf
  
 
  
    
    
      Your Pragmatic Catalog 
  
     
    Pragmatic Project Automation 
    
       Pragmatic Project Automation  shows you how to improve the 
       consistency and repeatability of your project's procedures using 
       automation to reduce risk and errors.
      
      
        Simply put, we're going to put this thing called a computer to work 
        for you doing the mundane (but important) project stuff. That means 
        you'll have more time and energy to do the really 
        exciting---and difficult---stuff, like writing quality code.
      
    
    $29.95 
    
   
  
     
    Pragmatic Unit Testing (C#) 
    
        Pragmatic programmers use feedback to drive their development and 
        personal processes. The most valuable feedback you can get while 
        coding comes from unit testing.
      
      
        Without good tests in place, coding can become a frustrating game of 
        "whack-a-mole." That's the carnival game where the player strikes at a 
        mechanical mole; it retreats and another mole pops up on the opposite side 
        of the field. The moles pop up and down so fast that you end up flailing 
        your mallet helplessly as the moles continue to pop up where you least 
        expect them.
      
    
    $27.75 
    
   
  
     
    Pragmatic Version Control 
    
         This book is a recipe-based approach to using Subversion that will 
         get you up and running quickly---and correctly. All projects need
         version control: it's a foundational piece of any project's 
         infrastructure. Yet half of all project teams in the U.S. don't use
         any version control at all. Many others don't use it well, and end 
         up experiencing time-consuming problems.
      
    
    $28.50 
    
   
     
   
     
    
    
      7.4 Iteration B4: Linking to the Cart 
     
    edit app/views/store/index.html.erb 
        <%= button_to "Add to Cart" %> 
    edit public/stylesheets/depot.css 
    #store .entry form, #store .entry form div { 
      display: inline; 
    } 
    get /store 
    
 
  
    
    Pragmatic Bookshelf
  
 
  
    
    
      Your Pragmatic Catalog 
  
     
    Pragmatic Project Automation 
    
       Pragmatic Project Automation  shows you how to improve the 
       consistency and repeatability of your project's procedures using 
       automation to reduce risk and errors.
      
      
        Simply put, we're going to put this thing called a computer to work 
        for you doing the mundane (but important) project stuff. That means 
        you'll have more time and energy to do the really 
        exciting---and difficult---stuff, like writing quality code.
      
    
   
  
     
    Pragmatic Unit Testing (C#) 
    
        Pragmatic programmers use feedback to drive their development and 
        personal processes. The most valuable feedback you can get while 
        coding comes from unit testing.
      
      
        Without good tests in place, coding can become a frustrating game of 
        "whack-a-mole." That's the carnival game where the player strikes at a 
        mechanical mole; it retreats and another mole pops up on the opposite side 
        of the field. The moles pop up and down so fast that you end up flailing 
        your mallet helplessly as the moles continue to pop up where you least 
        expect them.
      
    
   
  
     
    Pragmatic Version Control 
    
         This book is a recipe-based approach to using Subversion that will 
         get you up and running quickly---and correctly. All projects need
         version control: it's a foundational piece of any project's 
         infrastructure. Yet half of all project teams in the U.S. don't use
         any version control at all. Many others don't use it well, and end 
         up experiencing time-consuming problems.
      
    
   
     
   
     
    
    
      8.1 Sessions 
     
    rake db:sessions:create 
    (in /home/rubys/git/awdwr/work/depot) 
          invoke  active_record 
          create    db/migrate/20090916112807_add_sessions_table.rb 
    rake db:migrate 
    mv 20090916112807_add_sessions_table.rb 20080601000004_add_sessions_table.rb 
    (in /home/rubys/git/awdwr/work/depot) 
    ==  AddSessionsTable: migrating =============================================== 
    -- create_table(:sessions) 
       -> 0.0013s 
    -- add_index(:sessions, :session_id) 
       -> 0.0005s 
    -- add_index(:sessions, :updated_at) 
       -> 0.0002s 
    ==  AddSessionsTable: migrated (0.0021s) ====================================== 
      
    sqlite3 db/development.sqlite3 .schema 
    CREATE TABLE "products" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar(255), "description" text, "image_url" varchar(255), "created_at" datetime, "updated_at" datetime, "price" decimal(8,2) DEFAULT 0); 
    CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL); 
    CREATE TABLE "sessions" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "session_id" varchar(255) NOT NULL, "data" text, "created_at" datetime, "updated_at" datetime); 
    CREATE INDEX "index_sessions_on_session_id" ON "sessions" ("session_id"); 
    CREATE INDEX "index_sessions_on_updated_at" ON "sessions" ("updated_at"); 
    CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version"); 
    edit config/initializers/session_store.rb 
    # Be sure to restart your server when you modify this file. 
      
    # Your secret key for verifying cookie session data integrity. 
    # If you change this key, all old sessions will become invalid! 
    # Make sure the secret is at least 30 characters and all random,  
    # no regular words or you'll be exposed to dictionary attacks. 
    ActionController::Base.session = { 
      :key         => '_depot_session', 
      :secret      => '7a0298e11d615f2ddcfa56ccf23cc3e553d0772f1578204686e089a94158e732050543b46670f629ef2aa9451b96f4d555fb9e8ecb59af44f511020894b692fb' 
    } 
      
    # Use the database for sessions instead of the cookie-based default, 
    # which shouldn't be used to store highly confidential information 
    # (create the session table with "rake db:sessions:create") 
    ActionController::Base.session_store = :active_record_store 
    Restart the server. 
    edit app/controllers/application_controller.rb 
    # Filters added to this controller apply to all controllers in the application. 
    # Likewise, all the methods added will be available for all controllers. 
      
    class ApplicationController < ActionController::Base 
      helper :all # include all helpers, all the time 
      protect_from_forgery # See ActionController::RequestForgeryProtection for details 
      
      # Scrub sensitive parameters from your log 
      # filter_parameter_logging :password 
    end 
    edit app/controllers/store_controller.rb 
    private 
      
      def find_cart 
        session[:cart] ||= Cart.new 
      end 
    
      8.199999999999999 Iteration C1: Creating a Cart 
     
    edit app/models/cart.rb 
    class Cart 
      attr_reader :items   # <wtf linkend="wtf.attr.accessor">attr_reader</wtf> 
       
      def initialize 
        @items = [] 
      end 
       
      def add_product(product) 
        @items << product 
      end 
    end 
    edit app/views/store/index.html.erb 
        <%= button_to "Add to Cart", :action => 'add_to_cart', :id => product %> 
    edit app/controllers/store_controller.rb 
      def add_to_cart 
        product = Product.find(params[:id]) # <label id="code.depot.f.find"/> 
        @cart = find_cart                   # <label id="code.depot.f.find2"/> 
        @cart.add_product(product)          # <label id="code.depot.f.add"/> 
      end 
    get /store/add_to_cart/2 
    
Template is missing 
Missing template store/add_to_cart - {:formats=>[:"*/*"]} - partial: false.erb in view path /home/rubys/git/awdwr/work/depot/app/views
     
    
    edit app/views/store/add_to_cart.html.erb 
    <h2>Your Pragmatic Cart</h2> 
    <ul> 
      <% for item in @cart.items %> 
        <li><%=h item.title %></li> 
      <% end %> 
    </ul> 
    get /store/add_to_cart/2 
    
 
  
    
    Pragmatic Bookshelf
  
 
  
    
    
      Your Pragmatic Cart 
  
    Pragmatic Project Automation 
  
 
     
   
     
    
    get /store/add_to_cart/3 
    
 
  
    
    Pragmatic Bookshelf
  
 
  
    
    
      Your Pragmatic Cart 
  
    Pragmatic Project Automation 
  
    Pragmatic Version Control 
  
 
     
   
     
    
    
      8.300000000000001 Iteration C2: Creating a Smarter Cart 
     
    edit app/models/cart_item.rb 
    class CartItem 
      
      attr_reader :product, :quantity 
       
      def initialize(product) 
        @product = product 
        @quantity = 1 
      end 
       
      def increment_quantity 
        @quantity += 1 
      end 
       
      def title 
        @product.title 
      end 
       
      def price 
        @product.price * @quantity 
      end 
    end 
    edit app/models/cart.rb 
      def add_product(product) 
        current_item = @items.find {|item| item.product == product} 
        if current_item 
          current_item.increment_quantity 
        else 
          @items << CartItem.new(product) 
        end 
      end 
    edit app/views/store/add_to_cart.html.erb 
    <h2>Your Pragmatic Cart</h2> 
    <ul> 
      <% for item in @cart.items %> 
        <li><%= item.quantity %> × <%=h item.title %></li> 
      <% end %> 
    </ul> 
    get /store/add_to_cart/2 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
      <title>Action Controller: Exception caught</title> 
      <style> 
        body { background-color: #fff; color: #333; } 
     
        body, p, ol, ul, td { 
          font-family: verdana, arial, helvetica, sans-serif; 
          font-size:   13px; 
          line-height: 18px; 
        } 
     
        pre { 
          background-color: #eee; 
          padding: 10px; 
          font-size: 11px; 
        } 
     
        a { color: #000; } 
        a:visited { color: #666; } 
        a:hover { color: #fff; background-color:#000; } 
      </style> 
    </head> 
    <body> 
     
    <h1> 
      NoMethodError 
       
        in StoreController#add_to_cart 
       
    </h1> 
    <pre>undefined method `product' for #<Product:0x000000031fae70></pre> 
     
     
     
    <p><code>RAILS_ROOT: /home/rubys/git/awdwr/work/depot</code></p> 
     
    <div id="traces"> 
       
         
        <a href="#" onclick="["document.getElementById('Framework-Trace').style.display='none';", "document.getElementById('Full-Trace').style.display='none';"]document.getElementById('Application-Trace').style.display='block';; return false;">Application Trace</a> | 
       
         
        <a href="#" onclick="["document.getElementById('Application-Trace').style.display='none';", "document.getElementById('Full-Trace').style.display='none';"]document.getElementById('Framework-Trace').style.display='block';; return false;">Framework Trace</a> | 
       
         
        <a href="#" onclick="["document.getElementById('Application-Trace').style.display='none';", "document.getElementById('Framework-Trace').style.display='none';"]document.getElementById('Full-Trace').style.display='block';; return false;">Full Trace</a>  
       
     
       
        <div id="Application-Trace" style="display: block;"> 
          <pre><code>/home/rubys/git/awdwr/work/depot/vendor/rails/activemodel/lib/active_model/attribute_methods.rb:240:in `method_missing' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/activerecord/lib/active_record/attribute_methods.rb:38:in `method_missing' 
    /home/rubys/git/awdwr/work/depot/app/models/cart.rb:10:in `block in add_product' 
    /home/rubys/git/awdwr/work/depot/app/models/cart.rb:10:in `each' 
    /home/rubys/git/awdwr/work/depot/app/models/cart.rb:10:in `find' 
    /home/rubys/git/awdwr/work/depot/app/models/cart.rb:10:in `add_product' 
    /home/rubys/git/awdwr/work/depot/app/controllers/store_controller.rb:11:in `add_to_cart' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_controller/base.rb:43:in `send_action' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/abstract_controller/base.rb:112:in `process_action' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/abstract_controller/logger.rb:32:in `process_action' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/abstract_controller/callbacks.rb:20:in `block in process_action' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/activesupport/lib/active_support/new_callbacks.rb:420:in `_run__1808272810262179749__process_action__1744376372027287746__callbacks' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/activesupport/lib/active_support/new_callbacks.rb:405:in `_run_process_action_callbacks' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/abstract_controller/callbacks.rb:19:in `process_action' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_controller/metal/rendering_controller.rb:42:in `process_action' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_controller/metal/compatibility.rb:77:in `process_action' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_controller/metal/flash.rb:140:in `process_action' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_controller/metal/rescuable.rb:46:in `process_action' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/abstract_controller/base.rb:91:in `process' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_controller/metal/filter_parameter_logging.rb:69:in `process' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_controller/metal.rb:72:in `call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_controller/metal/rack_convenience.rb:15:in `call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_controller/metal.rb:96:in `call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_controller/routing/route_set.rb:440:in `call' 
    /home/rubys/.rvm/gems/ruby/1.9.1/gems/rack-1.0.0/lib/rack/head.rb:9:in `call' 
    /home/rubys/.rvm/gems/ruby/1.9.1/gems/rack-1.0.0/lib/rack/methodoverride.rb:24:in `call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_dispatch/middleware/params_parser.rb:19:in `call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_dispatch/middleware/session/abstract_store.rb:146:in `call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/activerecord/lib/active_record/query_cache.rb:29:in `block in call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb:34:in `cache' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/activerecord/lib/active_record/query_cache.rb:9:in `cache' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/activerecord/lib/active_record/query_cache.rb:28:in `call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb:363:in `call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_dispatch/middleware/rescue.rb:8:in `call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_dispatch/middleware/callbacks.rb:35:in `call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_dispatch/middleware/show_exceptions.rb:47:in `call' 
    /home/rubys/.rvm/gems/ruby/1.9.1/gems/rack-1.0.0/lib/rack/lock.rb:11:in `block in call' 
    <internal:prelude>:8:in `synchronize'</code></pre> 
        </div> 
       
        <div id="Framework-Trace" style="display: none;"> 
          <pre><code>/home/rubys/git/awdwr/work/depot/vendor/rails/activemodel/lib/active_model/attribute_methods.rb:240:in `method_missing' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/activerecord/lib/active_record/attribute_methods.rb:38:in `method_missing' 
    /home/rubys/git/awdwr/work/depot/app/models/cart.rb:10:in `block in add_product' 
    /home/rubys/git/awdwr/work/depot/app/models/cart.rb:10:in `each' 
    /home/rubys/git/awdwr/work/depot/app/models/cart.rb:10:in `find' 
    /home/rubys/git/awdwr/work/depot/app/models/cart.rb:10:in `add_product' 
    /home/rubys/git/awdwr/work/depot/app/controllers/store_controller.rb:11:in `add_to_cart' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_controller/base.rb:43:in `send_action' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/abstract_controller/base.rb:112:in `process_action' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/abstract_controller/logger.rb:32:in `process_action' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/abstract_controller/callbacks.rb:20:in `block in process_action' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/activesupport/lib/active_support/new_callbacks.rb:420:in `_run__1808272810262179749__process_action__1744376372027287746__callbacks' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/activesupport/lib/active_support/new_callbacks.rb:405:in `_run_process_action_callbacks' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/abstract_controller/callbacks.rb:19:in `process_action' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_controller/metal/rendering_controller.rb:42:in `process_action' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_controller/metal/compatibility.rb:77:in `process_action' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_controller/metal/flash.rb:140:in `process_action' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_controller/metal/rescuable.rb:46:in `process_action' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/abstract_controller/base.rb:91:in `process' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_controller/metal/filter_parameter_logging.rb:69:in `process' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_controller/metal.rb:72:in `call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_controller/metal/rack_convenience.rb:15:in `call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_controller/metal.rb:96:in `call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_controller/routing/route_set.rb:440:in `call' 
    /home/rubys/.rvm/gems/ruby/1.9.1/gems/rack-1.0.0/lib/rack/head.rb:9:in `call' 
    /home/rubys/.rvm/gems/ruby/1.9.1/gems/rack-1.0.0/lib/rack/methodoverride.rb:24:in `call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_dispatch/middleware/params_parser.rb:19:in `call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_dispatch/middleware/session/abstract_store.rb:146:in `call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/activerecord/lib/active_record/query_cache.rb:29:in `block in call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb:34:in `cache' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/activerecord/lib/active_record/query_cache.rb:9:in `cache' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/activerecord/lib/active_record/query_cache.rb:28:in `call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb:363:in `call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_dispatch/middleware/rescue.rb:8:in `call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_dispatch/middleware/callbacks.rb:35:in `call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_dispatch/middleware/show_exceptions.rb:47:in `call' 
    /home/rubys/.rvm/gems/ruby/1.9.1/gems/rack-1.0.0/lib/rack/lock.rb:11:in `block in call' 
    /home/rubys/.rvm/gems/ruby/1.9.1/gems/rack-1.0.0/lib/rack/lock.rb:11:in `call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/railties/lib/rails/rack/static.rb:31:in `call' 
    /home/rubys/.rvm/gems/ruby/1.9.1/gems/rack-1.0.0/lib/rack/urlmap.rb:46:in `block in call' 
    /home/rubys/.rvm/gems/ruby/1.9.1/gems/rack-1.0.0/lib/rack/urlmap.rb:40:in `each' 
    /home/rubys/.rvm/gems/ruby/1.9.1/gems/rack-1.0.0/lib/rack/urlmap.rb:40:in `call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/railties/lib/rails/rack/log_tailer.rb:17:in `call' 
    /home/rubys/.rvm/gems/ruby/1.9.1/gems/rack-1.0.0/lib/rack/content_length.rb:13:in `call' 
    /home/rubys/.rvm/gems/ruby/1.9.1/gems/rack-1.0.0/lib/rack/handler/webrick.rb:46:in `service' 
    /home/rubys/.rvm/ruby-1.9.1-phead/lib/ruby/1.9.1/webrick/httpserver.rb:111:in `service' 
    /home/rubys/.rvm/ruby-1.9.1-phead/lib/ruby/1.9.1/webrick/httpserver.rb:70:in `run' 
    /home/rubys/.rvm/ruby-1.9.1-phead/lib/ruby/1.9.1/webrick/server.rb:183:in `block in start_thread'</code></pre> 
        </div> 
       
        <div id="Full-Trace" style="display: none;"> 
          <pre><code>/home/rubys/git/awdwr/work/depot/vendor/rails/activemodel/lib/active_model/attribute_methods.rb:240:in `method_missing' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/activerecord/lib/active_record/attribute_methods.rb:38:in `method_missing' 
    /home/rubys/git/awdwr/work/depot/app/models/cart.rb:10:in `block in add_product' 
    /home/rubys/git/awdwr/work/depot/app/models/cart.rb:10:in `each' 
    /home/rubys/git/awdwr/work/depot/app/models/cart.rb:10:in `find' 
    /home/rubys/git/awdwr/work/depot/app/models/cart.rb:10:in `add_product' 
    /home/rubys/git/awdwr/work/depot/app/controllers/store_controller.rb:11:in `add_to_cart' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_controller/base.rb:43:in `send_action' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/abstract_controller/base.rb:112:in `process_action' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/abstract_controller/logger.rb:32:in `process_action' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/abstract_controller/callbacks.rb:20:in `block in process_action' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/activesupport/lib/active_support/new_callbacks.rb:420:in `_run__1808272810262179749__process_action__1744376372027287746__callbacks' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/activesupport/lib/active_support/new_callbacks.rb:405:in `_run_process_action_callbacks' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/abstract_controller/callbacks.rb:19:in `process_action' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_controller/metal/rendering_controller.rb:42:in `process_action' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_controller/metal/compatibility.rb:77:in `process_action' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_controller/metal/flash.rb:140:in `process_action' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_controller/metal/rescuable.rb:46:in `process_action' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/abstract_controller/base.rb:91:in `process' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_controller/metal/filter_parameter_logging.rb:69:in `process' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_controller/metal.rb:72:in `call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_controller/metal/rack_convenience.rb:15:in `call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_controller/metal.rb:96:in `call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_controller/routing/route_set.rb:440:in `call' 
    /home/rubys/.rvm/gems/ruby/1.9.1/gems/rack-1.0.0/lib/rack/head.rb:9:in `call' 
    /home/rubys/.rvm/gems/ruby/1.9.1/gems/rack-1.0.0/lib/rack/methodoverride.rb:24:in `call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_dispatch/middleware/params_parser.rb:19:in `call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_dispatch/middleware/session/abstract_store.rb:146:in `call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/activerecord/lib/active_record/query_cache.rb:29:in `block in call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb:34:in `cache' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/activerecord/lib/active_record/query_cache.rb:9:in `cache' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/activerecord/lib/active_record/query_cache.rb:28:in `call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb:363:in `call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_dispatch/middleware/rescue.rb:8:in `call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_dispatch/middleware/callbacks.rb:35:in `call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/actionpack/lib/action_dispatch/middleware/show_exceptions.rb:47:in `call' 
    /home/rubys/.rvm/gems/ruby/1.9.1/gems/rack-1.0.0/lib/rack/lock.rb:11:in `block in call' 
    <internal:prelude>:8:in `synchronize' 
    /home/rubys/.rvm/gems/ruby/1.9.1/gems/rack-1.0.0/lib/rack/lock.rb:11:in `call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/railties/lib/rails/rack/static.rb:31:in `call' 
    /home/rubys/.rvm/gems/ruby/1.9.1/gems/rack-1.0.0/lib/rack/urlmap.rb:46:in `block in call' 
    /home/rubys/.rvm/gems/ruby/1.9.1/gems/rack-1.0.0/lib/rack/urlmap.rb:40:in `each' 
    /home/rubys/.rvm/gems/ruby/1.9.1/gems/rack-1.0.0/lib/rack/urlmap.rb:40:in `call' 
    /home/rubys/git/awdwr/work/depot/vendor/rails/railties/lib/rails/rack/log_tailer.rb:17:in `call' 
    /home/rubys/.rvm/gems/ruby/1.9.1/gems/rack-1.0.0/lib/rack/content_length.rb:13:in `call' 
    /home/rubys/.rvm/gems/ruby/1.9.1/gems/rack-1.0.0/lib/rack/handler/webrick.rb:46:in `service' 
    /home/rubys/.rvm/ruby-1.9.1-phead/lib/ruby/1.9.1/webrick/httpserver.rb:111:in `service' 
    /home/rubys/.rvm/ruby-1.9.1-phead/lib/ruby/1.9.1/webrick/httpserver.rb:70:in `run' 
    /home/rubys/.rvm/ruby-1.9.1-phead/lib/ruby/1.9.1/webrick/server.rb:183:in `block in start_thread'</code></pre> 
        </div> 
       
    </div> 
     
     
     
     
     
    <h2 style="margin-top: 30px">Request</h2> 
    <p><b>Parameters</b>: <pre>{"id"=>"2"}</pre></p> 
     
    <p><a href="#" onclick="document.getElementById('session_dump').style.display='block'; return false;">Show session dump</a></p> 
    <div id="session_dump" style="display:none"><pre class='debug_dump'>---  
    </pre></div> 
     
     
    <h2 style="margin-top: 30px">Response</h2> 
    <p><b>Headers</b>: <pre>None</pre></p> 
     
     
     
    </body> 
    </html> 
    
#<REXML::UndefinedNamespaceException: Undefined prefix internal found>
  /home/rubys/.rvm/ruby-1.9.1-phead/lib/ruby/1.9.1/rexml/parsers/baseparser.rb:419:in `block in pull'
  /home/rubys/.rvm/ruby-1.9.1-phead/lib/ruby/1.9.1/set.rb:211:in `block in each'
  /home/rubys/.rvm/ruby-1.9.1-phead/lib/ruby/1.9.1/set.rb:211:in `each_key'
  /home/rubys/.rvm/ruby-1.9.1-phead/lib/ruby/1.9.1/set.rb:211:in `each'
  /home/rubys/.rvm/ruby-1.9.1-phead/lib/ruby/1.9.1/rexml/parsers/baseparser.rb:417:in `pull'
  /home/rubys/.rvm/ruby-1.9.1-phead/lib/ruby/1.9.1/rexml/parsers/treeparser.rb:22:in `parse'
  /home/rubys/.rvm/ruby-1.9.1-phead/lib/ruby/1.9.1/rexml/document.rb:228:in `build'
  /home/rubys/.rvm/ruby-1.9.1-phead/lib/ruby/1.9.1/rexml/document.rb:43:in `initialize'
  /home/rubys/git/awdwr/gorp.rb:226:in `new'
  /home/rubys/git/awdwr/gorp.rb:226:in `xhtmlparse'
  /home/rubys/git/awdwr/gorp.rb:310:in `snap'
  /home/rubys/git/awdwr/gorp.rb:380:in `block in post'
  /home/rubys/.rvm/ruby-1.9.1-phead/lib/ruby/1.9.1/net/http.rb:564:in `start'
  /home/rubys/.rvm/ruby-1.9.1-phead/lib/ruby/1.9.1/net/http.rb:453:in `start'
  /home/rubys/git/awdwr/gorp.rb:376:in `post'
  makedepot.rb:463:in `block in <main>'
  /home/rubys/git/awdwr/gorp.rb:588:in `call'
  /home/rubys/git/awdwr/gorp.rb:588:in `block (4 levels) in <top (required)>'
  /home/rubys/git/awdwr/gorp.rb:584:in `each'
  /home/rubys/git/awdwr/gorp.rb:584:in `block (3 levels) in <top (required)>'
  /home/rubys/.rvm/gems/ruby/1.9.1/gems/builder-2.1.2/lib/builder/xmlbase.rb:134:in `call'
  /home/rubys/.rvm/gems/ruby/1.9.1/gems/builder-2.1.2/lib/builder/xmlbase.rb:134:in `_nested_structures'
  /home/rubys/.rvm/gems/ruby/1.9.1/gems/builder-2.1.2/lib/builder/xmlbase.rb:58:in `method_missing'
  /home/rubys/git/awdwr/gorp.rb:549:in `block (2 levels) in <top (required)>'
  /home/rubys/.rvm/gems/ruby/1.9.1/gems/builder-2.1.2/lib/builder/xmlbase.rb:134:in `call'
  /home/rubys/.rvm/gems/ruby/1.9.1/gems/builder-2.1.2/lib/builder/xmlbase.rb:134:in `_nested_structures'
  /home/rubys/.rvm/gems/ruby/1.9.1/gems/builder-2.1.2/lib/builder/xmlbase.rb:58:in `method_missing'
  /home/rubys/git/awdwr/gorp.rb:517:in `block in <top (required)>'