spud_blog 0.8.18 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. data/app/assets/images/spud/admin/news_thumb@2x.png +0 -0
  2. data/app/assets/javascripts/spud/admin/post_categories.js +116 -2
  3. data/app/assets/javascripts/spud/admin/posts.js +52 -10
  4. data/app/assets/stylesheets/spud/admin/posts.css +93 -38
  5. data/app/controllers/blog_controller.rb +2 -4
  6. data/app/controllers/news_controller.rb +4 -4
  7. data/app/controllers/spud/admin/news_posts_controller.rb +2 -2
  8. data/app/controllers/spud/admin/post_categories_controller.rb +14 -8
  9. data/app/controllers/spud/admin/posts_controller.rb +1 -1
  10. data/app/controllers/spud/blog/sitemaps_controller.rb +2 -2
  11. data/app/models/spud_post_categories_post.rb +5 -0
  12. data/app/models/spud_post_category.rb +12 -7
  13. data/app/models/spud_post_category_sweeper.rb +3 -3
  14. data/app/models/spud_post_comment_sweeper.rb +4 -4
  15. data/app/models/spud_post_sweeper.rb +5 -5
  16. data/app/views/blog/index.html.erb +6 -2
  17. data/app/views/blog/show.html.erb +1 -1
  18. data/app/views/news/index.html.erb +6 -2
  19. data/app/views/news/show.html.erb +2 -2
  20. data/app/views/spud/admin/news_posts/index.html.erb +6 -1
  21. data/app/views/spud/admin/news_posts/new.html.erb +1 -1
  22. data/app/views/spud/admin/post_categories/_category.html.erb +14 -0
  23. data/app/views/spud/admin/post_categories/_form.html.erb +17 -27
  24. data/app/views/spud/admin/post_categories/edit.html.erb +1 -1
  25. data/app/views/spud/admin/post_categories/index.html.erb +6 -29
  26. data/app/views/spud/admin/posts/_category.html.erb +7 -7
  27. data/app/views/spud/admin/posts/_form.html.erb +70 -67
  28. data/app/views/spud/admin/posts/index.html.erb +5 -0
  29. data/app/views/spud/admin/posts/new.html.erb +1 -1
  30. data/db/migrate/20121113135812_add_nested_set_to_post_categories.rb +21 -0
  31. data/lib/spud_blog/configuration.rb +3 -4
  32. data/lib/spud_blog/engine.rb +6 -6
  33. data/lib/spud_blog/version.rb +1 -1
  34. data/test/dummy/log/development.log +36 -0
  35. metadata +44 -19
  36. data/app/assets/javascripts/spud/admin/news_posts.js +0 -2
  37. data/app/assets/javascripts/spud/admin/post_comments.js +0 -2
  38. data/app/assets/stylesheets/spud/admin/news_posts.css +0 -4
  39. data/app/assets/stylesheets/spud/admin/post_categories.css +0 -4
  40. data/app/assets/stylesheets/spud/admin/post_comments.css +0 -4
  41. data/app/views/layouts/spud/admin/post.html.erb +0 -5
  42. data/app/views/spud/admin/post_categories/show.html.erb +0 -0
@@ -1,3 +1,7 @@
1
+ <% content_for :title do %>
2
+ News | <%=current_site_name%>
3
+ <% end %>
4
+
1
5
  <% content_for :head do %>
2
6
  <%= spud_news_rss_link %>
3
7
  <% end %>
@@ -19,7 +23,7 @@
19
23
  <h3><%= link_to post.title, news_post_path(post.url_name) %></h3>
20
24
  <h4>Posted by <%= post.author.full_name %> on <%= post.display_date %></h4>
21
25
  <div class="spud_news_post_content">
22
- <%= raw post.content %>
26
+ <%= truncate_html post.content.html_safe, :length => 250 %>
23
27
  </div>
24
28
  </div>
25
29
  <% end %>
@@ -28,4 +32,4 @@
28
32
  <% end %>
29
33
  </div>
30
34
 
31
- <%= will_paginate @posts %>
35
+ <%= will_paginate @posts %>
@@ -1,5 +1,5 @@
1
1
  <% content_for :title do %>
2
- <%= @post.title %> | <%= Spud::Core.site_name %>
2
+ <%= @post.title %> | <%=current_site_name%>
3
3
  <% end %>
4
4
 
5
5
  <% content_for :head do %>
@@ -24,4 +24,4 @@
24
24
  <div id="spud_news_post_content">
25
25
  <%= raw @post.content %>
26
26
  </div>
27
- </div>
27
+ </div>
@@ -1,4 +1,5 @@
1
1
  <%= content_for :data_controls do %>
2
+ <%= link_to "Manage Categories", spud_admin_post_categories_path, :class => 'btn spud_blog_manage_categories', :title => 'Manage Categories' %>
2
3
  <%= link_to "New Post", new_spud_admin_news_post_path, :class => "btn btn-primary", :title => "New Post" %>
3
4
  <% end %>
4
5
 
@@ -27,7 +28,7 @@
27
28
  <td><%= post.author.full_name %></td>
28
29
  <td><%= link_to(post.published_at.strftime('%m/%d/%Y'), news_post_path(post.url_name)) %></td>
29
30
  <td align="right">
30
- <%= link_to 'Delete', spud_admin_news_post_path(post), :method => :delete, :confirm => 'Are you sure you want to delete this post?', :class => 'btn btn-danger' %>
31
+ <%= link_to 'Delete', spud_admin_news_post_path(post), :method => :delete, :confirm => 'Are you sure you want to delete this post?', :class => 'btn btn-small btn-danger' %>
31
32
  </td>
32
33
  </tr>
33
34
  <%end%>
@@ -36,4 +37,8 @@
36
37
  <div class="spud_admin_pagination">
37
38
  <%= will_paginate @posts %>
38
39
  </div>
40
+
41
+ <script>
42
+ $(document).ready(Spud.Admin.PostCategories.index);
43
+ </script>
39
44
  <%end%>
@@ -1,3 +1,3 @@
1
- <%= form_for @post, :url => spud_admin_news_posts_path, :html => {:class => 'form-horizontal'} do |f| %>
1
+ <%= form_for @post, :url => spud_admin_news_posts_path do |f| %>
2
2
  <%= render :partial => '/spud/admin/posts/form', :locals => {:f => f} %>
3
3
  <% end %>
@@ -0,0 +1,14 @@
1
+ <%= content_tag :li, :class => 'spud_blog_category_manager_item', 'data-id' => category.id do %>
2
+ <span class="spud_blog_category_manager_item_name">
3
+ <%= category.name %>
4
+ </span>
5
+ <span class="spud_blog_category_manager_item_actions">
6
+ <%= link_to 'Edit', edit_spud_admin_post_category_path(category), :class => 'btn btn-mini spud_blog_category_edit' %>
7
+ <%= link_to 'Delete', spud_admin_post_category_path(category), :class => 'btn btn-mini btn-danger spud_blog_category_delete' %>
8
+ </span>
9
+ <ul class="spud_blog_category_manager_item_children">
10
+ <% if @post_categories[category.id] %>
11
+ <%= render :partial => 'category', :collection => @post_categories[category.id] %>
12
+ <% end %>
13
+ </ul>
14
+ <% end %>
@@ -1,33 +1,23 @@
1
- <%= form_for @post_category, :url => path, :html => {:class => 'form-horizontal'} do |f| %>
2
- <%=error_messages_for(f.object)%>
1
+ <%= form_for @post_category, :url => (@post_category.new_record? ? spud_admin_post_categories_path : spud_admin_post_category_path(@post_category)), :html => {:class => 'form-horizontal spud_post_category_form'} do |f| %>
2
+
3
+ <%= error_messages_for(f.object) %>
3
4
 
4
5
  <fieldset>
5
- <legend>Category Info</legend>
6
-
7
- <div class="control-group">
8
- <%= f.label :name,"Name",:class => "control-label" %>
9
- <div class="controls">
10
- <%= f.text_field :name %>
11
- </div>
6
+ <div class="control-group">
7
+ <%= f.label :name,"Name",:class => "control-label" %>
8
+ <div class="controls">
9
+ <%= f.text_field :name %>
12
10
  </div>
13
- <div class="control-group">
14
- <%= label_tag :parent,'Parent',:class => "control-label" %>
15
- <div class="controls">
16
- <select name="spud_post_category[parent_id]">
17
- <option value="0">No Parent</option>
18
- <%= options_for_select(SpudPostCategory.options_for_categories(:filter => @post_category.id), @post_category.parent_id) %>
19
- </select>
20
- </div>
11
+ </div>
12
+ <div class="control-group">
13
+ <%= label_tag :parent,'Parent',:class => "control-label" %>
14
+ <div class="controls">
15
+ <select name="spud_post_category[parent_id]">
16
+ <option value="">No Parent</option>
17
+ <%= options_for_select(SpudPostCategory.options_for_categories(:filter => @post_category.id), @post_category.parent_id) %>
18
+ </select>
21
19
  </div>
22
-
20
+ </div>
23
21
  </fieldset>
24
22
 
25
- <div class="form-actions">
26
- <%=f.submit "Save Post Category", :class=>"btn btn-primary form-btn","data-loading-text"=>"Saving..."%> or <%=link_to "cancel",request.referer,:class => "btn"%>
27
- </div>
28
-
29
- <% end %>
30
-
31
- <script type="text/javascript">
32
- $(document).ready(Spud.Admin.Posts.edit);
33
- </script>
23
+ <% end %>
@@ -1 +1 @@
1
- <%= render :partial => 'form', :locals => {:path => spud_admin_post_category_path(@post_category)} %>
1
+ <%= render :partial => 'form' %>
@@ -1,29 +1,6 @@
1
- <%= content_for :data_controls do %>
2
- <%= link_to "New Post Category", new_spud_admin_post_category_path, :class => "btn btn-primary", :title => "New Post Category" %>
3
- <% end %>
4
-
5
- <%=content_for :detail do %>
6
- <table class="admin-table">
7
- <thead>
8
- <tr>
9
- <th>Name</th>
10
- <th># Occurances</th>
11
- <th>&nbsp;</th>
12
- </tr>
13
- </thead>
14
- <tbody>
15
- <% @post_categories.each do |category| %>
16
- <tr>
17
- <td><%= link_to category.name, edit_spud_admin_post_category_path(category) %></td>
18
- <td><%= category.posts.size %></td>
19
- <td align="right">
20
- <%= link_to 'Delete', spud_admin_post_category_path(category), :method => :delete, :confirm => 'Are you sure you want to delete this category?', :class => 'btn btn-danger' %>
21
- </td>
22
- </tr>
23
- <%end%>
24
- </tbody>
25
- </table>
26
- <div class="spud_admin_pagination">
27
- <%= will_paginate @post_categories %>
28
- </div>
29
- <%end%>
1
+ <div class="spud_blog_category_manager">
2
+ <%= link_to "New Post Category", new_spud_admin_post_category_path, :class => "btn btn-small btn-primary spud_blog_category_add_new", :title => "New Post Category" %>
3
+ <ul class="spud_blog_category_manager_list">
4
+ <%= render :partial => 'category', :collection => @post_categories[nil] %>
5
+ </ul>
6
+ </div>
@@ -1,9 +1,9 @@
1
- <li class="spud_post_form_category">
1
+ <%= content_tag :li, :class => 'spud_post_form_category', 'data-id' => category.id do %>
2
2
  <%= check_box_tag 'spud_post[category_ids][]', category.id, @post.category_ids.include?(category.id), :id => "spud_post_category_#{category.id}" %>
3
3
  <%= label_tag "spud_post_category_#{category.id}", category.name %>
4
- <% if @categories[category.id] %>
5
- <ul>
6
- <%= render :partial => '/spud/admin/posts/category', :collection => @categories[category.id] %>
7
- </ul>
8
- <% end %>
9
- </li>
4
+ <ul>
5
+ <% if @categories[category.id] %>
6
+ <%= render :partial => '/spud/admin/posts/category', :collection => @categories[category.id] %>
7
+ <% end %>
8
+ </ul>
9
+ <% end %>
@@ -1,24 +1,14 @@
1
1
  <%=error_messages_for(f.object)%>
2
2
 
3
3
  <fieldset>
4
- <div class="control-group">
5
- <%=f.label :title, :required=>true,:style =>"display:none;", :class=>"control-label"%>
6
- <%=f.text_field :title, :class => "full-width",:placeholder=>"Enter title here"%>
7
- </div>
4
+ <%= f.label :title, :required=>true,:style =>"display:none;" %>
5
+ <%= f.text_field :title, :class => "full-width",:placeholder=>"Enter title here" %>
8
6
  </fieldset>
9
7
 
10
8
  <div>
11
9
  <%= f.text_area :content,:style => "width:100%;", :class => 'tinymce full-width' %>
12
10
  </div>
13
11
 
14
- <fieldset>
15
- <legend>Categories</legend>
16
- <input type="hidden" name="spud_post[category_ids][]" value="" />
17
- <ul id="spud_post_categories_form">
18
- <%= render :partial => '/spud/admin/posts/category', :collection => @categories[0] %>
19
- </ul>
20
- </fieldset>
21
-
22
12
  <% if Spud::Blog.config.has_custom_fields %>
23
13
  <fieldset>
24
14
  <legend>Custom Fields</legend>
@@ -26,71 +16,84 @@
26
16
  </fieldset>
27
17
  <% end %>
28
18
 
29
- <% if Spud::Core.config.multisite_mode_enabled %>
30
- <fieldset id="spud_post_site_options">
31
- <legend>Sites</legend>
32
- <div class="control-group">
33
- <div class="controls">
34
- <span class="help-block"><b>Choose which websites you would like to publish to:</b></span>
35
- <%= spud_post_site_check_box_tag(Spud::Core.default_site_config, @post) %>
36
- <%= spud_post_site_label_tag(Spud::Core.default_site_config) %>
37
- <% Spud::Core.config.multisite_config.each do |site| %>
38
- <%= spud_post_site_check_box_tag(site, @post) %>
39
- <%= spud_post_site_label_tag(site) %>
40
- <% end %>
41
- </div>
42
- </div>
43
- </fieldset>
44
- <% end %>
45
-
46
- <fieldset>
19
+ <fieldset class="spud_post_form_fieldset">
47
20
  <legend>Advanced</legend>
48
21
 
49
- <div class="control-group">
50
- <%= f.label :published_at, 'Publish Date', :class=>"control-label" %>
51
- <div class="controls">
22
+ <div class="spud_post_form_col">
23
+ <h4>Meta Data</h4>
24
+
25
+ <div class="spud_post_form_row">
26
+ <%= f.label :published_at, 'Publish Date' %>
52
27
  <%= f.text_field :published_at,:value => f.object.published_at.strftime("%Y-%m-%d %H:%M") , :class => 'spud_form_date_picker' %>
53
28
  </div>
54
- </div>
55
- <%if @current_user.super_admin%>
56
- <div class="control-group">
57
- <%= f.label :spud_user_id, 'Author', :class=>"control-label" %>
58
- <div class="controls">
59
- <%=f.select :spud_user_id,options_for_select(SpudUser.order(:first_name,:last_name,:login).all.collect{|user| [user.full_name,user.id]},f.object.spud_user_id)%>
29
+
30
+ <% if @current_user.super_admin %>
31
+ <div class="spud_post_form_row">
32
+ <%= f.label :spud_user_id, 'Author' %>
33
+ <%= f.select :spud_user_id,options_for_select(SpudUser.order(:first_name,:last_name,:login).all.collect{|user| [user.full_name,user.id]},f.object.spud_user_id)%>
34
+ </div>
35
+ <% else %>
36
+ <%= f.hidden_field :spud_user_id %>
37
+ <% end %>
38
+
39
+ <% if Spud::Core.config.multisite_mode_enabled %>
40
+ <div class="spud_post_form_row">
41
+ <%= f.label :sites, 'Websites to Publish' %>
42
+ <div class="spud_post_form_input_group">
43
+ <%= spud_post_site_check_box_tag(Spud::Core.default_site_config, @post) %>
44
+ <%= spud_post_site_label_tag(Spud::Core.default_site_config) %>
45
+ <% Spud::Core.config.multisite_config.each do |site| %>
46
+ <%= spud_post_site_check_box_tag(site, @post) %>
47
+ <%= spud_post_site_label_tag(site) %>
48
+ <% end %>
49
+ </div>
50
+ </div>
51
+ <% end %>
52
+
53
+ <div class="spud_post_form_row">
54
+ <%= f.label :visible %>
55
+ <div class="spud_post_form_input_group">
56
+ <%= f.radio_button :visible, true %>
57
+ <label class="radio inline" for="spud_post_visible_true">Yes</label>
58
+ <%= f.radio_button :visible, false %>
59
+ <label class="radio inline" for="spud_post_visible_false">No</label>
60
60
  </div>
61
61
  </div>
62
- <%else%>
63
- <%= f.hidden_field :spud_user_id %>
64
- <%end%>
65
- <div class="control-group">
66
- <%= f.label :visible, :class=>"control-label" %>
67
- <div class="controls">
68
- <%= f.check_box :visible %>
69
- </div>
70
- </div>
71
- <div class="control-group">
72
- <%= f.label :meta_keywords, 'Keywords', :class=>"control-label" %>
73
- <div class="controls">
74
- <%= f.text_field :meta_keywords ,:style=>"width:600px;" %>
75
- <span class="help-block">A Comma seperated list of keywords for search engines. Keep it short (no more than 10 keywords)</span>
62
+
63
+ <% unless @post.is_news %>
64
+ <div class="spud_post_form_row">
65
+ <%= f.label :comments_enabled,"Comments Enabled" %>
66
+ <div class="spud_post_form_input_group">
67
+ <%= f.radio_button :comments_enabled, true %>
68
+ <label class="radio inline" for="spud_post_comments_enabled_true">Yes</label>
69
+ <%= f.radio_button :comments_enabled, false %>
70
+ <label class="radio inline" for="spud_post_comments_enabled_false">No</label>
71
+ </div>
72
+ </div>
73
+ <% end %>
74
+
75
+ <div class="spud_post_form_row">
76
+ <%= f.label :meta_keywords, 'Keywords' %>
77
+ <%= f.text_field :meta_keywords %>
78
+ <span class="spud_post_form_help_block">A Comma seperated list of keywords for search engines. Keep it short (no more than 10 keywords)</span>
76
79
  </div>
77
- </div>
78
- <div class="control-group">
79
- <%= f.label :meta_description, 'Description', :class=>"control-label" %>
80
- <div class="controls">
81
- <%= f.text_area :meta_description, :style =>"width:600px;height:40px;"%>
82
- <span class="help-block">A short description of the article. This is what appears on a search engines search result page.</span>
80
+
81
+ <div class="spud_post_form_row">
82
+ <%= f.label :meta_description, 'Description' %>
83
+ <%= f.text_area :meta_description %>
84
+ <span class="spud_post_form_help_block">A short description of the article. This is what appears on a search engines search result page.</span>
83
85
  </div>
84
86
  </div>
85
- <% unless @post.is_news %>
86
- <div class="control-group">
87
- <%= f.label :comments_enabled,"Comments Enabled", :class=>"control-label" %>
88
- <div class="controls">
89
- <%= f.check_box :comments_enabled %>
90
- </div>
87
+
88
+ <div class="spud_post_form_col">
89
+ <h4>Categories</h4>
90
+ <%= link_to 'Add Category', new_spud_admin_post_category_path, :class => 'btn btn-mini spud_post_add_category' %>
91
+ <input type="hidden" name="spud_post[category_ids][]" value="" />
92
+ <ul class="spud_post_categories_form">
93
+ <%= render :partial => '/spud/admin/posts/category', :collection => @categories[nil] %>
94
+ </ul>
91
95
  </div>
92
- <% end %>
93
- </ol>
96
+
94
97
  </fieldset>
95
98
  <%= f.hidden_field :is_news %>
96
99
 
@@ -1,4 +1,5 @@
1
1
  <%= content_for :data_controls do %>
2
+ <%= link_to "Manage Categories", spud_admin_post_categories_path, :class => 'btn spud_blog_manage_categories', :title => 'Manage Categories' %>
2
3
  <%= link_to "New Post", new_spud_admin_post_path, :class => "btn btn-primary", :title => "New Post" %>
3
4
  <% end %>
4
5
 
@@ -37,4 +38,8 @@
37
38
  <div class="spud_admin_pagination">
38
39
  <%= will_paginate @posts %>
39
40
  </div>
41
+
42
+ <script>
43
+ $(document).ready(Spud.Admin.PostCategories.index);
44
+ </script>
40
45
  <%end%>
@@ -1,3 +1,3 @@
1
- <%= form_for @post, :url => spud_admin_posts_path, :html => {:class => 'form-horizontal'} do |f| %>
1
+ <%= form_for @post, :url => spud_admin_posts_path do |f| %>
2
2
  <%= render :partial => 'form', :locals => {:f => f} %>
3
3
  <% end %>
@@ -0,0 +1,21 @@
1
+ class AddNestedSetToPostCategories < ActiveRecord::Migration
2
+ def up
3
+ change_table :spud_post_categories do |t|
4
+ t.integer :lft
5
+ t.integer :rgt
6
+ t.integer :depth
7
+ end
8
+
9
+ # Populates lft, rgt, and depth values for nested set
10
+ SpudPostCategory.where(:parent_id => 0).update_all({:parent_id => nil})
11
+ SpudPostCategory.rebuild!
12
+ end
13
+
14
+ def down
15
+ change_table :spud_post_categories do |t|
16
+ t.remove :ltf
17
+ t.remove :rgt
18
+ t.remove :depth
19
+ end
20
+ end
21
+ end
@@ -5,8 +5,8 @@ module Spud
5
5
  :base_layout, :news_layout, :blog_enabled,
6
6
  :news_enabled, :posts_per_page, :blog_path,
7
7
  :news_path, :enable_sitemap, :has_custom_fields,
8
- :enable_action_caching, :action_caching_duration,
9
- :enable_full_page_caching,:enable_rakismet
8
+ :cache_mode, :action_caching_duration,
9
+ :enable_rakismet
10
10
  )
11
11
  self.base_layout = 'application'
12
12
  self.news_layout = nil
@@ -17,9 +17,8 @@ module Spud
17
17
  self.news_path = 'news'
18
18
  self.enable_sitemap = true
19
19
  self.has_custom_fields = false
20
- self.enable_action_caching = false
20
+ self.cache_mode = nil #options :full_page, :action
21
21
  self.action_caching_duration = 3600
22
- self.enable_full_page_caching = false
23
22
  self.enable_rakismet = false
24
23
  end
25
24
  end
@@ -1,4 +1,8 @@
1
1
  require 'spud_core'
2
+ require 'awesome_nested_set'
3
+ require 'spud_permalinks'
4
+ require 'truncate_html'
5
+
2
6
  module Spud
3
7
  module Blog
4
8
  class Engine < Rails::Engine
@@ -13,12 +17,6 @@ module Spud
13
17
 
14
18
  engine_name :spud_blog
15
19
  initializer :admin do
16
- Spud::Core.config.admin_applications += [{
17
- :name => 'Post Categories',
18
- :thumbnail => 'spud/admin/posts_thumb.png',
19
- :url => '/spud/admin/post_categories',
20
- :order => 3
21
- }]
22
20
  if Spud::Blog.enable_sitemap == true
23
21
  Spud::Core.config.sitemap_urls += [:spud_blog_sitemap_url]
24
22
  end
@@ -41,6 +39,8 @@ module Spud
41
39
  end
42
40
  initializer :assets do
43
41
  Rails.application.config.assets.precompile += ['spud/admin/posts.css','spud/blog/validity.css']
42
+ Spud::Core.append_admin_javascripts('spud/admin/posts')
43
+ Spud::Core.append_admin_stylesheets('spud/admin/posts')
44
44
  end
45
45
  initializer :associations do
46
46
  SpudUser.class_eval do
@@ -1,5 +1,5 @@
1
1
  module Spud
2
2
  module Blog
3
- VERSION = "0.8.18"
3
+ VERSION = "0.9.0"
4
4
  end
5
5
  end
@@ -0,0 +1,36 @@
1
+ Mysql2::Error: Table 'spud_blog_development.spud_users' doesn't exist: SHOW FULL FIELDS FROM `spud_users`
2
+ Mysql2::Error: Table 'spud_blog_development.spud_users' doesn't exist: SHOW FULL FIELDS FROM `spud_users`
3
+ Mysql2::Error: Table 'spud_blog_development.spud_users' doesn't exist: SHOW FULL FIELDS FROM `spud_users`
4
+  (153.8ms) CREATE TABLE `schema_migrations` (`version` varchar(255) NOT NULL) ENGINE=InnoDB
5
+  (287.7ms) CREATE UNIQUE INDEX `unique_schema_migrations` ON `schema_migrations` (`version`)
6
+  (0.2ms) SELECT `schema_migrations`.`version` FROM `schema_migrations` 
7
+ Migrating to CreateSpudPosts (20120125180945)
8
+  (163.8ms) CREATE TABLE `spud_posts` (`id` int(11) DEFAULT NULL auto_increment PRIMARY KEY, `spud_user_id` int(11), `title` varchar(255), `content` text, `comments_enabled` tinyint(1) DEFAULT 0, `visible` tinyint(1) DEFAULT 1, `published_at` datetime, `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL) ENGINE=InnoDB
9
+  (225.6ms) CREATE INDEX `index_spud_posts_on_spud_user_id` ON `spud_posts` (`spud_user_id`)
10
+  (178.6ms) CREATE INDEX `index_spud_posts_on_visible` ON `spud_posts` (`visible`)
11
+  (0.5ms) INSERT INTO `schema_migrations` (`version`) VALUES ('20120125180945')
12
+ Migrating to CreateSpudPostCategories (20120125181022)
13
+  (214.2ms) CREATE TABLE `spud_post_categories` (`id` int(11) DEFAULT NULL auto_increment PRIMARY KEY, `name` varchar(255), `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL) ENGINE=InnoDB
14
+  (209.6ms) CREATE TABLE `spud_post_categories_posts` (`spud_post_id` int(11), `spud_post_category_id` int(11)) ENGINE=InnoDB
15
+  (182.2ms) CREATE INDEX `index_spud_post_categories_posts_on_spud_post_category_id` ON `spud_post_categories_posts` (`spud_post_category_id`)
16
+  (0.6ms) INSERT INTO `schema_migrations` (`version`) VALUES ('20120125181022')
17
+ Migrating to CreateSpudPostComments (20120125181359)
18
+  (171.4ms) CREATE TABLE `spud_post_comments` (`id` int(11) DEFAULT NULL auto_increment PRIMARY KEY, `spud_post_id` int(11), `author` varchar(255), `content` text, `approved` tinyint(1) DEFAULT 0, `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL) ENGINE=InnoDB
19
+  (237.9ms) CREATE INDEX `index_spud_post_comments_on_spud_post_id` ON `spud_post_comments` (`spud_post_id`)
20
+  (227.0ms) CREATE INDEX `index_spud_post_comments_on_approved` ON `spud_post_comments` (`approved`)
21
+  (0.5ms) INSERT INTO `schema_migrations` (`version`) VALUES ('20120125181359')
22
+ Migrating to AddUrlToSpudPosts (20120127143054)
23
+  (239.3ms) ALTER TABLE `spud_posts` ADD `url_name` varchar(255)
24
+  (234.5ms) CREATE INDEX `index_spud_posts_on_url_name` ON `spud_posts` (`url_name`)
25
+  (0.6ms) INSERT INTO `schema_migrations` (`version`) VALUES ('20120127143054')
26
+ Migrating to AddUrlToSpudPostCategories (20120127144942)
27
+  (196.9ms) ALTER TABLE `spud_post_categories` ADD `parent_id` int(11) DEFAULT 0
28
+  (220.7ms) ALTER TABLE `spud_post_categories` ADD `url_name` varchar(255)
29
+  (179.0ms) CREATE INDEX `index_spud_post_categories_on_parent_id` ON `spud_post_categories` (`parent_id`)
30
+  (178.4ms) CREATE INDEX `index_spud_post_categories_on_url_name` ON `spud_post_categories` (`url_name`)
31
+  (0.6ms) INSERT INTO `schema_migrations` (`version`) VALUES ('20120127144942')
32
+ Migrating to AddIsNewsToSpudPosts (20120210165540)
33
+  (207.1ms) ALTER TABLE `spud_posts` ADD `is_news` tinyint(1) DEFAULT 0
34
+  (212.3ms) CREATE INDEX `index_spud_posts_on_is_news` ON `spud_posts` (`is_news`)
35
+  (0.8ms) INSERT INTO `schema_migrations` (`version`) VALUES ('20120210165540')
36
+  (0.2ms) SELECT `schema_migrations`.`version` FROM `schema_migrations`