Permalink
Browse files

adding episodes 312 and 313

  • Loading branch information...
1 parent 058ddf3 commit 92133d1cc56ec87e0f34e5633b88dec87c8e177e @ryanb committed Jan 1, 2012
Showing with 3,080 additions and 0 deletions.
  1. +15 −0 episode-312/README
  2. +15 −0 episode-312/mailit/.gitignore
  3. +41 −0 episode-312/mailit/Gemfile
  4. +128 −0 episode-312/mailit/Gemfile.lock
  5. +3 −0 episode-312/mailit/README
  6. +7 −0 episode-312/mailit/Rakefile
  7. BIN episode-312/mailit/app/assets/images/rails.png
  8. +9 −0 episode-312/mailit/app/assets/javascripts/application.js
  9. +7 −0 episode-312/mailit/app/assets/stylesheets/application.css
  10. +3 −0 episode-312/mailit/app/controllers/application_controller.rb
  11. +2 −0 episode-312/mailit/app/helpers/application_helper.rb
  12. 0 episode-312/mailit/app/mailers/.gitkeep
  13. +12 −0 episode-312/mailit/app/mailers/newsletter_mailer.rb
  14. 0 episode-312/mailit/app/models/.gitkeep
  15. +14 −0 episode-312/mailit/app/views/layouts/application.html.erb
  16. +104 −0 episode-312/mailit/app/views/newsletter_mailer/weekly.html.erb
  17. +37 −0 episode-312/mailit/app/views/newsletter_mailer/weekly.text.erb
  18. +4 −0 episode-312/mailit/config.ru
  19. +48 −0 episode-312/mailit/config/application.rb
  20. +6 −0 episode-312/mailit/config/boot.rb
  21. +25 −0 episode-312/mailit/config/database.yml
  22. +5 −0 episode-312/mailit/config/environment.rb
  23. +43 −0 episode-312/mailit/config/environments/development.rb
  24. +60 −0 episode-312/mailit/config/environments/production.rb
  25. +39 −0 episode-312/mailit/config/environments/test.rb
  26. +7 −0 episode-312/mailit/config/initializers/backtrace_silencers.rb
  27. +10 −0 episode-312/mailit/config/initializers/inflections.rb
  28. +5 −0 episode-312/mailit/config/initializers/mime_types.rb
  29. +7 −0 episode-312/mailit/config/initializers/secret_token.rb
  30. +8 −0 episode-312/mailit/config/initializers/session_store.rb
  31. +14 −0 episode-312/mailit/config/initializers/wrap_parameters.rb
  32. +5 −0 episode-312/mailit/config/locales/en.yml
  33. +58 −0 episode-312/mailit/config/routes.rb
  34. +7 −0 episode-312/mailit/db/seeds.rb
  35. +2 −0 episode-312/mailit/doc/README_FOR_APP
  36. 0 episode-312/mailit/lib/assets/.gitkeep
  37. 0 episode-312/mailit/lib/tasks/.gitkeep
  38. 0 episode-312/mailit/log/.gitkeep
  39. +26 −0 episode-312/mailit/public/404.html
  40. +26 −0 episode-312/mailit/public/422.html
  41. +26 −0 episode-312/mailit/public/500.html
  42. 0 episode-312/mailit/public/favicon.ico
  43. +241 −0 episode-312/mailit/public/index.html
  44. +5 −0 episode-312/mailit/public/robots.txt
  45. +6 −0 episode-312/mailit/script/rails
  46. 0 episode-312/mailit/test/fixtures/.gitkeep
  47. 0 episode-312/mailit/test/functional/.gitkeep
  48. +12 −0 episode-312/mailit/test/functional/newsletter_mailer_test.rb
  49. 0 episode-312/mailit/test/integration/.gitkeep
  50. +12 −0 episode-312/mailit/test/performance/browsing_test.rb
  51. +13 −0 episode-312/mailit/test/test_helper.rb
  52. 0 episode-312/mailit/test/unit/.gitkeep
  53. 0 episode-312/mailit/vendor/assets/stylesheets/.gitkeep
  54. 0 episode-312/mailit/vendor/plugins/.gitkeep
  55. +104 −0 episode-312/railscasts_email.html
  56. +5 −0 episode-313/README
  57. +15 −0 episode-313/incoming-after/.gitignore
  58. +18 −0 episode-313/incoming-after/Gemfile
  59. +123 −0 episode-313/incoming-after/Gemfile.lock
  60. +9 −0 episode-313/incoming-after/README
  61. +7 −0 episode-313/incoming-after/Rakefile
  62. BIN episode-313/incoming-after/app/assets/images/rails.png
  63. +9 −0 episode-313/incoming-after/app/assets/javascripts/application.js
  64. +3 −0 episode-313/incoming-after/app/assets/javascripts/tickets.js.coffee
  65. +82 −0 episode-313/incoming-after/app/assets/stylesheets/application.css
  66. +7 −0 episode-313/incoming-after/app/assets/stylesheets/tickets.css.scss
  67. +3 −0 episode-313/incoming-after/app/controllers/application_controller.rb
  68. +41 −0 episode-313/incoming-after/app/controllers/tickets_controller.rb
  69. +2 −0 episode-313/incoming-after/app/helpers/application_helper.rb
  70. +2 −0 episode-313/incoming-after/app/helpers/tickets_helper.rb
  71. 0 episode-313/incoming-after/app/mailers/.gitkeep
  72. 0 episode-313/incoming-after/app/models/.gitkeep
  73. +10 −0 episode-313/incoming-after/app/models/ticket.rb
  74. +18 −0 episode-313/incoming-after/app/views/layouts/application.html.erb
  75. +29 −0 episode-313/incoming-after/app/views/tickets/_form.html.erb
  76. +6 −0 episode-313/incoming-after/app/views/tickets/edit.html.erb
  77. +11 −0 episode-313/incoming-after/app/views/tickets/index.html.erb
  78. +5 −0 episode-313/incoming-after/app/views/tickets/new.html.erb
  79. +8 −0 episode-313/incoming-after/app/views/tickets/show.html.erb
  80. +4 −0 episode-313/incoming-after/config.ru
  81. +48 −0 episode-313/incoming-after/config/application.rb
  82. +6 −0 episode-313/incoming-after/config/boot.rb
  83. +25 −0 episode-313/incoming-after/config/database.yml
  84. +5 −0 episode-313/incoming-after/config/environment.rb
  85. +30 −0 episode-313/incoming-after/config/environments/development.rb
  86. +60 −0 episode-313/incoming-after/config/environments/production.rb
  87. +39 −0 episode-313/incoming-after/config/environments/test.rb
  88. +7 −0 episode-313/incoming-after/config/initializers/backtrace_silencers.rb
  89. +10 −0 episode-313/incoming-after/config/initializers/inflections.rb
  90. +5 −0 episode-313/incoming-after/config/initializers/mime_types.rb
  91. +7 −0 episode-313/incoming-after/config/initializers/secret_token.rb
  92. +8 −0 episode-313/incoming-after/config/initializers/session_store.rb
  93. +14 −0 episode-313/incoming-after/config/initializers/wrap_parameters.rb
  94. +5 −0 episode-313/incoming-after/config/locales/en.yml
  95. +4 −0 episode-313/incoming-after/config/routes.rb
  96. +11 −0 episode-313/incoming-after/db/migrate/20111230231220_create_tickets.rb
  97. +24 −0 episode-313/incoming-after/db/schema.rb
  98. +7 −0 episode-313/incoming-after/db/seeds.rb
  99. +2 −0 episode-313/incoming-after/doc/README_FOR_APP
  100. 0 episode-313/incoming-after/lib/assets/.gitkeep
  101. 0 episode-313/incoming-after/lib/tasks/.gitkeep
  102. 0 episode-313/incoming-after/log/.gitkeep
  103. +10 −0 episode-313/incoming-after/mailman_test.eml
  104. +26 −0 episode-313/incoming-after/public/404.html
  105. +26 −0 episode-313/incoming-after/public/422.html
  106. +26 −0 episode-313/incoming-after/public/500.html
  107. 0 episode-313/incoming-after/public/favicon.ico
  108. +5 −0 episode-313/incoming-after/public/robots.txt
  109. +23 −0 episode-313/incoming-after/script/mailman_server
  110. +6 −0 episode-313/incoming-after/script/rails
  111. 0 episode-313/incoming-after/test/fixtures/.gitkeep
  112. +11 −0 episode-313/incoming-after/test/fixtures/tickets.yml
  113. 0 episode-313/incoming-after/test/functional/.gitkeep
  114. +49 −0 episode-313/incoming-after/test/functional/tickets_controller_test.rb
  115. 0 episode-313/incoming-after/test/integration/.gitkeep
  116. +12 −0 episode-313/incoming-after/test/performance/browsing_test.rb
  117. +13 −0 episode-313/incoming-after/test/test_helper.rb
  118. 0 episode-313/incoming-after/test/unit/.gitkeep
  119. +4 −0 episode-313/incoming-after/test/unit/helpers/tickets_helper_test.rb
  120. +7 −0 episode-313/incoming-after/test/unit/ticket_test.rb
  121. 0 episode-313/incoming-after/vendor/assets/stylesheets/.gitkeep
  122. 0 episode-313/incoming-after/vendor/plugins/.gitkeep
  123. +15 −0 episode-313/incoming-before/.gitignore
  124. +16 −0 episode-313/incoming-before/Gemfile
  125. +118 −0 episode-313/incoming-before/Gemfile.lock
  126. +9 −0 episode-313/incoming-before/README
  127. +7 −0 episode-313/incoming-before/Rakefile
  128. BIN episode-313/incoming-before/app/assets/images/rails.png
  129. +9 −0 episode-313/incoming-before/app/assets/javascripts/application.js
  130. +3 −0 episode-313/incoming-before/app/assets/javascripts/tickets.js.coffee
  131. +82 −0 episode-313/incoming-before/app/assets/stylesheets/application.css
  132. +7 −0 episode-313/incoming-before/app/assets/stylesheets/tickets.css.scss
  133. +3 −0 episode-313/incoming-before/app/controllers/application_controller.rb
  134. +41 −0 episode-313/incoming-before/app/controllers/tickets_controller.rb
  135. +2 −0 episode-313/incoming-before/app/helpers/application_helper.rb
  136. +2 −0 episode-313/incoming-before/app/helpers/tickets_helper.rb
  137. 0 episode-313/incoming-before/app/mailers/.gitkeep
  138. 0 episode-313/incoming-before/app/models/.gitkeep
  139. +2 −0 episode-313/incoming-before/app/models/ticket.rb
  140. +18 −0 episode-313/incoming-before/app/views/layouts/application.html.erb
  141. +29 −0 episode-313/incoming-before/app/views/tickets/_form.html.erb
  142. +6 −0 episode-313/incoming-before/app/views/tickets/edit.html.erb
  143. +11 −0 episode-313/incoming-before/app/views/tickets/index.html.erb
  144. +5 −0 episode-313/incoming-before/app/views/tickets/new.html.erb
  145. +8 −0 episode-313/incoming-before/app/views/tickets/show.html.erb
  146. +4 −0 episode-313/incoming-before/config.ru
  147. +48 −0 episode-313/incoming-before/config/application.rb
  148. +6 −0 episode-313/incoming-before/config/boot.rb
  149. +25 −0 episode-313/incoming-before/config/database.yml
  150. +5 −0 episode-313/incoming-before/config/environment.rb
  151. +30 −0 episode-313/incoming-before/config/environments/development.rb
  152. +60 −0 episode-313/incoming-before/config/environments/production.rb
  153. +39 −0 episode-313/incoming-before/config/environments/test.rb
  154. +7 −0 episode-313/incoming-before/config/initializers/backtrace_silencers.rb
  155. +10 −0 episode-313/incoming-before/config/initializers/inflections.rb
  156. +5 −0 episode-313/incoming-before/config/initializers/mime_types.rb
  157. +7 −0 episode-313/incoming-before/config/initializers/secret_token.rb
  158. +8 −0 episode-313/incoming-before/config/initializers/session_store.rb
  159. +14 −0 episode-313/incoming-before/config/initializers/wrap_parameters.rb
  160. +5 −0 episode-313/incoming-before/config/locales/en.yml
  161. +4 −0 episode-313/incoming-before/config/routes.rb
  162. +11 −0 episode-313/incoming-before/db/migrate/20111230231220_create_tickets.rb
  163. +24 −0 episode-313/incoming-before/db/schema.rb
  164. +7 −0 episode-313/incoming-before/db/seeds.rb
  165. +2 −0 episode-313/incoming-before/doc/README_FOR_APP
  166. 0 episode-313/incoming-before/lib/assets/.gitkeep
  167. 0 episode-313/incoming-before/lib/tasks/.gitkeep
  168. 0 episode-313/incoming-before/log/.gitkeep
  169. +8 −0 episode-313/incoming-before/mailman_test.eml
  170. +26 −0 episode-313/incoming-before/public/404.html
  171. +26 −0 episode-313/incoming-before/public/422.html
  172. +26 −0 episode-313/incoming-before/public/500.html
  173. 0 episode-313/incoming-before/public/favicon.ico
  174. +5 −0 episode-313/incoming-before/public/robots.txt
  175. +6 −0 episode-313/incoming-before/script/rails
  176. 0 episode-313/incoming-before/test/fixtures/.gitkeep
  177. +11 −0 episode-313/incoming-before/test/fixtures/tickets.yml
  178. 0 episode-313/incoming-before/test/functional/.gitkeep
  179. +49 −0 episode-313/incoming-before/test/functional/tickets_controller_test.rb
  180. 0 episode-313/incoming-before/test/integration/.gitkeep
  181. +12 −0 episode-313/incoming-before/test/performance/browsing_test.rb
  182. +13 −0 episode-313/incoming-before/test/test_helper.rb
  183. 0 episode-313/incoming-before/test/unit/.gitkeep
  184. +4 −0 episode-313/incoming-before/test/unit/helpers/tickets_helper_test.rb
  185. +7 −0 episode-313/incoming-before/test/unit/ticket_test.rb
  186. 0 episode-313/incoming-before/vendor/assets/stylesheets/.gitkeep
  187. 0 episode-313/incoming-before/vendor/plugins/.gitkeep
View
@@ -0,0 +1,15 @@
+RailsCasts Episode #312: Sending HTML Email
+
+http://railscasts.com/episodes/312-sending-html-email
+
+Requires Ruby 1.9.2 or higher.
+
+Commands used in episode
+
+ rails new mailit
+ cd mailit
+ rails g mailer newsletter_mailer weekly
+ bundle
+ rails c
+
+ NewsletterMailer.weekly("foo@example.com").deliver
@@ -0,0 +1,15 @@
+# See http://help.github.com/ignore-files/ for more about ignoring files.
+#
+# If you find yourself ignoring temporary files generated by your text editor
+# or operating system, you probably want to add a global ignore instead:
+# git config --global core.excludesfile ~/.gitignore_global
+
+# Ignore bundler config
+/.bundle
+
+# Ignore the default SQLite database.
+/db/*.sqlite3
+
+# Ignore all logfiles and tempfiles.
+/log/*.log
+/tmp
@@ -0,0 +1,41 @@
+source 'http://rubygems.org'
+
+gem 'rails', '3.1.3'
+
+# Bundle edge Rails instead:
+# gem 'rails', :git => 'git://github.com/rails/rails.git'
+
+gem 'sqlite3'
+
+
+# Gems used only for assets and not required
+# in production environments by default.
+group :assets do
+ gem 'sass-rails', '~> 3.1.5'
+ gem 'coffee-rails', '~> 3.1.1'
+ gem 'uglifier', '>= 1.0.3'
+end
+
+gem 'jquery-rails'
+
+# To use ActiveModel has_secure_password
+# gem 'bcrypt-ruby', '~> 3.0.0'
+
+# Use unicorn as the web server
+# gem 'unicorn'
+
+# Deploy with Capistrano
+# gem 'capistrano'
+
+# To use debugger
+# gem 'ruby-debug19', :require => 'ruby-debug'
+
+group :test do
+ # Pretty printed test output
+ gem 'turn', '~> 0.8.3', :require => false
+end
+
+# gem 'hpricot'
+# gem 'premailer-rails3'
+
+gem 'roadie'
@@ -0,0 +1,128 @@
+GEM
+ remote: http://rubygems.org/
+ specs:
+ actionmailer (3.1.3)
+ actionpack (= 3.1.3)
+ mail (~> 2.3.0)
+ actionpack (3.1.3)
+ activemodel (= 3.1.3)
+ activesupport (= 3.1.3)
+ builder (~> 3.0.0)
+ erubis (~> 2.7.0)
+ i18n (~> 0.6)
+ rack (~> 1.3.5)
+ rack-cache (~> 1.1)
+ rack-mount (~> 0.8.2)
+ rack-test (~> 0.6.1)
+ sprockets (~> 2.0.3)
+ activemodel (3.1.3)
+ activesupport (= 3.1.3)
+ builder (~> 3.0.0)
+ i18n (~> 0.6)
+ activerecord (3.1.3)
+ activemodel (= 3.1.3)
+ activesupport (= 3.1.3)
+ arel (~> 2.2.1)
+ tzinfo (~> 0.3.29)
+ activeresource (3.1.3)
+ activemodel (= 3.1.3)
+ activesupport (= 3.1.3)
+ activesupport (3.1.3)
+ multi_json (~> 1.0)
+ addressable (2.2.6)
+ ansi (1.4.1)
+ arel (2.2.1)
+ builder (3.0.0)
+ coffee-rails (3.1.1)
+ coffee-script (>= 2.2.0)
+ railties (~> 3.1.0)
+ coffee-script (2.2.0)
+ coffee-script-source
+ execjs
+ coffee-script-source (1.2.0)
+ css_parser (1.2.5)
+ addressable
+ erubis (2.7.0)
+ execjs (1.2.13)
+ multi_json (~> 1.0)
+ hike (1.2.1)
+ i18n (0.6.0)
+ jquery-rails (1.0.19)
+ railties (~> 3.0)
+ thor (~> 0.14)
+ json (1.6.4)
+ mail (2.3.0)
+ i18n (>= 0.4.0)
+ mime-types (~> 1.16)
+ treetop (~> 1.4.8)
+ mime-types (1.17.2)
+ multi_json (1.0.4)
+ nokogiri (1.5.0)
+ polyglot (0.3.3)
+ rack (1.3.6)
+ rack-cache (1.1)
+ rack (>= 0.4)
+ rack-mount (0.8.3)
+ rack (>= 1.0.0)
+ rack-ssl (1.3.2)
+ rack
+ rack-test (0.6.1)
+ rack (>= 1.0)
+ rails (3.1.3)
+ actionmailer (= 3.1.3)
+ actionpack (= 3.1.3)
+ activerecord (= 3.1.3)
+ activeresource (= 3.1.3)
+ activesupport (= 3.1.3)
+ bundler (~> 1.0)
+ railties (= 3.1.3)
+ railties (3.1.3)
+ actionpack (= 3.1.3)
+ activesupport (= 3.1.3)
+ rack-ssl (~> 1.3.2)
+ rake (>= 0.8.7)
+ rdoc (~> 3.4)
+ thor (~> 0.14.6)
+ rake (0.9.2.2)
+ rdoc (3.12)
+ json (~> 1.4)
+ roadie (2.2.0)
+ actionmailer (~> 3.1.0)
+ css_parser
+ nokogiri (>= 1.4.4)
+ sprockets
+ sass (3.1.12)
+ sass-rails (3.1.5)
+ actionpack (~> 3.1.0)
+ railties (~> 3.1.0)
+ sass (~> 3.1.10)
+ tilt (~> 1.3.2)
+ sprockets (2.0.3)
+ hike (~> 1.2)
+ rack (~> 1.0)
+ tilt (~> 1.1, != 1.3.0)
+ sqlite3 (1.3.5)
+ thor (0.14.6)
+ tilt (1.3.3)
+ treetop (1.4.10)
+ polyglot
+ polyglot (>= 0.3.1)
+ turn (0.8.3)
+ ansi
+ tzinfo (0.3.31)
+ uglifier (1.2.1)
+ execjs (>= 0.3.0)
+ multi_json (>= 1.0.2)
+
+PLATFORMS
+ ruby
+
+DEPENDENCIES
+ coffee-rails (~> 3.1.1)
+ jquery-rails
+ rails (= 3.1.3)
+ roadie
+ sass-rails (~> 3.1.5)
+ sqlite3
+ turn (~> 0.8.3)
+ uglifier (>= 1.0.3)
@@ -0,0 +1,3 @@
+= RailsCasts Example Application
+
+Requires Ruby 1.9.2 or higher.
@@ -0,0 +1,7 @@
+#!/usr/bin/env rake
+# Add your own tasks in files placed in lib/tasks ending in .rake,
+# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
+
+require File.expand_path('../config/application', __FILE__)
+
+Mailit::Application.load_tasks
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@@ -0,0 +1,9 @@
+// This is a manifest file that'll be compiled into including all the files listed below.
+// Add new JavaScript/Coffee code in separate files in this directory and they'll automatically
+// be included in the compiled file accessible from http://example.com/assets/application.js
+// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
+// the compiled file.
+//
+//= require jquery
+//= require jquery_ujs
+//= require_tree .
@@ -0,0 +1,7 @@
+/*
+ * This is a manifest file that'll automatically include all the stylesheets available in this directory
+ * and any sub-directories. You're free to add application-wide styles to this file and they'll appear at
+ * the top of the compiled file, but it's generally better to create a new file per style scope.
+ *= require_self
+ *= require_tree .
+*/
@@ -0,0 +1,3 @@
+class ApplicationController < ActionController::Base
+ protect_from_forgery
+end
@@ -0,0 +1,2 @@
+module ApplicationHelper
+end
@@ -0,0 +1,12 @@
+class NewsletterMailer < ActionMailer::Base
+ default from: "from@example.com"
+
+ # Subject can be set in your I18n file at config/locales/en.yml
+ # with the following lookup:
+ #
+ # en.newsletter_mailer.weekly.subject
+ #
+ def weekly(email)
+ mail to: email, subject: "RailsCasts Weekly"
+ end
+end
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Mailit</title>
+ <%= stylesheet_link_tag "application" %>
+ <%= javascript_include_tag "application" %>
+ <%= csrf_meta_tags %>
+</head>
+<body>
+
+<%= yield %>
+
+</body>
+</html>
@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <title>RailsCasts Weekly</title>
+ <style type="text/css">
+ body, td {
+ color: #000000;
+ font-size: 14px;
+ font-family: Verdana, Helvetica, Arial;
+ }
+ .divider {
+ background-color: #555555;
+ height: 2px;
+ }
+ .episode h2 {
+ margin-top: 0;
+ margin-bottom: 8px;
+ font-size: 18px;
+ }
+ .episode p {
+ margin: 8px 0;
+ }
+ .episode img {
+ border: solid 1px #777777;
+ }
+ .episode .duration {
+ font-size: 11px;
+ color: #555555;
+ }
+ #footer {
+ font-size: 11px;
+ color: #555555;
+ }
+ #footer a {
+ color: #555555;
+ }
+ </style>
+</head>
+<body>
+ <table width="100%" id="background" border="0" cellpadding="0" cellspacing="0">
+ <tr><td align="center" valign="top">
+ <table width="650" id="main" border="0" cellpadding="0" cellspacing="20">
+ <tr>
+ <td id="header" colspan="2">
+ <a href="http://railscasts.com/"><img src="http://railscasts.com/images/railscasts_logo.png" width="423" height="56" alt="RailsCasts"></a>
+ </td>
+ </tr>
+ <tr>
+ <td class="divider" colspan="2" bgcolor="#555555" height="2"></td>
+ </tr>
+ <tr class="episode">
+ <td>
+ <a href="#"><img src="http://railscasts.com/assets/episodes/stills/310-getting-started-with-rails.png" width="200" height="125" alt="#310 Getting Started with Rails"></a>
+ </td>
+ <td valign="top">
+ <h2>#310 Getting Started with Rails</h2>
+ <p>Learning Ruby on Rails can be overwhelming, especially if you are new to programming. Here I will take you on a tour through various resources to help get started with Rails.</p>
+ <p>
+ <a href="#">Watch Episode</a>
+ <span class="duration">(7 minutes)</span>
+ </p>
+ </td>
+ </tr>
+ <tr class="episode">
+ <td>
+ <a href="#"><img src="http://railscasts.com/assets/episodes/stills/311-form-builders.png" width="200" height="125" alt="#311 Form Builders"></a>
+ </td>
+ <td valign="top">
+ <h2>#311 Form Builders (pro)</h2>
+ <p>Forms often follow a similar pattern with a lot of repetition. Learn how to clean up form views and remove duplication with the help of form builders.</p>
+ <p>
+ <a href="#">Watch Episode</a>
+ <span class="duration">(12 minutes)</span>
+ </p>
+ </td>
+ </tr>
+ <tr class="episode">
+ <td>
+ <a href="#"><img src="http://railscasts.com/assets/episodes/stills/164-cron-in-ruby-revised.png" width="200" height="125" alt="#164 Cron in Ruby (revised)"></a>
+ </td>
+ <td valign="top">
+ <h2>#164 Cron in Ruby (revised)</h2>
+ <p>Cron is a common solution for recurring jobs, but it has a confusing syntax. In this episode I show you how to use Whenever to create cron jobs using Ruby. Some alternative scheduling solutions are also mentioned.</p>
+ <p>
+ <a href="#">Watch Episode</a>
+ <span class="duration">(6 minutes)</span>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td class="divider" colspan="2" bgcolor="#555555" height="2"></td>
+ </tr>
+ <tr>
+ <td id="footer" colspan="2" align="center">
+ <p><a href="#">Unsubscribe</a> if you do not wish to receive these emails in the future.</p>
+ <p>&copy;2011 RailsCasts</p>
+ </td>
+ </tr>
+ </table>
+ </td></tr>
+ </table>
+</body>
+</html>
Oops, something went wrong.

0 comments on commit 92133d1

Please sign in to comment.