Skip to content
Browse files

initial commit

  • Loading branch information...
1 parent 778ea82 commit 855d99a6ee5ef4b28108b32ebda52196d6c3df40 @chrismatthieu committed Aug 3, 2011
Showing with 1,114 additions and 40 deletions.
  1. BIN .DS_Store
  2. +2 −2 Gemfile
  3. +0 −16 Gemfile.lock
  4. +1 −1 Rakefile
  5. +3 −0 app/assets/javascripts/podcasts.js.coffee
  6. +471 −1 app/assets/stylesheets/application.css
  7. +3 −0 app/assets/stylesheets/podcasts.css.scss
  8. +99 −0 app/controllers/podcasts_controller.rb
  9. +2 −0 app/helpers/podcasts_helper.rb
  10. +2 −0 app/models/podcast.rb
  11. +119 −1 app/views/layouts/application.html.erb
  12. +8 −0 app/views/pages/about.html.erb
  13. +0 −2 app/views/pages/index.html.erb
  14. +29 −0 app/views/podcasts/_form.html.erb
  15. +8 −0 app/views/podcasts/edit.html.erb
  16. +55 −0 app/views/podcasts/index.html.erb
  17. +7 −0 app/views/podcasts/new.html.erb
  18. +54 −0 app/views/podcasts/show.html.erb
  19. +3 −1 app/views/sessions/new.html.erb
  20. +3 −0 app/views/users/new.html.erb
  21. +1 −1 config.ru
  22. +1 −1 config/application.rb
  23. +3 −3 config/database.yml
  24. +1 −1 config/environment.rb
  25. +1 −1 config/environments/development.rb
  26. +2 −2 config/environments/production.rb
  27. +1 −1 config/environments/test.rb
  28. +1 −1 config/initializers/secret_token.rb
  29. +2 −2 config/initializers/session_store.rb
  30. +6 −2 config/routes.rb
  31. +11 −0 db/migrate/20110803213119_create_podcasts.rb
  32. +9 −1 db/schema.rb
  33. BIN public/.DS_Store
  34. BIN public/images/150px-Ruby_logo.png
  35. BIN public/images/Chris-1.JPG
  36. BIN public/images/Chris50.png
  37. BIN public/images/Chris75.gif
  38. BIN public/images/Thumbs.db
  39. BIN public/images/bg.gif
  40. BIN public/images/bg_page.gif
  41. BIN public/images/bg_page_in.jpg
  42. BIN public/images/btn_more.gif
  43. BIN public/images/col_bg.gif
  44. BIN public/images/col_title_bg.gif
  45. BIN public/images/col_top.gif
  46. BIN public/images/content_article_bg.jpg
  47. BIN public/images/content_title_bg.gif
  48. BIN public/images/footer.jpg
  49. BIN public/images/gem.jpeg
  50. BIN public/images/header.jpg
  51. BIN public/images/ico_archive.gif
  52. BIN public/images/ico_archive2.gif
  53. BIN public/images/ico_cat.gif
  54. BIN public/images/ico_comments.gif
  55. BIN public/images/ico_date.gif
  56. BIN public/images/ico_links.gif
  57. BIN public/images/ico_list.gif
  58. BIN public/images/ico_rss.gif
  59. BIN public/images/ico_rss_bak.gif
  60. BIN public/images/ico_top.gif
  61. BIN public/images/ico_user.gif
  62. BIN public/images/img01.jpg
  63. BIN public/images/img02.jpg
  64. BIN public/images/img03.jpg
  65. BIN public/images/img04.jpg
  66. BIN public/images/img05.jpg
  67. BIN public/images/img06.jpg
  68. BIN public/images/img07.jpg
  69. BIN public/images/img08.jpg
  70. BIN public/images/rails.png
  71. BIN public/images/rubyology.jpg
  72. BIN public/images/search_input.gif
  73. BIN public/images/search_submit.gif
  74. BIN public/images/spacer.gif
  75. BIN public/images/tab_active_l.gif
  76. BIN public/images/tab_active_r.gif
  77. BIN public/images/tab_hover.gif
  78. BIN public/images/tab_hover_l.gif
  79. BIN public/images/tab_hover_r.gif
  80. BIN public/images/tab_link.gif
  81. BIN public/images/tab_link_l.gif
  82. BIN public/images/tab_link_r.gif
  83. BIN public/images/tmp_photo.gif
  84. BIN public/mp3s/.DS_Store
  85. +17 −0 public/mp3s/.svn/all-wcprops
  86. +54 −0 public/mp3s/.svn/entries
  87. +5 −0 public/mp3s/.svn/prop-base/audio-player.js.svn-base
  88. +9 −0 public/mp3s/.svn/prop-base/player.swf.svn-base
  89. +25 −0 public/mp3s/.svn/text-base/audio-player.js.svn-base
  90. BIN public/mp3s/.svn/text-base/player.swf.svn-base
  91. +25 −0 public/mp3s/audio-player.js
  92. BIN public/mp3s/player.swf
  93. +11 −0 test/fixtures/podcasts.yml
  94. +49 −0 test/functional/podcasts_controller_test.rb
  95. +4 −0 test/unit/helpers/podcasts_helper_test.rb
  96. +7 −0 test/unit/podcast_test.rb
View
BIN .DS_Store
Binary file not shown.
View
4 Gemfile
@@ -13,8 +13,8 @@ gem 'json'
# in production environments by default.
group :assets do
gem 'sass-rails', "~> 3.1.0.rc"
- gem 'coffee-rails', "~> 3.1.0.rc"
- gem 'uglifier'
+ # gem 'coffee-rails', "~> 3.1.0.rc"
+ # gem 'uglifier'
end
gem 'jquery-rails'
View
16 Gemfile.lock
@@ -33,18 +33,7 @@ GEM
arel (2.1.4)
bcrypt-ruby (2.1.4)
builder (3.0.0)
- coffee-rails (3.1.0.rc.5)
- actionpack (~> 3.1.0.rc1)
- coffee-script (>= 2.2.0)
- railties (~> 3.1.0.rc1)
- sprockets (>= 2.0.0.beta.9)
- coffee-script (2.2.0)
- coffee-script-source
- execjs
- coffee-script-source (1.1.1)
erubis (2.7.0)
- execjs (1.2.0)
- multi_json (~> 1.0)
hike (1.2.0)
i18n (0.6.0)
jquery-rails (1.0.12)
@@ -101,18 +90,13 @@ GEM
polyglot
polyglot (>= 0.3.1)
tzinfo (0.3.29)
- uglifier (1.0.0)
- execjs (>= 0.3.0)
- multi_json (>= 1.0.2)
PLATFORMS
ruby
DEPENDENCIES
- coffee-rails (~> 3.1.0.rc)
jquery-rails
json
mysql2
rails (= 3.1.0.rc5)
sass-rails (~> 3.1.0.rc)
- uglifier
View
2 Rakefile
@@ -4,4 +4,4 @@
require File.expand_path('../config/application', __FILE__)
-Nutelo::Application.load_tasks
+Rubyology::Application.load_tasks
View
3 app/assets/javascripts/podcasts.js.coffee
@@ -0,0 +1,3 @@
+# Place all the behaviors and hooks related to the matching controller here.
+# All this logic will automatically be available in application.js.
+# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/
View
472 app/assets/stylesheets/application.css
@@ -4,4 +4,474 @@
* the top of the compiled file, but it's generally better to create a new file per style scope.
*= require_self
*= require_tree .
-*/
+*/
+
+body {
+ margin: 0px;
+ padding: 0px;
+ background: #B50044 url(/images/img01.jpg) repeat left top;
+ text-align: justify;
+ font: 12px Arial, Helvetica, sans-serif;
+ color: #4C4C4C;
+}
+
+h1, h2, h3 {
+ font: 1.82em;
+ font-weight: normal;
+ font-family: Arial, Helvetica, sans-serif;
+ color: #000000;
+}
+
+p, ol, ul {
+ line-height: 1.67em;
+}
+
+a {
+ color: #75012D;
+}
+
+a:hover {
+ text-decoration: none;
+}
+
+hr {
+ display: none;
+}
+
+/* Header */
+
+#header {
+ width: 1000px;
+ height: 130px;
+ margin: 0px auto;
+}
+
+/* Logo */
+
+#logo {
+ float: left;
+ width: 300px;
+ padding: 10px 0 0 60px;
+}
+
+#logo h1 {
+ margin: 0;
+ padding: 40px 0 0 0px;
+ text-transform: lowercase;
+ letter-spacing: -2px;
+ font-size: 4em;
+ font-weight: normal;
+ color: #FFFFFF;
+}
+
+#logo h1 a {
+ display: block;
+ text-decoration: none;
+ color: #FFFFFF;
+}
+
+#logo p {
+ margin: -10px 0 0 2px;
+ text-transform: uppercase;
+ font-family: Tahoma, Arial, Helvetica, sans-serif;
+ font-weight: bold;
+ font-size: 11px;
+}
+
+#logo a {
+ display: block;
+ text-decoration: none;
+ color: #FFDBEA;
+}
+
+/* Menu */
+
+#menu {
+ float: right;
+ width: 530px;
+ margin: 0 auto;
+ padding: 20px 0px 0px 0px;
+}
+
+#menu ul {
+ float: right;
+ margin: 0;
+ padding: 40px 0px 0px 0px;
+ list-style: none;
+ line-height: normal;
+}
+
+#menu li {
+ float: left;
+}
+
+#menu li a {
+ display: block;
+ float: left;
+ height: 30px;
+ margin-left: 5px;
+ background: url(/images/img05.jpg) no-repeat left top;
+ text-decoration: none;
+ text-align: center;
+ text-transform: uppercase;
+ font-family: Arial, Helvetica, sans-serif;
+ font-size: 11px;
+ font-weight: bold;
+ color: #FFFFFF;
+ border: none;
+}
+
+#menu li a span {
+ display: block;
+ float: left;
+ height: 23px;
+ padding: 7px 20px 0px 20px;
+ background: url(/images/img06.jpg) no-repeat right top;
+}
+
+#menu a:hover, #menu .current_page_item a {
+}
+
+#menu .current_page_item a {
+}
+
+/* Page */
+
+
+#page {
+ width: 1000px;
+ margin: 0px auto;
+ background: url(/images/img04.jpg) repeat-y left top;
+}
+
+#page-bgtop {
+ background: url(/images/img02.jpg) no-repeat left top;
+}
+
+#page-bgbtm {
+ overflow: hidden;
+ width: 970px;
+ margin: 0px auto;
+ padding: 20px 30px 40px 0px;
+ background: url(/images/img03.jpg) no-repeat left bottom;
+}
+
+/* Content */
+
+#content {
+ float: left;
+ width: 650px;
+}
+
+/* Post */
+
+.post {
+ margin-top: 40px;
+}
+
+.post .date {
+ float: left;
+ width: 79px;
+ height: 85px;
+ margin: 0;
+ margin-top: 6px;
+ margin-right: 20px;
+ padding-top: 20px;
+ background: url(/images/img07.jpg) no-repeat left top;
+ line-height: normal;
+ text-transform: uppercase;
+ text-align: center;
+ font-size: 11px;
+ font-weight: bold;
+ color: #75012D;
+}
+
+.post .date b {
+ margin: 0;
+ padding: 0;
+ display: block;
+ letter-spacing: -2px;
+ font-size: 32px;
+
+}
+
+.post .title {
+ margin: 0;
+ padding: 15px 0 0 0;
+ margin-left: 10px;
+ padding-left: 10px;
+ letter-spacing: -1px;
+ text-transform: lowercase;
+ font-size: 2.8em;
+ color: #75012D;
+}
+
+.post .title a {
+ color: #B50045;
+}
+
+.post .title h2 {
+ padding: 0;
+ margin: 0;
+}
+
+.post .hr1 {
+}
+
+.post .meta {
+ margin: 0 0 10px 100px;
+ padding: 3px 10px 5px 0px;
+ line-height:normal;
+ text-transform: uppercase;
+ color: #4C4C4C;
+}
+
+.post .meta p {
+}
+
+.post .meta a {
+ color: #4C4C4C;
+}
+
+.post .entry {
+ margin: 0;
+ padding: 0 0 0px 100px;
+}
+
+/* Sidebar */
+
+#sidebar {
+ float: right;
+ width: 250px;
+ padding-top: 40px;
+ margin-left: 30px;
+ margin-bottom: 20px;
+ color: #FFFFFF;
+}
+
+#sidebar ul {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+}
+
+#sidebar li {
+ margin-bottom: 30px;
+}
+
+#sidebar li ul {
+ margin-bottom: 20px;
+}
+
+#sidebar li li {
+ margin: 0px 0px 0px 25px;
+ padding: 4px 0 4px 0;
+ border-bottom: 1px dashed #94003B;
+}
+
+#sidebar li li a {
+}
+
+#sidebar h2 {
+ padding: 0px 0px 0px 25px;
+ margin: 0 0 15px 0;
+ background: url(/images/img08.jpg) no-repeat left 4px;
+ letter-spacing: -1px;
+ text-transform: lowercase;
+ font-size: 22px;
+ font-weight: normal;
+ color: #FFFFFF;
+}
+
+#sidebar a {
+ text-decoration: none;
+ color: #FFC4DC;
+}
+
+#sidebar a:hover {
+ text-decoration: underline;
+}
+
+/* Calendar */
+
+#calendar_wrap {
+ border-top: 1px dashed #666633;
+}
+
+#calendar caption {
+ padding-top: 5px;
+ font-weight: bold;
+}
+
+#calendar table {
+ width: 100%;
+ border: 0px solid #E8E8E8;
+ font-family: Arial, Helvetica, sans-serif;
+}
+
+#calendar thead {
+ background: #514F42;
+ text-align: center;
+}
+
+#calendar tbody td {
+ border: 1px solid #514F42;
+ text-align: center;
+}
+
+#today {
+ font-weight: bold;
+}
+
+#prev {
+}
+
+#next {
+ text-align: right;
+}
+
+/* Footer */
+
+#wrapper2 {
+}
+
+#footer {
+ width: 940px;
+ margin: 0 auto;
+ padding-top: 20px;
+ padding-bottom: 20px;
+ text-transform: uppercase;
+ font-family: Tahoma, Arial, Helvetica, sans-serif;
+ color: #FFFFFF;
+}
+
+#footer a {
+ text-decoration: none;
+ font-size: 10px;
+ color: #F5A9C6;
+}
+
+#legal {
+ clear: both;
+ margin: 0;
+ padding: 10px 0;
+ text-align: center;
+ font-size: 10px;
+ color: #F5A9C6;
+}
+
+#legal a {
+ border-bottom: 1px dotted #DA2128;
+ text-decoration: none;
+}
+
+
+
+.fieldWithErrors {
+ padding: 2px;
+ background-color: red;
+ display: table;
+}
+
+#errorExplanation {
+ width: 400px;
+ border: 2px solid red;
+ padding: 7px;
+ padding-bottom: 12px;
+ margin-bottom: 20px;
+ background-color: #f0f0f0;
+}
+
+#errorExplanation h2 {
+ text-align: left;
+ font-weight: bold;
+ padding: 5px 5px 5px 15px;
+ font-size: 12px;
+ margin: -7px;
+ background-color: #c00;
+ color: #fff;
+}
+
+#errorExplanation p {
+ color: #333;
+ margin-bottom: 0;
+ padding: 5px;
+}
+
+#errorExplanation ul li {
+ font-size: 12px;
+ list-style: square;
+}
+
+div.uploadStatus {
+ margin: 5px;
+}
+
+div.progressBar {
+ margin: 5px;
+}
+
+div.progressBar div.border {
+ background-color: #fff;
+ border: 1px solid grey;
+ width: 100%;
+}
+
+div.progressBar div.background {
+ background-color: #333;
+ height: 18px;
+ width: 0%;
+}
+
+
+.calendar {
+ margin: auto;
+}
+
+.monthName th {
+ font-weight: normal;
+ text-align: right;
+ padding-top: 1em;
+ padding-bottom: 0.7em;
+}
+
+.dayName th {
+ font-size: 0.7em;
+ padding-top: 0.6em;
+ padding-bottom: 0.3em;
+ background-color: #303030;
+ color: white;
+}
+
+.otherMonth, .day, .specialDay {
+ padding: 0.7em 1em;
+ border-right: 1px solid white;
+
+}
+
+.otherMonth {
+ color: #eeeeee;
+}
+.weekendDay {
+ background-color: #eeeeee;
+}
+
+.day, .specialDay {
+ text-align: center;
+ border-bottom: 1px dotted #bbbbbb;
+}
+
+.specialDay {
+ background-color: #d10a21;
+ color: white;
+}
+.specialDay a, .specialDay a:visited, .specialDay a:hover {
+ color: white;
+ text-decoration: none;
+ padding: 1em;
+}
+.specialDay a:hover {
+ color: white;
+ background-color: black;
+}
+
View
3 app/assets/stylesheets/podcasts.css.scss
@@ -0,0 +1,3 @@
+// Place all the styles related to the Podcasts controller here.
+// They will automatically be included in application.css.
+// You can use Sass (SCSS) here: http://sass-lang.com/
View
99 app/controllers/podcasts_controller.rb
@@ -0,0 +1,99 @@
+class PodcastsController < ApplicationController
+
+ before_filter :current_user
+
+ # GET /podcasts
+ # GET /podcasts.json
+ def index
+ @podcasts = Podcast.order("created_at DESC")
+
+ respond_to do |format|
+ format.html # index.html.erb
+ format.json { render :json => @podcasts }
+ end
+ end
+
+ # GET /podcasts/1
+ # GET /podcasts/1.json
+ def show
+ @podcast = Podcast.find(params[:id])
+
+ respond_to do |format|
+ format.html # show.html.erb
+ format.json { render :json => @podcast }
+ end
+ end
+
+ # GET /podcasts/new
+ # GET /podcasts/new.json
+ def new
+ @podcast = Podcast.new
+
+ respond_to do |format|
+ format.html # new.html.erb
+ format.json { render :json => @podcast }
+ end
+ end
+
+ # GET /podcasts/1/edit
+ def edit
+ @podcast = Podcast.find(params[:id])
+ end
+
+ # POST /podcasts
+ # POST /podcasts.json
+ def create
+ @podcast = Podcast.new(params[:podcast])
+
+ respond_to do |format|
+ if @podcast.save
+ format.html { redirect_to @podcast, :notice => 'Podcast was successfully created.' }
+ format.json { render :json => @podcast, :status => :created, :location => @podcast }
+ else
+ format.html { render :action => "new" }
+ format.json { render :json => @podcast.errors, :status => :unprocessable_entity }
+ end
+ end
+ end
+
+ # PUT /podcasts/1
+ # PUT /podcasts/1.json
+ def update
+ @podcast = Podcast.find(params[:id])
+
+ respond_to do |format|
+ if @podcast.update_attributes(params[:podcast])
+ format.html { redirect_to @podcast, :notice => 'Podcast was successfully updated.' }
+ format.json { head :ok }
+ else
+ format.html { render :action => "edit" }
+ format.json { render :json => @podcast.errors, :status => :unprocessable_entity }
+ end
+ end
+ end
+
+ # DELETE /podcasts/1
+ # DELETE /podcasts/1.json
+ def destroy
+ @podcast = Podcast.find(params[:id])
+ @podcast.destroy
+
+ respond_to do |format|
+ format.html { redirect_to podcasts_url }
+ format.json { head :ok }
+ end
+ end
+
+ def search
+ @keywords = "%" + params[:keywords] + "%"
+ if request.url.index('localhost')
+ conditions = ["poddesc LIKE ? or podname LIKE ?", @keywords, @keywords] unless @keywords == ""
+ else
+ conditions = ["poddesc ILIKE ? or podname ILIKE ?", @keywords, @keywords] unless @keywords == ""
+ end
+ @podcasts = Podcast.find(:all, :conditions => conditions, :order => 'created_at desc')
+ render :action => 'index'
+ end
+
+
+end
View
2 app/helpers/podcasts_helper.rb
@@ -0,0 +1,2 @@
+module PodcastsHelper
+end
View
2 app/models/podcast.rb
@@ -0,0 +1,2 @@
+class Podcast < ActiveRecord::Base
+end
View
120 app/views/layouts/application.html.erb
@@ -1,14 +1,132 @@
<!DOCTYPE html>
<html>
<head>
- <title>Nutelo</title>
+ <meta name="author" content="Chris Matthieu" />
+ <meta name="copyright" content="Chris Matthieu" />
+
+ <title>Rubyology - Keeping up-to-date with Ruby and supporting frameworks like Rails, Sinatra, Adhearsion, etc.</title>
+ <meta name="description" content="A study of Ruby and supporting frameworks like Rails, Sinatra, Adhearsion, etc." />
+ <meta name="keywords" content="ruby, rails, ruby on rails, web 2.0" />
<%= stylesheet_link_tag "application" %>
<%= javascript_include_tag "application" %>
<%= csrf_meta_tags %>
</head>
<body>
+ <!-- start header -->
+ <div id="header">
+ <div id="logo">
+ <h1><a href="/">Rubyology</a></h1>
+ </div>
+ <div id="menu">
+ <ul>
+ <%if controller.controller_name == "podcasts" %>
+ <li class="current_page_item"><a href="/podcasts"> Podcasts </a></li>
+ <% else %>
+ <li><a href="/podcasts"> Podcasts </a></li>
+ <% end %>
+ <%if controller.controller_name == "aboutme" %>
+ <li class="current_page_item"><a href="/about">About Us</a></li>
+ <% else %>
+ <li><a href="/about">About Us</a></li>
+ <% end %>
+
+ </ul>
+ </div>
+ </div>
+ <hr />
+ <!-- end header -->
+ <!-- start page -->
+ <div id="wrapper">
+ <div id="page">
+ <div id="page-bgtop">
+ <div id="page-bgbtm">
+ <div id="content">
+ <div class="post">
+
<%= yield %>
+ </div>
+ </div>
+ <div id="sidebar">
+ <ul>
+ <li>
+ <a href="http://itunes.apple.com/us/podcast/rubyology/id219191394"><img src="/images/rubyology.jpg" width="275" border="0"></a>
+ </li>
+ <li>
+ <h2>Search Archives</h2>
+ <ul>
+ <li>
+ <form action="/search" method="get">
+ <fieldset><legend>Search</legend>
+ <label><span class="noscreen">Find:</span>
+ <span id="search-input-out"><input type="text" name="keywords" id="search-input" size="30" /></span></label>
+ <input type="image" src="/images/search_submit.gif" id="search-submit" value="OK" />
+ </fieldset>
+ </form>
+ </li>
+ </ul>
+ </li>
+ <li id="categories">
+ <h2>Follow Host on Twitter</h2>
+ <ul>
+ <li><a href="http://twitter.com/chrismatthieu">Chris Matthieu</a></li>
+ <!-- <li><a href="http://twitter.com/jsgoecke">Jason Goecke</a></li> -->
+ </ul>
+ </li>
+ <li>
+ <h2>RSS Feeds</h2>
+ <ul>
+ <li><a href="http://itunes.apple.com/us/podcast/rubyology/id219191394">iTunes</a></li>
+ <li><a href="http://feeds.feedburner.com/Rubyology">Feedburner</a></li>
+ </ul>
+ </li>
+ <li>
+ <h2>Admin</h2>
+ <ul>
+ <li>
+ <% if @current_user %>
+ <%= @current_user.username %> |
+
+ <% if @current_user.admin %>
+ <%= link_to 'users', '/users' %> |
+ <% end %>
+
+ <%= link_to 'logout', '/logout' %>
+
+ <% else %>
+ <%= link_to 'register', new_user_path %> |
+ <%= link_to 'login', '/login' %>
+ <% end %>
+
+ </li>
+ </ul>
+
+
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+<!-- end page -->
+<!-- start footer -->
+<div id="footer">
+ <p id="legal"> &copy;2011 GetVocal, inc. All Rights Reserved.
+ &nbsp;&nbsp;&bull;&nbsp;&nbsp;
+ Design by <a href="http://www.freecsstemplates.org/">CSS Templates</a> &nbsp;&nbsp;&bull;&nbsp;&nbsp;
+ Icons by <a href="http://famfamfam.com/">FAMFAMFAM</a>. <a href="http://validator.w3.org/check/referer" class="xhtml" title="This page validates as XHTML">Valid <abbr title="eXtensible HyperText Markup Language">XHTML</abbr></a> &nbsp;&nbsp;&bull;&nbsp;&nbsp; <a href="http://jigsaw.w3.org/css-validator/check/referer" class="css" title="This page validates as CSS">Valid <abbr title="Cascading Style Sheets">CSS</abbr></a> </p>
+ <!-- end footer -->
+</div>
+<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+_uacct = "UA-2483685-5";
+urchinTracker();
+</script>
+
+
</body>
</html>
+
View
8 app/views/pages/about.html.erb
@@ -0,0 +1,8 @@
+<div class="entry">
+<h1>About Rubyology</h1>
+
+<p>
+ Rubyology is one of the oldest running Ruby podcasts in existence dating back to 2007. It was established by <%= link_to 'Chris Matthieu', 'http://twitter.com/chrismatthieu'%> with grand hopes of sharing his Ruby learning experiences with the community.
+</p>
+
+</div>
View
2 app/views/pages/index.html.erb
@@ -1,5 +1,3 @@
-<h1>Nutelo</h1>
-
<% if @current_user %>
<%= @current_user.username %> |
View
29 app/views/podcasts/_form.html.erb
@@ -0,0 +1,29 @@
+<%= form_for(@podcast) do |f| %>
+ <% if @podcast.errors.any? %>
+ <div id="error_explanation">
+ <h2><%= pluralize(@podcast.errors.count, "error") %> prohibited this podcast from being saved:</h2>
+
+ <ul>
+ <% @podcast.errors.full_messages.each do |msg| %>
+ <li><%= msg %></li>
+ <% end %>
+ </ul>
+ </div>
+ <% end %>
+
+ <div class="field">
+ <%= f.label :podname %><br />
+ <%= f.text_field :podname %>
+ </div>
+ <div class="field">
+ <%= f.label :poddesc %><br />
+ <%= f.text_area :poddesc %>
+ </div>
+ <div class="field">
+ <%= f.label :podurl %><br />
+ <%= f.text_field :podurl %>
+ </div>
+ <div class="actions">
+ <%= f.submit %>
+ </div>
+<% end %>
View
8 app/views/podcasts/edit.html.erb
@@ -0,0 +1,8 @@
+<div class="entry">
+<h1>Editing podcast</h1>
+
+<%= render 'form' %>
+
+<%= link_to 'Show', @podcast %> |
+<%= link_to 'Back', podcasts_path %>
+</div>
View
55 app/views/podcasts/index.html.erb
@@ -0,0 +1,55 @@
+<% for podcast in @podcasts %>
+
+ <p class="date"><%= podcast.created_at %> </p>
+ <h2 class="title"><a href="/podcasts/<%=podcast.id%>"><%= podcast.podname %></a></h2>
+ <p class="meta"><small>Posted by <a href="http://twitter.com/chrismatthieu">@ChrisMatthieu</a> </small></p>
+ <div class="entry">
+ <% if podcast.podurl == "mov" %>
+
+ <span>
+ <!a href="http://s3.amazonaws.com/rubyology/rubyology<%= podcast.id %>.mov">
+ <a href="/mp3s/rubyology<%= podcast.id %>.mov">Download Screen Cast</a></span>
+
+ <% else %>
+
+ <p>
+ <script language="JavaScript" src="/mp3s/audio-player.js"></script>
+ <object type="application/x-shockwave-flash" data="/mp3s/player.swf" id="audioplayer1" height="24" width="290">
+ <param name="movie" value="/mp3s/player.swf">
+ <!-- param name="FlashVars" value="playerID=1&amp;soundFile=http://s3.amazonaws.com/rubyology/rubyology<%= podcast.id %>.mp3" -->
+ <% if podcast.podurl.blank? or podcast.podurl == "mp3" %>
+ <param name="FlashVars" value="playerID=1&amp;soundFile=/mp3s/rubyology<%= podcast.id %>.mp3">
+ <% else %>
+ <param name="FlashVars" value="playerID=1&amp;soundFile=<%= podcast.podurl %>">
+ <% end %>
+ <param name="quality" value="high">
+ <param name="menu" value="false">
+ <param name="wmode" value="transparent">
+ </object>
+
+ <br>
+ <%# podcast.podurl %></p>
+
+ <% end %>
+
+ <p><%= podcast.poddesc %></p>
+
+ <% if @current_user && @current_user.admin %>
+ <p><%= link_to 'Edit', :action => 'edit', :id => podcast %> | <%= link_to 'Destroy', { :action => 'destroy', :id => podcast }, :confirm => 'Are you sure?', :method => :podcast %></p>
+ <% end %>
+
+ </div>
+
+<% end %>
+
+<%# link_to 'Previous page', { :page => @podcast_pages.current.previous } if @podcast_pages.current.previous %>
+<%# link_to 'Next page', { :page => @podcast_pages.current.next } if @podcast_pages.current.next %>
+
+<br />
+
+<% if @current_user && @current_user.admin %>
+ <%= link_to 'New podcast', :action => 'new' %>
+<% end %>
+
+
+
View
7 app/views/podcasts/new.html.erb
@@ -0,0 +1,7 @@
+<div class="entry">
+<h1>New podcast</h1>
+
+<%= render 'form' %>
+
+<%= link_to 'Back', podcasts_path %>
+</div>
View
54 app/views/podcasts/show.html.erb
@@ -0,0 +1,54 @@
+<div class="post">
+ <p class="date"><%= @podcast.created_at %> </p>
+ <h2 class="title"><a href="/podcasts/<%=@podcast.id%>"><%= @podcast.podname %></a></h2>
+ <p class="meta"><small>Posted by <a href="http://twitter.com/chrismatthieu">@ChrisMatthieu</a> </small></p>
+ <div class="entry">
+
+ <p id="notice"><%= notice %></p>
+
+ <% if @podcast.podurl == "mov" %>
+
+ <span>
+ <!a href="http://s3.amazonaws.com/rubyology/rubyology<%= podcast.id %>.mov">
+ <a href="/mp3s/rubyology<%= @podcast.id %>.mov">Download Screen Cast</a></span>
+
+ <% else %>
+
+ <p>
+ <script language="JavaScript" src="/mp3s/audio-player.js"></script>
+ <object type="application/x-shockwave-flash" data="/mp3s/player.swf" id="audioplayer1" height="24" width="290">
+ <param name="movie" value="/mp3s/player.swf">
+ <!-- param name="FlashVars" value="playerID=1&amp;soundFile=http://s3.amazonaws.com/rubyology/rubyology<%= @podcast.id %>.mp3" -->
+ <% if @podcast.podurl.blank? or @podcast.podurl == "mp3" %>
+ <param name="FlashVars" value="playerID=1&amp;soundFile=/mp3s/rubyology<%= @podcast.id %>.mp3">
+ <% else %>
+ <param name="FlashVars" value="playerID=1&amp;soundFile=<%= @podcast.podurl %>">
+ <% end %>
+ <param name="quality" value="high">
+ <param name="menu" value="false">
+ <param name="wmode" value="transparent">
+ </object>
+
+ <br>
+ <%# @podcast.podurl %></p>
+
+ <% end %>
+
+ <p><%= @podcast.poddesc %></p>
+
+ <% if @current_user && @current_user.admin %>
+ <p><%= link_to 'Edit', :action => 'edit', :id => @podcast %> | <%= link_to 'Destroy', { :action => 'destroy', :id => @podcast }, :confirm => 'Are you sure?', :method => :podcast %></p>
+ <% end %>
+
+ </div>
+</div>
+
+
+
+<br />
+
+<% if @current_user && @current_user.admin %>
+ <%= link_to 'New podcast', :action => 'new' %>
+<% end %>
+
+
View
4 app/views/sessions/new.html.erb
@@ -1,3 +1,4 @@
+<div class="entry">
<h1>Log In</h1>
<%= form_tag sessions_path do %>
@@ -14,4 +15,5 @@
<%= submit_tag "Log in" %>
</div>
-<% end %>
+<% end %>
+</div>
View
3 app/views/users/new.html.erb
@@ -1,5 +1,8 @@
+<div class="entry">
+
<h1>New user</h1>
<%= render 'form' %>
<%= link_to 'Back', users_path %>
+</div>
View
2 config.ru
@@ -1,4 +1,4 @@
# This file is used by Rack-based servers to start the application.
require ::File.expand_path('../config/environment', __FILE__)
-run Nutelo::Application
+run Rubyology::Application
View
2 config/application.rb
@@ -7,7 +7,7 @@
# or test environments.
Bundler.require *Rails.groups(:assets) if defined?(Bundler)
-module Nutelo
+module Rubyology
class Application < Rails::Application
# Settings in config/environments/* take precedence over those specified here.
# Application configuration should go into files in config/initializers
View
6 config/database.yml
@@ -12,7 +12,7 @@ development:
adapter: mysql2
encoding: utf8
reconnect: false
- database: nutelo_development
+ database: rubyology3_development
pool: 5
username: root
password:
@@ -25,7 +25,7 @@ test:
adapter: mysql2
encoding: utf8
reconnect: false
- database: nutelo_test
+ database: rubyology3_test
pool: 5
username: root
password:
@@ -35,7 +35,7 @@ production:
adapter: mysql2
encoding: utf8
reconnect: false
- database: nutelo_production
+ database: rubyology3_production
pool: 5
username: root
password:
View
2 config/environment.rb
@@ -2,4 +2,4 @@
require File.expand_path('../application', __FILE__)
# Initialize the rails application
-Nutelo::Application.initialize!
+Rubyology::Application.initialize!
View
2 config/environments/development.rb
@@ -1,4 +1,4 @@
-Nutelo::Application.configure do
+Rubyology::Application.configure do
# Settings specified here will take precedence over those in config/application.rb
# In the development environment your application's code is reloaded on
View
4 config/environments/production.rb
@@ -1,4 +1,4 @@
-Nutelo::Application.configure do
+Rubyology::Application.configure do
# Settings specified here will take precedence over those in config/application.rb
# Code is not reloaded between requests
@@ -12,7 +12,7 @@
config.serve_static_assets = false
# Compress JavaScripts and CSS
- config.assets.compress = true
+ config.assets.compress = false
# Specifies the header that your server uses for sending files
# (comment out if your front-end server doesn't support this)
View
2 config/environments/test.rb
@@ -1,4 +1,4 @@
-Nutelo::Application.configure do
+Rubyology::Application.configure do
# Settings specified here will take precedence over those in config/application.rb
# The test environment is used exclusively to run your application's
View
2 config/initializers/secret_token.rb
@@ -4,4 +4,4 @@
# If you change this key, all old signed cookies 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.
-Nutelo::Application.config.secret_token = 'f60ea72967f532c3d8a6dff56e3ccae15c262fce5a88d147cb9e2fdb9318e1a39c94c8a53c21804aa6170af07c6cf09ec5c942f28fc4eea373d5ece0ef84cfbc'
+Rubyology::Application.config.secret_token = 'f60ea72967f532c3d8a6dff56e3ccae15c262fce5a88d147cb9e2fdb9318e1a39c94c8a53c21804aa6170af07c6cf09ec5c942f28fc4eea373d5ece0ef84cfbc'
View
4 config/initializers/session_store.rb
@@ -1,8 +1,8 @@
# Be sure to restart your server when you modify this file.
-Nutelo::Application.config.session_store :cookie_store, :key => '_nutelo_session'
+Rubyology::Application.config.session_store :cookie_store, :key => '_Rubyology_session'
# 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 "rails generate session_migration")
-# Nutelo::Application.config.session_store :active_record_store
+# Rubyology::Application.config.session_store :active_record_store
View
8 config/routes.rb
@@ -1,4 +1,6 @@
-Nutelo::Application.routes.draw do
+Rubyology::Application.routes.draw do
+ resources :podcasts
+
resources :users
resources :sessions
@@ -11,6 +13,8 @@
match '/login' => 'sessions#new'
match '/logout' => 'sessions#destroy'
+ match '/about' => 'pages#about'
+ match '/search' => 'podcasts#search'
# Sample of named route:
@@ -55,7 +59,7 @@
# You can have the root of your site routed with "root"
# just remember to delete public/index.html.
- root :to => 'pages#index'
+ root :to => 'podcasts#index'
# See how all your routes lay out with "rake routes"
View
11 db/migrate/20110803213119_create_podcasts.rb
@@ -0,0 +1,11 @@
+class CreatePodcasts < ActiveRecord::Migration
+ def change
+ create_table :podcasts do |t|
+ t.string :podname
+ t.text :poddesc
+ t.string :podurl
+
+ t.timestamps
+ end
+ end
+end
View
10 db/schema.rb
@@ -10,7 +10,15 @@
#
# It's strongly recommended to check this file into your version control system.
-ActiveRecord::Schema.define(:version => 20110728003357) do
+ActiveRecord::Schema.define(:version => 20110803213119) do
+
+ create_table "podcasts", :force => true do |t|
+ t.string "podname"
+ t.text "poddesc"
+ t.string "podurl"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
create_table "users", :force => true do |t|
t.string "username"
View
BIN public/.DS_Store
Binary file not shown.
View
BIN public/images/150px-Ruby_logo.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN public/images/Chris-1.JPG
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN public/images/Chris50.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN public/images/Chris75.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN public/images/Thumbs.db
Binary file not shown.
View
BIN public/images/bg.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN public/images/bg_page.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN public/images/bg_page_in.jpg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN public/images/btn_more.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN public/images/col_bg.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN public/images/col_title_bg.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN public/images/col_top.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN public/images/content_article_bg.jpg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN public/images/content_title_bg.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN public/images/footer.jpg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN public/images/gem.jpeg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN public/images/header.jpg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN public/images/ico_archive.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN public/images/ico_archive2.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN public/images/ico_cat.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN public/images/ico_comments.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN public/images/ico_date.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN public/images/ico_links.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN public/images/ico_list.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN public/images/ico_rss.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN public/images/ico_rss_bak.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN public/images/ico_top.gif
Diff not rendered.
View
BIN public/images/ico_user.gif
Diff not rendered.
View
BIN public/images/img01.jpg
Diff not rendered.
View
BIN public/images/img02.jpg
Diff not rendered.
View
BIN public/images/img03.jpg
Diff not rendered.
View
BIN public/images/img04.jpg
Diff not rendered.
View
BIN public/images/img05.jpg
Diff not rendered.
View
BIN public/images/img06.jpg
Diff not rendered.
View
BIN public/images/img07.jpg
Diff not rendered.
View
BIN public/images/img08.jpg
Diff not rendered.
View
BIN public/images/rails.png
Diff not rendered.
View
BIN public/images/rubyology.jpg
Diff not rendered.
View
BIN public/images/search_input.gif
Diff not rendered.
View
BIN public/images/search_submit.gif
Diff not rendered.
View
BIN public/images/spacer.gif
Diff not rendered.
View
BIN public/images/tab_active_l.gif
Diff not rendered.
View
BIN public/images/tab_active_r.gif
Diff not rendered.
View
BIN public/images/tab_hover.gif
Diff not rendered.
View
BIN public/images/tab_hover_l.gif
Diff not rendered.
View
BIN public/images/tab_hover_r.gif
Diff not rendered.
View
BIN public/images/tab_link.gif
Diff not rendered.
View
BIN public/images/tab_link_l.gif
Diff not rendered.
View
BIN public/images/tab_link_r.gif
Diff not rendered.
View
BIN public/images/tmp_photo.gif
Diff not rendered.
View
BIN public/mp3s/.DS_Store
Binary file not shown.
View
17 public/mp3s/.svn/all-wcprops
@@ -0,0 +1,17 @@
+K 25
+svn:wc:ra_dav:version-url
+V 43
+/svn/rubyology/!svn/ver/4/trunk/public/mp3s
+END
+audio-player.js
+K 25
+svn:wc:ra_dav:version-url
+V 59
+/svn/rubyology/!svn/ver/4/trunk/public/mp3s/audio-player.js
+END
+player.swf
+K 25
+svn:wc:ra_dav:version-url
+V 54
+/svn/rubyology/!svn/ver/4/trunk/public/mp3s/player.swf
+END
View
54 public/mp3s/.svn/entries
@@ -0,0 +1,54 @@
+10
+
+dir
+4
+http://vouchor.svnrepository.com/svn/rubyology/trunk/public/mp3s
+http://vouchor.svnrepository.com/svn/rubyology
+
+
+
+2007-11-07T04:21:22.255005Z
+4
+numly
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+d3e396f3-4e3e-0410-9651-9e56f641ff2b
+
+audio-player.js
+file
+
+
+
+
+2007-11-07T04:22:40.000000Z
+0bd9dd450e090a84c61c23d45230ebb8
+2007-11-07T04:21:22.255005Z
+4
+numly
+has-props
+
+player.swf
+file
+
+
+
+
+2007-11-07T04:22:40.000000Z
+7b8776ef9be38972cbae2ab340085ce6
+2007-11-07T04:21:22.255005Z
+4
+numly
+has-props
+
View
5 public/mp3s/.svn/prop-base/audio-player.js.svn-base
@@ -0,0 +1,5 @@
+K 14
+svn:executable
+V 0
+
+END
View
9 public/mp3s/.svn/prop-base/player.swf.svn-base
@@ -0,0 +1,9 @@
+K 14
+svn:executable
+V 0
+
+K 13
+svn:mime-type
+V 24
+application/octet-stream
+END
View
25 public/mp3s/.svn/text-base/audio-player.js.svn-base
@@ -0,0 +1,25 @@
+var ap_instances = new Array();
+
+function ap_stopAll(playerID) {
+ for(var i = 0;i<ap_instances.length;i++) {
+ try {
+ if(ap_instances[i] != playerID) document.getElementById("audioplayer" + ap_instances[i].toString()).SetVariable("closePlayer", 1);
+ else document.getElementById("audioplayer" + ap_instances[i].toString()).SetVariable("closePlayer", 0);
+ } catch( errorObject ) {
+ // stop any errors
+ }
+ }
+}
+
+function ap_registerPlayers() {
+ var objectID;
+ var objectTags = document.getElementsByTagName("object");
+ for(var i=0;i<objectTags.length;i++) {
+ objectID = objectTags[i].id;
+ if(objectID.indexOf("audioplayer") == 0) {
+ ap_instances[i] = objectID.substring(11, objectID.length);
+ }
+ }
+}
+
+var ap_clearID = setInterval( ap_registerPlayers, 100 );
View
BIN public/mp3s/.svn/text-base/player.swf.svn-base
Binary file not shown.
View
25 public/mp3s/audio-player.js
@@ -0,0 +1,25 @@
+var ap_instances = new Array();
+
+function ap_stopAll(playerID) {
+ for(var i = 0;i<ap_instances.length;i++) {
+ try {
+ if(ap_instances[i] != playerID) document.getElementById("audioplayer" + ap_instances[i].toString()).SetVariable("closePlayer", 1);
+ else document.getElementById("audioplayer" + ap_instances[i].toString()).SetVariable("closePlayer", 0);
+ } catch( errorObject ) {
+ // stop any errors
+ }
+ }
+}
+
+function ap_registerPlayers() {
+ var objectID;
+ var objectTags = document.getElementsByTagName("object");
+ for(var i=0;i<objectTags.length;i++) {
+ objectID = objectTags[i].id;
+ if(objectID.indexOf("audioplayer") == 0) {
+ ap_instances[i] = objectID.substring(11, objectID.length);
+ }
+ }
+}
+
+var ap_clearID = setInterval( ap_registerPlayers, 100 );
View
BIN public/mp3s/player.swf
Binary file not shown.
View
11 test/fixtures/podcasts.yml
@@ -0,0 +1,11 @@
+# Read about fixtures at http://api.rubyonrails.org/classes/Fixtures.html
+
+one:
+ podname: MyString
+ poddesc: MyText
+ podurl: MyString
+
+two:
+ podname: MyString
+ poddesc: MyText
+ podurl: MyString
View
49 test/functional/podcasts_controller_test.rb
@@ -0,0 +1,49 @@
+require 'test_helper'
+
+class PodcastsControllerTest < ActionController::TestCase
+ setup do
+ @podcast = podcasts(:one)
+ end
+
+ test "should get index" do
+ get :index
+ assert_response :success
+ assert_not_nil assigns(:podcasts)
+ end
+
+ test "should get new" do
+ get :new
+ assert_response :success
+ end
+
+ test "should create podcast" do
+ assert_difference('Podcast.count') do
+ post :create, :podcast => @podcast.attributes
+ end
+
+ assert_redirected_to podcast_path(assigns(:podcast))
+ end
+
+ test "should show podcast" do
+ get :show, :id => @podcast.to_param
+ assert_response :success
+ end
+
+ test "should get edit" do
+ get :edit, :id => @podcast.to_param
+ assert_response :success
+ end
+
+ test "should update podcast" do
+ put :update, :id => @podcast.to_param, :podcast => @podcast.attributes
+ assert_redirected_to podcast_path(assigns(:podcast))
+ end
+
+ test "should destroy podcast" do
+ assert_difference('Podcast.count', -1) do
+ delete :destroy, :id => @podcast.to_param
+ end
+
+ assert_redirected_to podcasts_path
+ end
+end
View
4 test/unit/helpers/podcasts_helper_test.rb
@@ -0,0 +1,4 @@
+require 'test_helper'
+
+class PodcastsHelperTest < ActionView::TestCase
+end
View
7 test/unit/podcast_test.rb
@@ -0,0 +1,7 @@
+require 'test_helper'
+
+class PodcastTest < ActiveSupport::TestCase
+ # test "the truth" do
+ # assert true
+ # end
+end

0 comments on commit 855d99a

Please sign in to comment.
Something went wrong with that request. Please try again.