spud_blog 0.2.2 → 0.4.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.
- data/app/assets/javascripts/spud/blog.js +41 -0
- data/app/controllers/blog_controller.rb +22 -18
- data/app/controllers/news_controller.rb +23 -19
- data/app/helpers/blog_helper.rb +4 -3
- data/app/models/spud_post.rb +12 -4
- data/app/views/blog/index.html.erb +4 -10
- data/app/views/news/index.html.erb +4 -10
- data/app/views/spud/admin/posts/new.html.erb +1 -1
- data/config/routes.rb +46 -16
- data/lib/generators/spud/blog/views_generator.rb +19 -0
- data/lib/scripts/random_data.rb +31 -0
- data/lib/spud_blog/configuration.rb +3 -1
- data/lib/spud_blog/engine.rb +5 -0
- metadata +9 -7
- data/app/assets/javascripts/news.js +0 -2
@@ -0,0 +1,41 @@
|
|
1
|
+
Spud = (typeof(Spud) == 'undefined') ? {} : Spud;
|
2
|
+
|
3
|
+
Spud.Blog = new function(){
|
4
|
+
|
5
|
+
var self = this;
|
6
|
+
|
7
|
+
this.init = function(){
|
8
|
+
$('.spud_blog_filter_form').live('submit', self.didSubmitFilterForm)
|
9
|
+
};
|
10
|
+
|
11
|
+
this.didSubmitFilterForm = function(event){
|
12
|
+
event.preventDefault();
|
13
|
+
var form = $(this);
|
14
|
+
var base = form.attr('action');
|
15
|
+
var url = '';
|
16
|
+
|
17
|
+
// find filter values
|
18
|
+
var category_select = $(this).find('select[rel=category]');
|
19
|
+
if(category_select){
|
20
|
+
var category = category_select.val();
|
21
|
+
}
|
22
|
+
var archive_select = $(this).find('select[rel=archive]');
|
23
|
+
if(archive_select){
|
24
|
+
var archive = archive_select.val();
|
25
|
+
}
|
26
|
+
|
27
|
+
// build url and redirect
|
28
|
+
if(category && archive){
|
29
|
+
url = '/category/' + category + '/' + archive;
|
30
|
+
}
|
31
|
+
else if(category){
|
32
|
+
url = '/category/' + category;
|
33
|
+
}
|
34
|
+
else if(archive){
|
35
|
+
url = '/archive/' + archive;
|
36
|
+
}
|
37
|
+
window.location = base + url;
|
38
|
+
};
|
39
|
+
};
|
40
|
+
|
41
|
+
$(document).ready(Spud.Blog.init);
|
@@ -9,30 +9,34 @@ class BlogController < ApplicationController
|
|
9
9
|
respond_with @posts
|
10
10
|
end
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
if
|
12
|
+
# The sole purpose of this action is to redirect from a POST to an seo-friendly url
|
13
|
+
def filter
|
14
|
+
if !params[:category_url_name].blank? && !params[:archive_date].blank?
|
15
|
+
redirect_to blog_category_archive_path(params[:category_url_name], params[:archive_date])
|
16
|
+
elsif !params[:category_url_name].blank?
|
17
|
+
redirect_to blog_category_path(params[:category_url_name])
|
18
|
+
elsif !params[:archive_date].blank?
|
19
|
+
redirect_to blog_archive_path(params[:archive_date])
|
20
|
+
else
|
15
21
|
redirect_to blog_path
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def category
|
26
|
+
if @post_category = SpudPostCategory.find_by_url_name(params[:category_url_name])
|
27
|
+
@posts = @post_category.posts_with_children.public_blog_posts(params[:page], Spud::Blog.config.posts_per_page).from_archive(params[:archive_date])
|
16
28
|
else
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
respond_with @posts do |format|
|
22
|
-
format.html { render 'index' }
|
23
|
-
end
|
24
|
-
end
|
29
|
+
@posts = []
|
30
|
+
end
|
31
|
+
respond_with @posts do |format|
|
32
|
+
format.html { render 'index' }
|
25
33
|
end
|
26
34
|
end
|
27
35
|
|
28
36
|
def archive
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
@posts = SpudPost.public_blog_posts(params[:page], Spud::Blog.config.posts_per_page).from_archive(params[:archive_date])
|
33
|
-
respond_with @posts do |format|
|
34
|
-
format.html { render 'index' }
|
35
|
-
end
|
37
|
+
@posts = SpudPost.public_blog_posts(params[:page], Spud::Blog.config.posts_per_page).from_archive(params[:archive_date])
|
38
|
+
respond_with @posts do |format|
|
39
|
+
format.html { render 'index' }
|
36
40
|
end
|
37
41
|
end
|
38
42
|
|
@@ -1,37 +1,41 @@
|
|
1
1
|
class NewsController < ApplicationController
|
2
2
|
|
3
3
|
respond_to :html, :xml, :json
|
4
|
-
layout Spud::Blog.
|
4
|
+
layout Spud::Blog.news_layout
|
5
5
|
|
6
6
|
def index
|
7
7
|
@posts = SpudPost.public_news_posts(params[:page], Spud::Blog.config.posts_per_page)
|
8
8
|
respond_with @posts
|
9
9
|
end
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
if
|
11
|
+
# The sole purpose of this action is to redirect from a POST to an seo-friendly url
|
12
|
+
def filter
|
13
|
+
if !params[:category_url_name].blank? && !params[:archive_date].blank?
|
14
|
+
redirect_to news_category_archive_path(params[:category_url_name], params[:archive_date])
|
15
|
+
elsif !params[:category_url_name].blank?
|
16
|
+
redirect_to news_category_path(params[:category_url_name])
|
17
|
+
elsif !params[:archive_date].blank?
|
18
|
+
redirect_to news_archive_path(params[:archive_date])
|
19
|
+
else
|
14
20
|
redirect_to news_path
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def category
|
25
|
+
if @post_category = SpudPostCategory.find_by_url_name(params[:category_url_name])
|
26
|
+
@posts = @post_category.posts_with_children.public_news_posts(params[:page], Spud::Blog.config.posts_per_page).from_archive(params[:archive_date])
|
15
27
|
else
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
respond_with @posts do |format|
|
21
|
-
format.html { render 'index' }
|
22
|
-
end
|
23
|
-
end
|
28
|
+
@posts = []
|
29
|
+
end
|
30
|
+
respond_with @posts do |format|
|
31
|
+
format.html { render 'index' }
|
24
32
|
end
|
25
33
|
end
|
26
34
|
|
27
35
|
def archive
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
@posts = SpudPost.public_news_posts(params[:page], Spud::Blog.config.posts_per_page).from_archive(params[:archive_date])
|
32
|
-
respond_with @posts do |format|
|
33
|
-
format.html { render 'index' }
|
34
|
-
end
|
36
|
+
@posts = SpudPost.public_news_posts(params[:page], Spud::Blog.config.posts_per_page).from_archive(params[:archive_date])
|
37
|
+
respond_with @posts do |format|
|
38
|
+
format.html { render 'index' }
|
35
39
|
end
|
36
40
|
end
|
37
41
|
|
data/app/helpers/blog_helper.rb
CHANGED
@@ -1,16 +1,17 @@
|
|
1
1
|
module BlogHelper
|
2
2
|
|
3
3
|
def spud_post_category_select
|
4
|
-
select_tag 'category_url_name',
|
4
|
+
return select_tag 'category_url_name',
|
5
5
|
options_for_select(SpudPostCategory.options_for_categories(:value => :url_name), params[:category_url_name]),
|
6
|
-
:include_blank => true
|
6
|
+
:include_blank => true,
|
7
|
+
:rel => 'category'
|
7
8
|
end
|
8
9
|
|
9
10
|
def spud_post_archive_select
|
10
11
|
dates = SpudPost.months_with_public_posts
|
11
12
|
return select_tag 'archive_date', options_for_select(SpudPost.months_with_public_posts.collect{ |d|
|
12
13
|
[d.strftime('%B %Y'), d.strftime('%Y-%b').downcase]
|
13
|
-
}, params[:archive_date]), :include_blank => true
|
14
|
+
}, params[:archive_date]), :include_blank => true, :rel => 'archive'
|
14
15
|
end
|
15
16
|
|
16
17
|
end
|
data/app/models/spud_post.rb
CHANGED
@@ -12,7 +12,9 @@ class SpudPost < ActiveRecord::Base
|
|
12
12
|
before_validation :set_url_name
|
13
13
|
|
14
14
|
def self.public_posts(page, per_page)
|
15
|
-
|
15
|
+
|
16
|
+
return where('visible = ? AND published_at <= ?', true,Time.now.utc).order('published_at desc').includes(:comments, :categories).paginate(:page => page, :per_page => per_page)
|
17
|
+
|
16
18
|
end
|
17
19
|
|
18
20
|
def self.public_blog_posts(page, per_page)
|
@@ -24,7 +26,7 @@ class SpudPost < ActiveRecord::Base
|
|
24
26
|
end
|
25
27
|
|
26
28
|
def self.recent_posts(limit=5)
|
27
|
-
return where('visible =
|
29
|
+
return where('visible = ? AND published_at <= ?', true, Time.now.utc).order('published_at desc').limit(limit)
|
28
30
|
end
|
29
31
|
|
30
32
|
def self.recent_blog_posts(limit=5)
|
@@ -44,6 +46,8 @@ class SpudPost < ActiveRecord::Base
|
|
44
46
|
end
|
45
47
|
end
|
46
48
|
|
49
|
+
#def self.posts_for_category_archive(category, )
|
50
|
+
|
47
51
|
# Returns an array of Date objects for months with public posts
|
48
52
|
def self.months_with_public_posts
|
49
53
|
# Select
|
@@ -54,8 +58,12 @@ class SpudPost < ActiveRecord::Base
|
|
54
58
|
# And published_at < '2012-01-30'
|
55
59
|
# Group By published_month, published_year
|
56
60
|
# Order By published_year desc, published_month desc
|
57
|
-
records = select('Month
|
58
|
-
|
61
|
+
records = SpudPost.select('Extract(Month from published_at) as published_month, Extract(Year from published_at) as published_year').where('visible = ? AND published_at < ?', true, DateTime.now).group('published_month, published_year').order('published_year desc, published_month desc')
|
62
|
+
begin
|
63
|
+
return records.collect{ |r| Date.new(r[:published_year].to_i, r[:published_month].to_i) }
|
64
|
+
rescue Exception => e
|
65
|
+
logger.fatal "Exception occurred while fetching post archive dates:\n #{e.to_s}"
|
66
|
+
end
|
59
67
|
end
|
60
68
|
|
61
69
|
def display_date
|
@@ -1,14 +1,8 @@
|
|
1
|
-
<div id="
|
2
|
-
<%= form_tag '
|
3
|
-
<label>
|
1
|
+
<div id="spud_blog_filters">
|
2
|
+
<%= form_tag blog_path, :class => 'spud_blog_filter_form' do %>
|
3
|
+
<label>Category:</label>
|
4
4
|
<%= spud_post_category_select %>
|
5
|
-
<
|
6
|
-
<% end %>
|
7
|
-
</div>
|
8
|
-
|
9
|
-
<div id="spud_blog_archive">
|
10
|
-
<%= form_tag '/blog/archive' do %>
|
11
|
-
<label>Filter By Month:</label>
|
5
|
+
<label>Month:</label>
|
12
6
|
<%= spud_post_archive_select %>
|
13
7
|
<input type="submit" value="Submit" />
|
14
8
|
<% end %>
|
@@ -1,14 +1,8 @@
|
|
1
|
-
<div id="
|
2
|
-
<%= form_tag '
|
3
|
-
<label>
|
1
|
+
<div id="spud_news_filters">
|
2
|
+
<%= form_tag news_path, :class => 'spud_blog_filter_form' do %>
|
3
|
+
<label>Category:</label>
|
4
4
|
<%= spud_post_category_select %>
|
5
|
-
<
|
6
|
-
<% end %>
|
7
|
-
</div>
|
8
|
-
|
9
|
-
<div id="spud_news_archive">
|
10
|
-
<%= form_tag '/news/archive' do %>
|
11
|
-
<label>Filter By Month:</label>
|
5
|
+
<label>Month:</label>
|
12
6
|
<%= spud_post_archive_select %>
|
13
7
|
<input type="submit" value="Submit" />
|
14
8
|
<% end %>
|
@@ -1,3 +1,3 @@
|
|
1
|
-
<%= form_for @post, :url =>
|
1
|
+
<%= form_for @post, :url => spud_admin_post_path, :html => {:class => 'right_aligned_form'} do |f| %>
|
2
2
|
<%= render :partial => 'form', :locals => {:f => f} %>
|
3
3
|
<% end %>
|
data/config/routes.rb
CHANGED
@@ -18,18 +18,33 @@ Rails.application.routes.draw do
|
|
18
18
|
scope Spud::Blog.config.blog_path do
|
19
19
|
|
20
20
|
# Blog Post Categories
|
21
|
-
get 'category/:category_url_name',
|
22
|
-
|
23
|
-
|
21
|
+
get 'category/:category_url_name(/page/:page)',
|
22
|
+
:controller => 'blog',
|
23
|
+
:action => 'category',
|
24
|
+
:as => 'blog_category',
|
25
|
+
:defaults => {:page => 1}
|
26
|
+
get 'category/:category_url_name/:archive_date(/page/:page)',
|
27
|
+
:controller => 'blog',
|
28
|
+
:action => 'category',
|
29
|
+
:as => 'blog_category_archive',
|
30
|
+
:defaults => {:page => 1}
|
24
31
|
|
25
32
|
# Blog Post Archives
|
26
|
-
get 'archive/:archive_date',
|
27
|
-
|
28
|
-
|
33
|
+
get 'archive/:archive_date(/page/:page)',
|
34
|
+
:controller => 'blog',
|
35
|
+
:action => 'archive',
|
36
|
+
:as => 'blog_archive',
|
37
|
+
:defaults => {:page => 1}
|
38
|
+
|
39
|
+
# Category/Archive filtering
|
40
|
+
post '/', :controller => 'blog', :action => 'filter'
|
29
41
|
|
30
42
|
# Blog Posts
|
31
|
-
get '/',
|
32
|
-
|
43
|
+
get '/(page/:page)',
|
44
|
+
:controller => 'blog',
|
45
|
+
:action => 'index',
|
46
|
+
:as => 'blog',
|
47
|
+
:defaults => {:page => 1}
|
33
48
|
resources :blog_posts, :path => '/', :controller => 'blog', :only => [:show] do
|
34
49
|
post '/', :on => :member, :controller => 'blog', :action => 'create_comment'
|
35
50
|
end
|
@@ -40,18 +55,33 @@ Rails.application.routes.draw do
|
|
40
55
|
scope Spud::Blog.config.news_path do
|
41
56
|
|
42
57
|
# News Post Categories
|
43
|
-
get 'category/:category_url_name',
|
44
|
-
|
45
|
-
|
58
|
+
get 'category/:category_url_name(/page/:page)',
|
59
|
+
:controller => 'news',
|
60
|
+
:action => 'category',
|
61
|
+
:as => 'news_category',
|
62
|
+
:defaults => {:page => 1}
|
63
|
+
get 'category/:category_url_name/:archive_date(/page/:page)',
|
64
|
+
:controller => 'news',
|
65
|
+
:action => 'category',
|
66
|
+
:as => 'news_category_archive',
|
67
|
+
:defaults => {:page => 1}
|
46
68
|
|
47
69
|
# News Post Archives
|
48
|
-
get 'archive/:archive_date',
|
49
|
-
|
50
|
-
|
70
|
+
get 'archive/:archive_date(/page/:page)',
|
71
|
+
:controller => 'news',
|
72
|
+
:action => 'archive',
|
73
|
+
:as => 'news_archive',
|
74
|
+
:defaults => {:page => 1}
|
75
|
+
|
76
|
+
# Category/Archive filtering
|
77
|
+
post '/', :controller => 'news', :action => 'filter'
|
51
78
|
|
52
79
|
# News Posts
|
53
|
-
get '/',
|
54
|
-
|
80
|
+
get '/(page/:page)',
|
81
|
+
:controller => 'news',
|
82
|
+
:action => 'index',
|
83
|
+
:as => 'news',
|
84
|
+
:defaults => {:page => 1}
|
55
85
|
resources :news_posts, :path => '/', :controller => 'news', :only => [:show]
|
56
86
|
end
|
57
87
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'rails/generators/migration'
|
2
|
+
|
3
|
+
class Spud::Blog::ViewsGenerator < ::Rails::Generators::Base
|
4
|
+
|
5
|
+
source_root File.expand_path('../../../../../app/views', __FILE__)
|
6
|
+
|
7
|
+
def install
|
8
|
+
if Spud::Blog.config.blog_enabled
|
9
|
+
copy_file 'blog/_comment.html.erb', 'app/views/blog/_comment.html.erb'
|
10
|
+
copy_file 'blog/_comment_form.html.erb', 'app/views/blog/_comment_form.html.erb'
|
11
|
+
copy_file 'blog/index.html.erb', 'app/views/blog/index.html.erb'
|
12
|
+
copy_file 'blog/show.html.erb', 'app/views/blog/show.html.erb'
|
13
|
+
end
|
14
|
+
if Spud::Blog.config.news_enabled
|
15
|
+
copy_file 'news/index.html.erb', 'app/views/news/index.html.erb'
|
16
|
+
copy_file 'news/show.html.erb', 'app/views/news/show.html.erb'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# Quick script for faking up some data
|
2
|
+
|
3
|
+
def random_word
|
4
|
+
chars = 'abcdefghjkmnpqrstuvwxyz'
|
5
|
+
return (1..6).collect{ chars[rand(chars.length)] }.join('').capitalize
|
6
|
+
end
|
7
|
+
|
8
|
+
def random_title
|
9
|
+
return (1..4).collect{ random_word }.join(' ')
|
10
|
+
end
|
11
|
+
|
12
|
+
def random_time
|
13
|
+
return Time.at(1.year.ago + rand * (Time.now.to_f - 1.year.ago.to_f))
|
14
|
+
end
|
15
|
+
|
16
|
+
100.times do
|
17
|
+
post = SpudPost.create({
|
18
|
+
:title => random_title,
|
19
|
+
:content => 'Hello, World!',
|
20
|
+
:published_at => random_time,
|
21
|
+
:visible => 1,
|
22
|
+
:spud_user_id => 1
|
23
|
+
})
|
24
|
+
end
|
25
|
+
|
26
|
+
category_ids = SpudPostCategory.all.collect{ |c| c.id }
|
27
|
+
|
28
|
+
SpudPost.all.each do |p|
|
29
|
+
p.category_ids = [category_ids[rand(category_ids.length)]]
|
30
|
+
p.save
|
31
|
+
end
|
@@ -1,8 +1,10 @@
|
|
1
1
|
module Spud
|
2
2
|
module Blog
|
3
3
|
include ActiveSupport::Configurable
|
4
|
-
config_accessor :base_layout, :blog_enabled, :news_enabled, :posts_per_page, :blog_path, :news_path,:enable_sitemap
|
4
|
+
config_accessor :base_layout,:news_layout, :blog_enabled, :news_enabled, :posts_per_page, :blog_path, :news_path,:enable_sitemap
|
5
|
+
|
5
6
|
self.base_layout = 'application'
|
7
|
+
self.news_layout = nil
|
6
8
|
self.news_enabled = false
|
7
9
|
self.blog_enabled = true
|
8
10
|
self.posts_per_page = 5
|
data/lib/spud_blog/engine.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spud_blog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-02-
|
12
|
+
date: 2012-02-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: spud_core
|
16
|
-
requirement: &
|
16
|
+
requirement: &70273322548400 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 0.5.2
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70273322548400
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: will_paginate
|
27
|
-
requirement: &
|
27
|
+
requirement: &70273322547920 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,18 +32,18 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70273322547920
|
36
36
|
description:
|
37
37
|
email: greg@westlakedesign.com
|
38
38
|
executables: []
|
39
39
|
extensions: []
|
40
40
|
extra_rdoc_files: []
|
41
41
|
files:
|
42
|
-
- app/assets/javascripts/news.js
|
43
42
|
- app/assets/javascripts/spud/admin/news_posts.js
|
44
43
|
- app/assets/javascripts/spud/admin/post_categories.js
|
45
44
|
- app/assets/javascripts/spud/admin/post_comments.js
|
46
45
|
- app/assets/javascripts/spud/admin/posts.js
|
46
|
+
- app/assets/javascripts/spud/blog.js
|
47
47
|
- app/assets/javascripts/spud/blog/sitemaps.js
|
48
48
|
- app/assets/stylesheets/news.css
|
49
49
|
- app/assets/stylesheets/spud/admin/news_posts.css
|
@@ -92,6 +92,8 @@ files:
|
|
92
92
|
- config/application.rb
|
93
93
|
- config/boot.rb
|
94
94
|
- config/routes.rb
|
95
|
+
- lib/generators/spud/blog/views_generator.rb
|
96
|
+
- lib/scripts/random_data.rb
|
95
97
|
- lib/spud_blog.rb
|
96
98
|
- lib/spud_blog/configuration.rb
|
97
99
|
- lib/spud_blog/engine.rb
|