tb_blog 1.3.2 → 1.3.3

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 (47) hide show
  1. checksums.yaml +4 -4
  2. data/Readme.md +1 -15
  3. data/app/controllers/admin/posts_controller.rb +26 -2
  4. data/app/controllers/concerns/blog_url_helpers.rb +1 -10
  5. data/app/controllers/posts_controller.rb +0 -31
  6. data/app/helpers/admin/posts_helper.rb +12 -1
  7. data/app/helpers/blog_helper.rb +5 -0
  8. data/app/models/spud/spud_post_model.rb +18 -5
  9. data/app/views/admin/posts/_form.html.erb +6 -1
  10. data/app/views/admin/posts/index.html.erb +15 -7
  11. data/app/views/posts/_disqus.html.erb +18 -0
  12. data/app/views/posts/index.html.erb +8 -1
  13. data/app/views/posts/show.html.erb +4 -18
  14. data/config/routes.rb +1 -11
  15. data/db/migrate/20151015151133_add_custom_author_to_post.rb +5 -0
  16. data/db/migrate/20160216144708_add_identifier_to_spud_posts.rb +6 -0
  17. data/db/optional/20160216153113_drop_spud_post_comments.rb +29 -0
  18. data/lib/spud_blog/configuration.rb +3 -6
  19. data/lib/spud_blog/engine.rb +4 -12
  20. data/lib/spud_blog/version.rb +1 -1
  21. data/spec/controllers/admin/posts_controller_spec.rb +23 -1
  22. data/spec/controllers/posts_controller_spec.rb +0 -26
  23. data/spec/dummy/config/application.rb +5 -0
  24. data/spec/dummy/db/migrate/20151015154040_add_custom_author_to_post.tb_blog.rb +6 -0
  25. data/spec/dummy/db/migrate/20160215174632_add_requires_password_change_to_spud_users.tb_core.rb +6 -0
  26. data/spec/dummy/db/migrate/20160215174633_create_tb_redirects.tb_redirects.rb +15 -0
  27. data/spec/dummy/db/migrate/20160216150847_add_identifier_to_spud_posts.tb_blog.rb +7 -0
  28. data/spec/dummy/db/migrate/20160216153113_drop_spud_post_comments.rb +29 -0
  29. data/spec/dummy/db/schema.rb +37 -40
  30. data/spec/helpers/admin/posts_helper_spec.rb +15 -0
  31. data/spec/helpers/blog_helper_spec.rb +13 -0
  32. data/spec/models/spud_post_spec.rb +19 -0
  33. data/spec/rails_helper.rb +1 -1
  34. metadata +33 -25
  35. data/app/assets/javascripts/admin/blog/post_comments.js +0 -37
  36. data/app/controllers/admin/post_comments_controller.rb +0 -80
  37. data/app/helpers/admin/post_comments_helper.rb +0 -3
  38. data/app/models/spud_post_comment.rb +0 -42
  39. data/app/views/admin/post_comments/index.html.erb +0 -60
  40. data/db/migrate/20120125181359_create_spud_post_comments.rb +0 -13
  41. data/db/migrate/20120413020437_add_comments_counter_to_spud_posts.rb +0 -12
  42. data/db/migrate/20120825142547_add_spam_fields_to_spud_post_comments.rb +0 -8
  43. data/db/migrate/20120825144506_add_permalink_to_spud_post_comments.rb +0 -5
  44. data/db/migrate/20140811152252_add_blog_key_to_spud_post_comments.rb +0 -6
  45. data/spec/factories/spud_user_factories.rb +0 -31
  46. /data/app/assets/images/{spud/admin → admin}/news_thumb.png +0 -0
  47. /data/app/assets/images/{spud/admin → admin}/posts_thumb.png +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b9170ccda1ef782dbf78a563fa1efc265b2a4f68
4
- data.tar.gz: 95ca57b1a0bfc7ecba20870a9a78bc168e9e5632
3
+ metadata.gz: 4c07afcec9d3eb4f9a2038a5dc331496148f6c40
4
+ data.tar.gz: 5921d46580058b1faf06f56f81c2b700b48e2a27
5
5
  SHA512:
6
- metadata.gz: b11edd82dd1eb74576d3c3278474645fb313d0cdb57f4eb8fc4b265f5fafe15e1666a3aa41626f8b385bc5eacc43c0f9145e3bff7d77bf11d72c02c03b9ce802
7
- data.tar.gz: ec964ab180f1bbdf53b62fa408ca624c203c79488d64edccd45fe51d59add9b353cf533361d0c3ade859d30c3a475f95d5bb5f83bff94be2dd784b5f4c4098a2
6
+ metadata.gz: 971e90879dde94f36ed70c28019f57c50610a4b8d829b93348a72e9af54d0e01d0f109aa35803d72f2cdf4290411b3fe3eaa11630ddf09179f30311073f59750
7
+ data.tar.gz: 78244e37a50fcfbbd516554e8554047d9f9dbf01dfa6da0d887c0160ce0098613a429f4fa649358b8630f04b2acb817873a6efbb08157f52685493da2ce32e20
data/Readme.md CHANGED
@@ -28,7 +28,7 @@ TB Blog current accepts the following configuration options.
28
28
  config.blog_path = 'blog'
29
29
  config.news_path = 'news'
30
30
  config.posts_per_page = 5
31
- config.default_comment_approval = true
31
+ config.disqus_shortname = ''
32
32
  end
33
33
 
34
34
  ## Customizing Views
@@ -120,20 +120,6 @@ That's it! You may now begin customizing the post class.
120
120
  p = SpudPost.first
121
121
  puts p.hello_world # outputs "Hello, World!"
122
122
 
123
- ## Akismet Support
124
-
125
- TB Blog Engine now supports spam comment filtering using akismet. All you have to do is configure the rakismet gem and enable_rakismet in the spud_blog configuration. Add the following to your application.rb file
126
-
127
- Spud::Blog.configure do |config|
128
- config.enable_rakismet = true
129
- end
130
- config.rakismet.key = "your key here"
131
- config.rakismet.url = 'http://yourdomain.com/'
132
-
133
- Also make sure to add the rakismet gem to your gemfile
134
-
135
- gem 'rakismet'
136
-
137
123
  Testing
138
124
  -----------------
139
125
 
@@ -4,6 +4,7 @@ class Admin::PostsController < Admin::ApplicationController
4
4
  respond_to :html, :xml, :json
5
5
  before_action :load_blog
6
6
  before_action :find_post, :only => [:show, :edit, :update, :destroy]
7
+ around_action :create_redirect_if_necessary, :only => :update
7
8
 
8
9
  def index
9
10
  @posts = SpudPost.for_blog(params[:blog_key]).ordered.paginate(:page => params[:page], :per_page => 15)
@@ -58,7 +59,7 @@ private
58
59
  end
59
60
 
60
61
  def post_params
61
- permitted = [:published_at, :title, :content, :spud_user_id, :url_name, :visible, :comments_enabled, :meta_keywords, :meta_description, :content_format, :category_ids => []]
62
+ permitted = [:published_at, :title, :content, :spud_user_id, :url_name, :visible, :comments_enabled, :meta_keywords, :meta_description, :content_format, :custom_author, :category_ids => []]
62
63
  if Spud::Blog.permitted_attributes.present?
63
64
  permitted = permitted + Spud::Blog.permitted_attributes
64
65
  end
@@ -73,8 +74,31 @@ private
73
74
  redirect_to admin_root_path
74
75
  return false
75
76
  else
76
- self.class.belongs_to_spud_app "#{@config.name} Posts".parameterize.underscore.to_sym
77
+ act_as_app "#{@config.name} Posts".parameterize.underscore.to_sym
77
78
  add_breadcrumb "#{@config.name} Posts", admin_posts_path(blog_key: @config.key)
78
79
  end
79
80
  end
81
+
82
+ # Create a redirect if the post URL has changed
83
+ #
84
+ # Normally this sort of thing might belong in a model after_update hook, but the model
85
+ # layer has no knowledge of URL helpers.
86
+ #
87
+ def create_redirect_if_necessary
88
+ @_redirect_source = post_path(@post.url_name, :blog_key => @post.blog_key, :only_path => true)
89
+ yield
90
+ ensure
91
+ if @post.errors.empty?
92
+ @_redirect_destination = post_path(@post.url_name, :blog_key => @post.blog_key, :only_path => true)
93
+ if @_redirect_source != @_redirect_destination
94
+ TbRedirect.create_smart({
95
+ :source => @_redirect_source,
96
+ :destination => @_redirect_destination,
97
+ :created_by => 'blog',
98
+ :owner => @post
99
+ })
100
+ end
101
+ end
102
+ end
103
+
80
104
  end
@@ -3,7 +3,7 @@ module BlogUrlHelpers
3
3
 
4
4
  included do
5
5
  helper_method :posts_path, :post_path, :post_category_path, :post_archive_path,
6
- :admin_posts_path, :admin_post_path, :new_admin_post_path, :edit_admin_post_path, :admin_post_post_comments_path, :admin_post_comments_path
6
+ :admin_posts_path, :admin_post_path, :new_admin_post_path, :edit_admin_post_path
7
7
  end
8
8
 
9
9
  def posts_path(opts={})
@@ -48,13 +48,4 @@ module BlogUrlHelpers
48
48
  url_for :controller => '/admin/posts', :action => 'edit', :id => post.id, :blog_key => post.blog_key
49
49
  end
50
50
 
51
- def admin_post_comments_path(blog_key: nil)
52
- blog_key ||= params[:blog_key]
53
- url_for :controller => '/admin/post_comments', :action => 'index', :blog_key => blog_key
54
- end
55
-
56
- def admin_post_post_comments_path(post)
57
- url_for :controller => '/admin/post_comments', :action => 'index', :post_id => post.id, :blog_key => post.blog_key
58
- end
59
-
60
51
  end
@@ -52,38 +52,11 @@ class PostsController < ApplicationController
52
52
  end
53
53
 
54
54
  def show
55
- if @post.comments_enabled
56
- @comment = SpudPostComment.new()
57
- end
58
55
  respond_with @post do |format|
59
56
  format.html { render view_for_action 'show' }
60
57
  end
61
58
  end
62
59
 
63
- def create_comment
64
- unless params[:comment_validation].blank? # trap spam bots
65
- render :nothing => true
66
- return
67
- end
68
- @comment = @post.comments.new(comment_params)
69
- @comment.user_agent = request.env["HTTP_USER_AGENT"]
70
- @comment.user_ip = request.remote_ip
71
- @comment.referrer = request.referrer
72
- @comment.approved = Spud::Blog.default_comment_approval
73
- @comment.permalink = post_path(@post.url_name)
74
- if @comment.save
75
- if @comment.approved?
76
- flash[:notice] = 'Your comment has been posted.'
77
- else
78
- flash[:notice] = 'Your comment has been saved and will appear after being reviewed by an administrator.'
79
- end
80
- @comment = SpudPostComment.new()
81
- end
82
- respond_with @comment do |format|
83
- format.html { render view_for_action 'show' }
84
- end
85
- end
86
-
87
60
  private
88
61
 
89
62
  def find_post
@@ -93,10 +66,6 @@ private
93
66
  end
94
67
  end
95
68
 
96
- def comment_params
97
- params.require(:spud_post_comment).permit(:author, :content)
98
- end
99
-
100
69
  def load_page_number
101
70
  page = 1
102
71
  if params[:page].present?
@@ -11,4 +11,15 @@ module Admin::PostsHelper
11
11
  end
12
12
  end
13
13
 
14
- end
14
+ def link_to_disqus_comment_count(post)
15
+ # TODO: It would be great to link directly to the thread
16
+ # ie: https://myblog.disqus.com/admin/moderate/#/all/search/thread:4584301535
17
+ #
18
+ # However, we do not know the thread ID at this time. We may be able to fetch it
19
+ # via the Disqus JavaScript API.
20
+ #
21
+ return link_to 'Comments', "https://#{Spud::Blog.disqus_shortname}.disqus.com/admin/moderate/#/all", :target => :blank, :class => 'disqus-comment-count',
22
+ :data => {:disqus_identifier => post.identifier}
23
+ end
24
+
25
+ end
@@ -22,4 +22,9 @@ module BlogHelper
22
22
  return tag :link, :rel => 'alternate', :type => 'application/rss+xml', :title => "#{Spud::Core.site_name} Blog RSS", :href => posts_path(:format => :rss)
23
23
  end
24
24
 
25
+ def disqus_comment_count_for_post(post)
26
+ return content_tag :span, 'Comments', :class => 'disqus-comment-count',
27
+ :data => {:disqus_identifier => post.identifier}
28
+ end
29
+
25
30
  end
@@ -1,4 +1,6 @@
1
1
  class Spud::SpudPostModel < ActiveRecord::Base
2
+ include TbRedirects::HasRedirects
3
+
2
4
  self.table_name = 'spud_posts'
3
5
 
4
6
  spud_searchable
@@ -10,11 +12,6 @@ class Spud::SpudPostModel < ActiveRecord::Base
10
12
  :source => :spud_post_category
11
13
 
12
14
  belongs_to :author, :class_name => 'SpudUser', :foreign_key => 'spud_user_id'
13
- has_many :comments, :class_name => 'SpudPostComment', :inverse_of => :post, :foreign_key => 'spud_post_id'
14
- has_many :pending_comments, ->{ where(:spam => [nil, false], :approved => false) }, :class_name => "SpudPostComment", :foreign_key => 'spud_post_id'
15
- has_many :visible_comments, ->{ where(:spam => [nil,false], :approved => true) }, :class_name => 'SpudPostComment', :foreign_key => 'spud_post_id'
16
- has_many :spam_comments, ->{ where(:spam => true) }, :class_name => "SpudPostComment", :foreign_key => 'spud_post_id'
17
- has_many :spud_permalinks, :as => :attachment
18
15
 
19
16
  scope :blog_posts, ->{ for_blog('blog') }
20
17
  scope :news_posts, ->{ for_blog('news') }
@@ -35,6 +32,7 @@ class Spud::SpudPostModel < ActiveRecord::Base
35
32
  validates :url_name, :presence => true, :uniqueness => true, :format => {:with => /\A[\w\-]+\z/, :message => 'must contain only letters, numbers, and dashes'}
36
33
  validates_uniqueness_of :url_name
37
34
  before_validation :set_url_name
35
+ before_validation :set_identifier
38
36
 
39
37
  acts_as_tb_liquid_content
40
38
 
@@ -112,6 +110,14 @@ class Spud::SpudPostModel < ActiveRecord::Base
112
110
  return self.categories.collect{ |c| c.name }.join(', ')
113
111
  end
114
112
 
113
+ def author_name
114
+ if self.custom_author.present?
115
+ self.custom_author
116
+ else
117
+ self.author.full_name
118
+ end
119
+ end
120
+
115
121
  private
116
122
 
117
123
  def set_url_name
@@ -120,4 +126,11 @@ private
120
126
  end
121
127
  end
122
128
 
129
+ def set_identifier
130
+ if identifier.blank?
131
+ self.identifier = SecureRandom.uuid
132
+ end
133
+ return true
134
+ end
135
+
123
136
  end
@@ -26,7 +26,12 @@
26
26
  <% else %>
27
27
  <%= f.hidden_field :spud_user_id %>
28
28
  <% end %>
29
-
29
+ <div class="form-group">
30
+ <%= f.label :custom_author, 'Custom Author Display', :class => "col-sm-2 control-label" %>
31
+ <div class="col-sm-10">
32
+ <%= f.text_field :custom_author, :class=>'form-control', :placeholder => 'Author Display' %>
33
+ </div>
34
+ </div>
30
35
  <div class="form-group">
31
36
  <%= f.label :visible, :class => 'col-sm-2 control-label' %>
32
37
  <div class="col-sm-10">
@@ -13,7 +13,9 @@
13
13
  </div>
14
14
  <div class="form-group">
15
15
  <%= link_to "Manage Categories", admin_post_categories_path, :class => 'btn btn-default spud-blog-manage-categories', :title => 'Manage Categories' %>
16
- <%= link_to "Manage Comments", admin_post_comments_path, :class => 'btn btn-default', :title => 'Manage Comments' %>
16
+ <% if Spud::Blog.disqus_shortname %>
17
+ <%= link_to "Manage Comments", "https://#{Spud::Blog.disqus_shortname}.disqus.com/admin/moderate/#/all", :target => :blank, :class => 'btn btn-default', :title => 'Manage Comments' %>
18
+ <% end %>
17
19
  <%= link_to "New Post", new_admin_post_path, :class => "btn btn-primary", :title => "New Post" %>
18
20
  </div>
19
21
  <% end %>
@@ -27,7 +29,9 @@
27
29
  <th>Title</th>
28
30
  <th>Author</th>
29
31
  <th>Published At</th>
30
- <th>Comments</th>
32
+ <% if Spud::Blog.disqus_shortname %>
33
+ <th>Comments</th>
34
+ <% end %>
31
35
  <th>&nbsp;</th>
32
36
  </tr>
33
37
  </thead>
@@ -42,12 +46,13 @@
42
46
  <span class="badge">Draft</span>
43
47
  <% end %>
44
48
  </td>
45
- <td><%= post.author.full_name %></td>
49
+ <td><%= post.author_name %></td>
46
50
  <td><%= post.published_at.strftime('%m/%d/%Y') %></td>
47
- <td>
48
- <%= content_tag :span, post.comments.count, :class => "label label-#{post.pending_comments.count > 0 ? 'info' : 'default'}" %>
49
- <%= link_to "Manage", admin_post_post_comments_path(post), :class => 'spud-post-comments-manage' %>
50
- </td>
51
+ <% if Spud::Blog.disqus_shortname %>
52
+ <td>
53
+ <%= link_to_disqus_comment_count(post) %>
54
+ </td>
55
+ <% end %>
51
56
  <td class="table-actions">
52
57
  <%= link_to 'Edit', edit_admin_post_path(post), :class => 'btn btn-sm btn-default' %>
53
58
  <%= link_to 'Delete', admin_post_path(post), :method => :delete, :data => {:confirm => 'Are you sure you want to delete this post?'}, :class => 'btn btn-sm btn-danger' %>
@@ -64,4 +69,7 @@
64
69
  <script>
65
70
  $(document).ready(spud.admin.post_categories.init);
66
71
  </script>
72
+ <% if Spud::Blog.disqus_shortname %>
73
+ <%= javascript_include_tag "//#{Spud::Blog.disqus_shortname}.disqus.com/count.js", :id => 'dsq-count-scr', :async => true %>
74
+ <% end %>
67
75
  <%end%>
@@ -0,0 +1,18 @@
1
+ <div id="disqus_thread"></div>
2
+ <script>
3
+ /**
4
+ * RECOMMENDED CONFIGURATION VARIABLES: EDIT AND UNCOMMENT THE SECTION BELOW TO INSERT DYNAMIC VALUES FROM YOUR PLATFORM OR CMS.
5
+ * LEARN WHY DEFINING THESE VARIABLES IS IMPORTANT: https://disqus.com/admin/universalcode/#configuration-variables
6
+ */
7
+ var disqus_config = function () {
8
+ this.page.url = '<%= post_path(@post.url_name) %>'; // Replace PAGE_URL with your page's canonical URL variable
9
+ this.page.identifier = '<%= @post.identifier %>'; // Replace PAGE_IDENTIFIER with your page's unique identifier variable
10
+ };
11
+ (function() { // REQUIRED CONFIGURATION VARIABLE: EDIT THE SHORTNAME BELOW
12
+ var d = document, s = d.createElement('script');
13
+ s.src = '//<%= Spud::Blog.disqus_shortname %>.disqus.com/embed.js'; // IMPORTANT: Replace EXAMPLE with your forum shortname!
14
+ s.setAttribute('data-timestamp', +new Date());
15
+ (d.head || d.body).appendChild(s);
16
+ })();
17
+ </script>
18
+ <noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript" rel="nofollow">comments powered by Disqus.</a></noscript>
@@ -30,7 +30,10 @@
30
30
  <% cache(post) do %>
31
31
  <div class="blog-post blog-post-partial">
32
32
  <h3 class="blog-post-title"><%= link_to post.title, post_path(post.url_name) %></h3>
33
- <h4 class="blog-post-author">Posted by <%= post.author.full_name %> on <%= post.display_date %></h4>
33
+ <h4 class="blog-post-author">Posted by <%= post.author_name %> on <%= post.display_date %></h4>
34
+ <% if Spud::Blog.disqus_shortname %>
35
+ <p><%= disqus_comment_count_for_post(post) %></p>
36
+ <% end %>
34
37
  <div class="blog-post-content">
35
38
  <%= truncate_html post.content_processed.html_safe, :length => 250 %>
36
39
  </div>
@@ -54,4 +57,8 @@
54
57
 
55
58
  </div>
56
59
 
60
+ <% if Spud::Blog.disqus_shortname %>
61
+ <%= javascript_include_tag "//#{Spud::Blog.disqus_shortname}.disqus.com/count.js", :id => 'dsq-count-scr', :async => true %>
62
+ <% end %>
63
+
57
64
  <% end %>
@@ -17,7 +17,7 @@
17
17
  <div class="col-sm-12">
18
18
  <div class="blog-post blog-post-partial">
19
19
  <h1 class="blog-post-title"><%= @post.title %></h1>
20
- <h4 class="blog-post-author">Posted by <%= @post.author.full_name %> on <%= @post.display_date %></h4>
20
+ <h4 class="blog-post-author">Posted by <%= @post.author_name %> on <%= @post.display_date %></h4>
21
21
  <% if @post.categories.any? %>
22
22
  <p class="blog-post-categories">
23
23
  <span>Filed under</span>
@@ -32,26 +32,12 @@
32
32
  </div>
33
33
  </div>
34
34
 
35
- <% if @post.comments_enabled %>
35
+ <% if @post.comments_enabled? && Spud::Blog.disqus_shortname %>
36
36
  <div class="row">
37
37
  <div class="col-sm-12">
38
- <div class="blog-post-comment">
39
- <h5>Post a Comment:</h5>
40
- <%= render 'comment_form' %>
41
- </div>
42
- <% cache(cache_key_for_spud_collection(@post.visible_comments, key:'comments')) do %>
43
- <ul id="blog-post-comments">
44
- <% @post.visible_comments.each do |comment| %>
45
- <% cache(comment) do %>
46
- <li>
47
- <h6>Posted by: <%= comment.author %></h6>
48
- <p><%= comment.content %></p>
49
- </li>
50
- <% end %>
51
- <% end %>
52
- </ul>
53
- <% end %>
38
+ <%= render '/posts/disqus' %>
54
39
  </div>
55
40
  </div>
56
41
  <% end %>
42
+
57
43
  <% end %>
data/config/routes.rb CHANGED
@@ -1,12 +1,6 @@
1
1
  Rails.application.routes.draw do
2
2
 
3
3
  namespace :admin do
4
- resources :post_comments, :only => :destroy do
5
- member do
6
- get 'approve'
7
- get 'spam'
8
- end
9
- end
10
4
  resources :post_categories
11
5
  end
12
6
 
@@ -14,10 +8,7 @@ Rails.application.routes.draw do
14
8
  blog_key = config.key
15
9
 
16
10
  namespace :admin do
17
- resources :posts, :path => blog_key, :blog_key => blog_key do
18
- get 'comments' => 'post_comments#index', :path => 'comments', :on => :collection
19
- resources :post_comments, :path => 'comments', :only => :index
20
- end
11
+ resources :posts, :path => blog_key, :blog_key => blog_key
21
12
  end
22
13
 
23
14
  scope config.path do
@@ -52,7 +43,6 @@ Rails.application.routes.draw do
52
43
  :defaults => {:page => 1}
53
44
 
54
45
  get ':id' => 'posts#show', :as => "#{blog_key}_post", :blog_key => blog_key
55
- post ':id' => 'posts#create_comment', :blog_key => blog_key
56
46
  end
57
47
  end
58
48
 
@@ -0,0 +1,5 @@
1
+ class AddCustomAuthorToPost < ActiveRecord::Migration
2
+ def change
3
+ add_column :spud_posts, :custom_author, :string
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ class AddIdentifierToSpudPosts < ActiveRecord::Migration
2
+ def change
3
+ add_column :spud_posts, :identifier, :string
4
+ add_index :spud_posts, :identifier, :unique => true
5
+ end
6
+ end
@@ -0,0 +1,29 @@
1
+ # This migration will drop spud_post_comments from your database. It has been excluded
2
+ # from the migrations directory to avoid accidential data loss on upgrading.
3
+ #
4
+ # If you wish to completely remove spud_post_comments from your app, simply copy this file
5
+ # into your db/migrations directory and run db:migrate.
6
+ #
7
+
8
+ class DropSpudPostComments < ActiveRecord::Migration
9
+ def up
10
+ drop_table :spud_post_comments
11
+ remove_column :spud_posts, :comments_count
12
+ end
13
+ def down
14
+ create_table :spud_post_comments do |t|
15
+ t.integer :spud_post_id
16
+ t.string :author
17
+ t.text :content
18
+ t.boolean :approved, :default => false
19
+ t.boolean :spam
20
+ t.string :user_ip
21
+ t.string :user_agent
22
+ t.string :referrer
23
+ t.string :permalink
24
+ t.string :blog_key
25
+ t.timestamps
26
+ end
27
+ add_column :spud_posts, :comments_count, :integer
28
+ end
29
+ end
@@ -2,10 +2,9 @@ module Spud
2
2
  module Blog
3
3
  include ActiveSupport::Configurable
4
4
  config_accessor(
5
- :base_layout, :news_layout, :blogs, :news_enabled, :blog_enabled, :blog_path, :news_path,
6
- :posts_per_page, :has_custom_fields,
5
+ :base_layout, :news_layout, :blogs, :news_enabled, :blog_enabled, :blog_path, :news_path, :posts_per_page,
7
6
  :permitted_attributes, :query_for_user,
8
- :enable_rakismet, :default_comment_approval
7
+ :disqus_shortname
9
8
  )
10
9
  self.base_layout = 'application'
11
10
  self.posts_per_page = 5
@@ -16,11 +15,9 @@ module Spud
16
15
  self.blog_path = '/blog'
17
16
  self.news_path = '/news'
18
17
 
19
- self.has_custom_fields = false
20
- self.enable_rakismet = false
21
- self.default_comment_approval = true
22
18
  self.permitted_attributes = []
23
19
  self.query_for_user = nil
20
+ self.disqus_shortname = nil
24
21
 
25
22
  self.blogs = []
26
23
  end
@@ -1,5 +1,5 @@
1
1
  require 'tb_core'
2
- require 'tb_permalinks'
2
+ require 'tb_redirects'
3
3
  require 'tb_liquid'
4
4
  require 'truncate_html'
5
5
 
@@ -48,18 +48,16 @@ module Spud
48
48
  blog_app = {
49
49
  :name => "#{config.name} Posts",
50
50
  :url => "admin/#{config.key}",
51
- :thumbnail => 'spud/admin/posts_thumb.png',
52
- :badge => ->(user){
53
- SpudPostComment.for_blog(config.key).pending_approval.count()
54
- }
51
+ :thumbnail => 'admin/posts_thumb.png'
55
52
  }
56
53
  Spud::Core.config.admin_applications += [blog_app]
57
54
  end
58
55
  end
59
56
 
60
- initializer :assets do
57
+ initializer 'tb_blog.assets' do
61
58
  Spud::Core.append_admin_javascripts('admin/blog/application')
62
59
  Spud::Core.append_admin_stylesheets('admin/blog/application')
60
+ Rails.application.config.assets.precompile += ['admin/posts_thumb.png', 'admin/news_thumb.png']
63
61
  end
64
62
 
65
63
  # Triggers a I18n.enforce_available_locales deprecation warning. Why?
@@ -68,12 +66,6 @@ module Spud
68
66
  # has_many :posts, :class_name => 'SpudPost'
69
67
  # end
70
68
  # end
71
-
72
- initializer :rakismet do
73
- if Spud::Blog.enable_rakismet
74
- require 'rakismet'
75
- end
76
- end
77
69
  end
78
70
  end
79
71
  end
@@ -1,5 +1,5 @@
1
1
  module Spud
2
2
  module Blog
3
- VERSION = "1.3.2"
3
+ VERSION = "1.3.3"
4
4
  end
5
5
  end
@@ -2,4 +2,26 @@ require 'rails_helper'
2
2
 
3
3
  describe Admin::PostsController, :type => :controller do
4
4
 
5
- end
5
+ before(:each) do
6
+ activate_session(admin: true)
7
+ end
8
+
9
+ describe '#create_redirect_if_necessary' do
10
+ before(:each) do
11
+ @post = FactoryGirl.create(:spud_post)
12
+ end
13
+
14
+ it 'should create a redirect' do
15
+ expect{
16
+ put :update, :id => @post.id, :spud_post => {:url_name => 'new-url'}, :blog_key => 'blog'
17
+ }.to change(@post.tb_redirects, :count).by(1)
18
+ end
19
+
20
+ it 'should not create a redirect' do
21
+ expect{
22
+ put :update, :id => @post.id, :spud_post => {:title => 'Hello World'}, :blog_key => 'blog'
23
+ }.to_not change(@post.tb_redirects, :count)
24
+ end
25
+ end
26
+
27
+ end
@@ -27,30 +27,4 @@ describe PostsController, :type => :controller do
27
27
  end
28
28
  end
29
29
 
30
- describe 'create_comment' do
31
- it "should create a comment" do
32
- @post = FactoryGirl.create(:spud_post)
33
- post :create_comment, :blog_key => 'blog', :id => @post.url_name, :spud_post_comment => {:author => "Test User", :content => "Lorem Ipsum"}
34
- expect(@post.comments.length).to be > 0
35
- end
36
-
37
- it "should approve a comment by default if default_comment_approval is true" do
38
- Spud::Blog.configure do |config|
39
- config.default_comment_approval = true
40
- end
41
- @post = FactoryGirl.create(:spud_post)
42
- post :create_comment, :blog_key => 'blog', :id => @post.url_name, :spud_post_comment => {:author => "Test User", :content => "Lorem Ipsum"}
43
- expect(@post.comments.first.approved).to eq(true)
44
- end
45
-
46
- it "should not approve a comment by default if default_comment_approval is false" do
47
- Spud::Blog.configure do |config|
48
- config.default_comment_approval = false
49
- end
50
- @post = FactoryGirl.create(:spud_post)
51
- post :create_comment, :blog_key => 'blog', :id => @post.url_name, :spud_post_comment => {:author => "Test User", :content => "Lorem Ipsum"}
52
- expect(@post.comments.first.approved).to eq(false)
53
- end
54
- end
55
-
56
30
  end
@@ -7,6 +7,11 @@ require "tb_blog"
7
7
 
8
8
  module Dummy
9
9
  class Application < Rails::Application
10
+
11
+ Spud::Blog.configure do |c|
12
+ c.disqus_shortname = 'testblog'
13
+ end
14
+
10
15
  # Settings in config/environments/* take precedence over those specified here.
11
16
  # Application configuration should go into files in config/initializers
12
17
  # -- all .rb files in that directory are automatically loaded.
@@ -0,0 +1,6 @@
1
+ # This migration comes from tb_blog (originally 20151015151133)
2
+ class AddCustomAuthorToPost < ActiveRecord::Migration
3
+ def change
4
+ add_column :spud_posts, :custom_author, :string
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ # This migration comes from tb_core (originally 20150610143438)
2
+ class AddRequiresPasswordChangeToSpudUsers < ActiveRecord::Migration
3
+ def change
4
+ add_column :spud_users, :requires_password_change, :boolean, :default => false
5
+ end
6
+ end
@@ -0,0 +1,15 @@
1
+ # This migration comes from tb_redirects (originally 20160211162513)
2
+ class CreateTbRedirects < ActiveRecord::Migration
3
+ def change
4
+ create_table :tb_redirects do |t|
5
+ t.string :owner_type
6
+ t.integer :owner_id
7
+ t.string :source, :null => false
8
+ t.string :destination, :null => false
9
+ t.string :created_by
10
+ t.timestamps null: false
11
+ end
12
+ add_index :tb_redirects, [:owner_type, :owner_id]
13
+ add_index :tb_redirects, :source, :unique => true
14
+ end
15
+ end
@@ -0,0 +1,7 @@
1
+ # This migration comes from tb_blog (originally 20160216144708)
2
+ class AddIdentifierToSpudPosts < ActiveRecord::Migration
3
+ def change
4
+ add_column :spud_posts, :identifier, :string
5
+ add_index :spud_posts, :identifier, :unique => true
6
+ end
7
+ end