refinerycms-blog 0.9.8.0.rc1 → 0.9.8.0.rc2

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/Gemfile ADDED
@@ -0,0 +1 @@
1
+ gem 'filters_spam', '~> 0.2'
@@ -0,0 +1,9 @@
1
+ GEM
2
+ specs:
3
+ filters_spam (0.2)
4
+
5
+ PLATFORMS
6
+ ruby
7
+
8
+ DEPENDENCIES
9
+ filters_spam (~> 0.2)
@@ -2,6 +2,7 @@ class BlogPostsController < ApplicationController
2
2
 
3
3
  before_filter :find_all_blog_posts, :find_all_blog_categories
4
4
  before_filter :find_page
5
+ before_filter :find_blog_post, :only => [:show, :comment]
5
6
 
6
7
  def index
7
8
  # you can use meta fields from your model instead (e.g. browser_title)
@@ -10,15 +11,34 @@ class BlogPostsController < ApplicationController
10
11
  end
11
12
 
12
13
  def show
13
- @blog_post = BlogPost.live.find(params[:id])
14
+ @blog_comment = BlogComment.new
14
15
 
15
16
  # you can use meta fields from your model instead (e.g. browser_title)
16
17
  # by swapping @page for @blogs in the line below:
17
18
  present(@page)
18
19
  end
19
20
 
21
+ def comment
22
+ if (@blog_comment = @blog_post.comments.create(params[:blog_comment])).valid?
23
+ if BlogComment::Moderation.enabled?
24
+ flash[:notice] = t('.comments.thank_you_moderated')
25
+ redirect_back_or_default blog_post_url(params[:id])
26
+ else
27
+ flash[:notice] = t('.comments.thank_you')
28
+ redirect_to blog_post_url(params[:id],
29
+ :anchor => "comment-#{@blog_comment.to_param}")
30
+ end
31
+ else
32
+ render :action => 'show'
33
+ end
34
+ end
35
+
20
36
  protected
21
37
 
38
+ def find_blog_post
39
+ @blog_post = BlogPost.live.find(params[:id])
40
+ end
41
+
22
42
  def find_all_blog_posts
23
43
  unless params[:category_id].present?
24
44
  @blog_posts = BlogPost.live
@@ -1,13 +1,29 @@
1
1
  class BlogComment < ActiveRecord::Base
2
2
 
3
+ filters_spam :author_field => :name,
4
+ :email_field => :email,
5
+ :message_field => :body
6
+
3
7
  belongs_to :post, :class_name => 'BlogPost'
4
8
 
5
- acts_as_indexed :fields => [:name, :email, :body]
9
+ acts_as_indexed :fields => [:name, :email, :message]
10
+
11
+ alias_attribute :message, :body
12
+
13
+ validates_presence_of :name, :message
14
+ validates_format_of :email,
15
+ :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
6
16
 
7
17
  named_scope :unmoderated, :conditions => {:state => nil}
8
18
  named_scope :approved, :conditions => {:state => 'approved'}
9
19
  named_scope :rejected, :conditions => {:state => 'rejected'}
10
20
 
21
+ before_create do |comment|
22
+ unless BlogComment::Moderation.enabled?
23
+ comment.state = comment.spam? ? 'rejected' : 'approved'
24
+ end
25
+ end
26
+
11
27
  module Moderation
12
28
  class << self
13
29
  def enabled?
@@ -20,4 +20,12 @@ class BlogPost < ActiveRecord::Base
20
20
  }.compact
21
21
  end
22
22
 
23
+ class << self
24
+ def comments_allowed?
25
+ RefinerySetting.find_or_set(:comments_allowed, true, {
26
+ :scoping => :blog
27
+ })
28
+ end
29
+ end
30
+
23
31
  end
@@ -0,0 +1,17 @@
1
+ <li class='clearfix record <%= cycle("on", "on-hover") %>' id="<%= dom_id(comment) -%>">
2
+ <span class='title'>
3
+ <%=h comment.name %>
4
+ <span class="preview"> - <%= truncate(comment.message, :length => 75) %></span>
5
+ </span>
6
+ <span class='actions'>
7
+ <%= link_to refinery_icon_tag("application_go.png"), blog_post_url(comment.post,
8
+ :anchor => "comment-#{comment.to_param}"),
9
+ :title => t('.view_live'),
10
+ :target => "_blank" %>
11
+ <%= link_to refinery_icon_tag("application_edit.png"), edit_admin_blog_comment_path(comment),
12
+ :title => t('.edit') %>
13
+ <%= link_to refinery_icon_tag("delete.png"), admin_blog_comment_path(comment),
14
+ :class => "cancel confirm-delete",
15
+ :title => t('.delete') %>
16
+ </span>
17
+ </li>
@@ -0,0 +1,7 @@
1
+ <ul id='sortable_list'>
2
+ <%= render :partial => 'comment', :collection => @blog_comments %>
3
+ </ul>
4
+ <%= render :partial => "/shared/admin/sortable_list",
5
+ :locals => {
6
+ :continue_reordering => (defined?(continue_reordering) ? continue_reordering : true)
7
+ } %>
@@ -3,24 +3,28 @@
3
3
  <% if searching? %>
4
4
  <h2><%= t('shared.admin.search.results_for', :query => params[:search]) %></h2>
5
5
  <% if @blog_comments.any? %>
6
- <%= will_paginate @blog_comments %>
6
+ <%=# will_paginate @blog_comments
7
+ %>
7
8
 
8
9
  <ul>
9
10
  <%= render :partial => "blog_comments",
10
11
  :collection => @blog_comments %>
11
12
  </ul>
12
13
 
13
- <%= will_paginate @blog_comments %>
14
+ <%=# will_paginate @blog_comments
15
+ %>
14
16
  <% else %>
15
17
  <p><%= t('admin.search_no_results') %></p>
16
18
  <% end %>
17
19
  <% else %>
18
20
  <% if @blog_comments.any? %>
19
- <%= will_paginate @blog_comments %>
21
+ <%=# will_paginate @blog_comments
22
+ %>
20
23
 
21
24
  <%= render :partial => "sortable_list" %>
22
25
 
23
- <%= will_paginate @blog_comments %>
26
+ <%=# will_paginate @blog_comments
27
+ %>
24
28
  <% else %>
25
29
  <h3>
26
30
  <%= t('.no_items_yet',
@@ -2,7 +2,7 @@
2
2
  <ul class='categories'>
3
3
  <% @blog_categories.each do |category| %>
4
4
  <li>
5
- <%= category.title %>
5
+ <%= link_to category.title, blog_category_url(category) %>
6
6
  </li>
7
7
  <% end %>
8
8
  </ul>
@@ -4,6 +4,7 @@
4
4
  <%= @blog_post.body %>
5
5
 
6
6
  <% if (categories = @blog_post.categories).any? %>
7
+ <hr />
7
8
  <div class='post_categories'>
8
9
  <span class='filed_in'><%= t('.filed_in') %></span>
9
10
  <ul>
@@ -15,6 +16,43 @@
15
16
  </ul>
16
17
  </div>
17
18
  <% end %>
19
+
20
+ <% if (comments = @blog_post.comments.approved).any? %>
21
+ <hr />
22
+ <h2><%= t('.comments.title') %></h2>
23
+ <% comments.each do |comment| %>
24
+ <div class='blog_comment_message'>
25
+ <p>
26
+ <%= comment.message.to_s.gsub("\r\n\r\n", "</p><p>").gsub("\r\n", "<br/>") %>
27
+ </p>
28
+ </div>
29
+ <p class='blog_comment_author'>
30
+ <%= t('.comments.by', :who => comment.name) %>
31
+ <%= t('.comments.time_ago', :time => time_ago_in_words(comment.created_at)) %>
32
+ </p>
33
+ <% end %>
34
+ <% end %>
35
+
36
+ <% if BlogPost.comments_allowed? %>
37
+ <hr />
38
+ <% form_for [:blog_post, @blog_comment] do |f| %>
39
+ <div class='field'>
40
+ <%= f.label :name %>
41
+ <%= f.text_field :name %>
42
+ </div>
43
+ <div class='field'>
44
+ <%= f.label :email %>
45
+ <%= f.text_field :email %>
46
+ </div>
47
+ <div class='field message_field'>
48
+ <%= f.label :message %>
49
+ <%= f.text_area :message, :rows => 6 %>
50
+ </div>
51
+ <div class='field form-actions'>
52
+ <%= f.submit t('.submit') %>
53
+ </div>
54
+ <% end %>
55
+ <% end %>
18
56
  <% end %>
19
57
 
20
58
  <% content_for :body_content_right do %>
@@ -55,7 +55,12 @@ en:
55
55
  index:
56
56
  read_more: Read more
57
57
  show:
58
+ comments:
59
+ title: Comments
60
+ by: Posted by {{who}}
61
+ time_ago: '{{time}} ago'
58
62
  other: Other Blog Posts
59
63
  filed_in: Filed in
60
64
  created_at_title: Publishing Date
61
65
  created_at: Posted on {{when}}
66
+ submit: Send comment
@@ -1,20 +1,25 @@
1
- ActionController::Routing::Routes.draw do |map|
2
- map.blog_post '/blog', :controller => :blog_posts, :action => :index
3
- map.blog_post '/blog/:id', :controller => :blog_posts, :action => :show
4
- map.blog_category '/blog/categories/:category_id', :controller => :blog_posts, :action => :index
1
+ if Rails.version < '3.0.0'
2
+ ActionController::Routing::Routes.draw do |map|
3
+ map.blog_post '/blog', :controller => :blog_posts, :action => :index
4
+ map.blog_post '/blog/:id', :controller => :blog_posts, :action => :show
5
+ map.blog_category '/blog/categories/:category_id', :controller => :blog_posts, :action => :index
6
+ map.blog_post_blog_comments '/blog/:id/comments', :controller => :blog_posts, :action => :comment
5
7
 
6
- map.namespace(:admin, :path_prefix => 'refinery') do |admin|
7
- admin.namespace :blog do |blog|
8
- blog.resources :posts
9
- blog.resources :categories
10
- blog.resources :comments, :collection => {
11
- :approved => :get,
12
- :rejected => :get
13
- }
14
- blog.resources :settings, :collection => {
15
- :notification_recipients => [:get, :post],
16
- :moderation => :get
17
- }
8
+ map.namespace(:admin, :path_prefix => 'refinery') do |admin|
9
+ admin.namespace :blog do |blog|
10
+ blog.resources :posts
11
+ blog.resources :categories
12
+ blog.resources :comments, :collection => {
13
+ :approved => :get,
14
+ :rejected => :get
15
+ }
16
+ blog.resources :settings, :collection => {
17
+ :notification_recipients => [:get, :post],
18
+ :moderation => :get
19
+ }
20
+ end
18
21
  end
19
22
  end
20
- end
23
+ else
24
+ # route for rails3 here.
25
+ end
@@ -43,11 +43,12 @@ class RefineryBlogGenerator < Rails::Generator::NamedBase
43
43
  },{
44
44
  :table_name => 'blog_comments',
45
45
  :attributes => [
46
+ Rails::Generator::GeneratedAttribute.new('blog_post_id', 'integer'),
47
+ Rails::Generator::GeneratedAttribute.new('spam', 'boolean'),
46
48
  Rails::Generator::GeneratedAttribute.new('name', 'string'),
47
49
  Rails::Generator::GeneratedAttribute.new('email', 'string'),
48
50
  Rails::Generator::GeneratedAttribute.new('body', 'text'),
49
51
  Rails::Generator::GeneratedAttribute.new('state', 'string'),
50
- Rails::Generator::GeneratedAttribute.new('blog_post_id', 'integer')
51
52
  ], :id => true
52
53
  },{
53
54
  :table_name => 'blog_categories',
@@ -17,7 +17,8 @@ Gem::Specification.new do |s|
17
17
  s.homepage = %q{http://refinerycms.com}
18
18
  s.authors = %w(Resolve\\ Digital Neoteric\\ Design)
19
19
  s.require_paths = %w(lib)
20
- s.add_dependency('refinerycms', '~> 0.9.7.12')
20
+ s.add_dependency 'refinerycms', '~> 0.9.7.13'
21
+ s.add_dependency 'filters_spam', '~> 0.2'
21
22
 
22
23
  s.files = %w(
23
24
  #{files.join("\n ")}
@@ -1,8 +1,28 @@
1
+ require 'filters_spam' if defined?(Bundler)
2
+
1
3
  module Refinery
2
4
  module Blog
5
+
6
+ class Engine < Rails::Engine
7
+ initializer 'blog serves assets' do
8
+ app.middleware.insert_after ::ActionDispatch::Static, ::ActionDispatch::Static, "#{root}/public"
9
+ end
10
+
11
+ config.after_initialize do
12
+ Refinery::Plugin.register do |plugin|
13
+ plugin.name = "refinerycms_blog"
14
+ plugin.url = {:controller => '/admin/blog/posts', :action => 'index'}
15
+ plugin.menu_match = /^\/?(admin|refinery)\/blog\/?(posts|comments|categories)?/
16
+ plugin.activity = {
17
+ :class => BlogPost
18
+ }
19
+ end
20
+ end
21
+ end if defined?(Rails::Engine)
22
+
3
23
  class << self
4
24
  def version
5
- %q{0.9.8.0.rc1}
25
+ %q{0.9.8.0.rc2}
6
26
  end
7
27
  end
8
28
  end
@@ -10,4 +10,7 @@
10
10
  margin: 0px;
11
11
  padding: 0px;
12
12
  display: inline;
13
+ }
14
+ .field.message_field label {
15
+ vertical-align: top;
13
16
  }
@@ -1,3 +1,5 @@
1
+ require File.expand_path('../../lib/refinerycms-blog', __FILE__)
2
+
1
3
  Refinery::Plugin.register do |plugin|
2
4
  plugin.name = "refinerycms_blog"
3
5
  plugin.url = {:controller => '/admin/blog/posts', :action => 'index'}
@@ -5,6 +7,4 @@ Refinery::Plugin.register do |plugin|
5
7
  plugin.activity = {
6
8
  :class => BlogPost
7
9
  }
8
-
9
- plugin.directory = directory # tell refinery where this plugin is located
10
10
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: refinerycms-blog
3
3
  version: !ruby/object:Gem::Version
4
- hash: 977940590
4
+ hash: 977940591
5
5
  prerelease: true
6
6
  segments:
7
7
  - 0
8
8
  - 9
9
9
  - 8
10
10
  - 0
11
- - rc1
12
- version: 0.9.8.0.rc1
11
+ - rc2
12
+ version: 0.9.8.0.rc2
13
13
  platform: ruby
14
14
  authors:
15
15
  - Resolve Digital
@@ -18,7 +18,7 @@ autorequire:
18
18
  bindir: bin
19
19
  cert_chain: []
20
20
 
21
- date: 2010-08-26 00:00:00 +12:00
21
+ date: 2010-08-31 00:00:00 +12:00
22
22
  default_executable:
23
23
  dependencies:
24
24
  - !ruby/object:Gem::Dependency
@@ -29,15 +29,30 @@ dependencies:
29
29
  requirements:
30
30
  - - ~>
31
31
  - !ruby/object:Gem::Version
32
- hash: 3
32
+ hash: 1
33
33
  segments:
34
34
  - 0
35
35
  - 9
36
36
  - 7
37
- - 12
38
- version: 0.9.7.12
37
+ - 13
38
+ version: 0.9.7.13
39
39
  type: :runtime
40
40
  version_requirements: *id001
41
+ - !ruby/object:Gem::Dependency
42
+ name: filters_spam
43
+ prerelease: false
44
+ requirement: &id002 !ruby/object:Gem::Requirement
45
+ none: false
46
+ requirements:
47
+ - - ~>
48
+ - !ruby/object:Gem::Version
49
+ hash: 15
50
+ segments:
51
+ - 0
52
+ - 2
53
+ version: "0.2"
54
+ type: :runtime
55
+ version_requirements: *id002
41
56
  description: A really straightforward open source Ruby on Rails blog engine designed for integration with RefineryCMS.
42
57
  email: info@refinerycms.com
43
58
  executables: []
@@ -62,6 +77,8 @@ files:
62
77
  - app/views/admin/blog/categories/edit.html.erb
63
78
  - app/views/admin/blog/categories/index.html.erb
64
79
  - app/views/admin/blog/categories/new.html.erb
80
+ - app/views/admin/blog/comments/_comment.html.erb
81
+ - app/views/admin/blog/comments/_sortable_list.html.erb
65
82
  - app/views/admin/blog/comments/index.html.erb
66
83
  - app/views/admin/blog/posts/_form.html.erb
67
84
  - app/views/admin/blog/posts/_post.html.erb
@@ -70,6 +87,8 @@ files:
70
87
  - app/views/admin/blog/posts/index.html.erb
71
88
  - app/views/admin/blog/posts/new.html.erb
72
89
  - app/views/admin/blog/settings/notification_recipients.html.erb
90
+ - app/views/blog_posts/_categories.html.erb
91
+ - app/views/blog_posts/_comments.html.erb
73
92
  - app/views/blog_posts/_side_bar.html.erb
74
93
  - app/views/blog_posts/index.html.erb
75
94
  - app/views/blog_posts/show.html.erb
@@ -77,6 +96,8 @@ files:
77
96
  - config/locales/nb.yml
78
97
  - config/locales/nl.yml
79
98
  - config/routes.rb
99
+ - Gemfile
100
+ - Gemfile.lock
80
101
  - generators/refinery_blog/refinery_blog_generator.rb
81
102
  - generators/refinery_blog/templates/migration.rb
82
103
  - generators/refinery_blog/templates/seed.rb