bcms_blog 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. data/Gemfile +10 -0
  2. data/README.markdown +10 -4
  3. data/app/assets/javascripts/bcms_blog/application.js +15 -0
  4. data/app/assets/stylesheets/bcms_blog/application.css +13 -0
  5. data/app/controllers/bcms_blog/blog_comments_controller.rb +5 -0
  6. data/app/controllers/bcms_blog/blog_posts_controller.rb +37 -0
  7. data/app/controllers/bcms_blog/blogs_controller.rb +13 -0
  8. data/app/controllers/bcms_blog/feeds_controller.rb +10 -0
  9. data/app/helpers/bcms_blog/blog_helper.rb +27 -0
  10. data/app/models/bcms_blog/blog.rb +99 -0
  11. data/app/models/bcms_blog/blog_comment.rb +36 -0
  12. data/app/models/bcms_blog/blog_group_membership.rb +6 -0
  13. data/app/models/bcms_blog/blog_observer.rb +141 -0
  14. data/app/models/bcms_blog/blog_post.rb +108 -0
  15. data/app/portlets/blog_post_portlet.rb +6 -6
  16. data/app/portlets/blog_posts_portlet.rb +4 -4
  17. data/app/views/bcms_blog/blog_comments/_form.html.erb +5 -0
  18. data/app/views/bcms_blog/blog_comments/render.html.erb +2 -0
  19. data/app/views/{cms → bcms_blog}/blog_posts/_form.html.erb +1 -1
  20. data/app/views/{cms → bcms_blog}/blog_posts/no_access.html.erb +0 -0
  21. data/app/views/{cms → bcms_blog}/blog_posts/render.html.erb +0 -0
  22. data/app/views/{cms → bcms_blog}/blogs/_form.html.erb +2 -2
  23. data/app/views/{cms → bcms_blog}/blogs/admin_only.html.erb +0 -0
  24. data/app/views/{cms → bcms_blog}/blogs/render.html.erb +0 -0
  25. data/app/views/{feeds → bcms_blog/feeds}/index.rss.builder +3 -3
  26. data/app/views/portlets/blog_post/_form.html.erb +1 -1
  27. data/app/views/portlets/blog_post/render.html.erb +3 -1
  28. data/app/views/portlets/blog_posts/_form.html.erb +1 -1
  29. data/config/routes.rb +5 -0
  30. data/db/bcms_blog.seeds.rb +4 -0
  31. data/db/migrate/20090415000000_create_blogs.rb +5 -6
  32. data/db/migrate/20090415000001_create_blog_posts.rb +1 -5
  33. data/db/migrate/20090415000002_create_blog_comments.rb +0 -2
  34. data/db/migrate/20120529184028_v130.rb +12 -0
  35. data/lib/bcms_blog/engine.rb +15 -1
  36. data/lib/bcms_blog/route_extensions.rb +8 -0
  37. data/lib/bcms_blog/version.rb +3 -0
  38. data/lib/bcms_blog.rb +5 -2
  39. data/lib/generators/bcms_blog/install/install_generator.rb +11 -11
  40. data/lib/tasks/bcms_blog_tasks.rake +4 -0
  41. data/test/bcms_blog_test.rb +7 -0
  42. data/test/functional/cms/blog_posts_controller_test.rb +47 -0
  43. data/test/functional/cms/blogs_controller_test.rb +27 -0
  44. data/test/integration/blog_controller_test.rb +63 -0
  45. data/test/integration/blog_post_test.rb +31 -0
  46. data/test/support/blog_test_helper.rb +71 -0
  47. data/test/support/factories.rb +54 -0
  48. data/test/support/factory_girl_support.rb +2 -0
  49. data/test/test_helper.rb +15 -0
  50. data/test/test_logging.rb +64 -0
  51. data/test/unit/blog_comment_test.rb +34 -0
  52. data/test/unit/blog_observer_test.rb +84 -0
  53. data/test/unit/blog_post_test.rb +45 -0
  54. data/test/unit/blog_test.rb +42 -0
  55. data/test/unit/helpers/feeds_helper_test.rb +4 -0
  56. metadata +83 -35
  57. data/app/controllers/cms/blog_comments_controller.rb +0 -3
  58. data/app/controllers/cms/blog_posts_controller.rb +0 -35
  59. data/app/controllers/cms/blogs_controller.rb +0 -11
  60. data/app/controllers/feeds_controller.rb +0 -8
  61. data/app/helpers/cms/blog_helper.rb +0 -20
  62. data/app/models/blog.rb +0 -95
  63. data/app/models/blog_comment.rb +0 -34
  64. data/app/models/blog_group_membership.rb +0 -4
  65. data/app/models/blog_observer.rb +0 -140
  66. data/app/models/blog_post.rb +0 -113
  67. data/app/views/cms/blog_comments/_form.html.erb +0 -5
  68. data/app/views/cms/blog_comments/render.html.erb +0 -2
  69. data/app/views/layouts/templates/default.html.erb +0 -17
  70. data/doc/README_FOR_APP +0 -2
  71. data/doc/migrate_to_20100427.rb +0 -77
  72. data/doc/release_notes.txt +0 -48
  73. data/lib/bcms_blog/routes.rb +0 -10
@@ -0,0 +1,34 @@
1
+ require 'test_helper'
2
+
3
+ class BlogCommentTest < ActiveSupport::TestCase
4
+
5
+ def setup
6
+ setup_blog_stubs
7
+ end
8
+
9
+ test "crates a valid instance" do
10
+ assert build(:blog_comment).valid?
11
+ end
12
+
13
+ test "requires post" do
14
+ assert build(:blog_comment, :post => nil).invalid?
15
+ end
16
+
17
+ test "requires author" do
18
+ assert build(:blog_comment, :author => nil).invalid?
19
+ end
20
+
21
+ test "requires body" do
22
+ assert build(:blog_comment, :body => nil).invalid?
23
+ end
24
+
25
+ test "should not be published if Blog#moderate_comments is true" do
26
+ assert !create(:blog_comment).published?
27
+ end
28
+
29
+ test "should be published if Blog#moderate_comments is false" do
30
+ blog = create(:blog, :moderate_comments => false)
31
+ post = create(:blog_post, :blog => blog)
32
+ assert create(:blog_comment, :post => post).published?
33
+ end
34
+ end
@@ -0,0 +1,84 @@
1
+ require 'test_helper'
2
+
3
+ module BcmsBlog
4
+ class BlogPersistenceTest < ActiveSupport::TestCase
5
+
6
+ def setup
7
+ @root = create(:root_section)
8
+ @blog = create(:blog, :name => 'TestBlog')
9
+ end
10
+
11
+ test "Update pages/routes when a section changes" do
12
+ BlogObserver.any_instance.expects(:update_section_pages_and_route).with(@blog)
13
+ @blog.name = "Change the Name"
14
+ @blog.save!
15
+ end
16
+
17
+ test "Published afters saving" do
18
+ BlogObserver.any_instance.expects(:update_section_pages_and_route).with(@blog)
19
+ @blog.name = "Change the Name"
20
+ @blog.save!
21
+ assert @blog.published?
22
+ end
23
+ end
24
+
25
+ class BlogObserverTest < ActiveSupport::TestCase
26
+
27
+ def setup
28
+ setup_blog_stubs
29
+ [Cms::Section, Cms::PageRoute, Cms::Page].each {|klass| klass.stubs(:find_by_name)}
30
+ BlogPostPortlet.stubs(:create!)
31
+ @blog = create(:blog, :name => 'TestBlog')
32
+ end
33
+
34
+ test "does not update section, pageroute and pages if name did not change when updated" do
35
+ [Cms::Section, Cms::PageRoute, Cms::Page].each {|klass| klass.expects(:find_by_name).never}
36
+ @blog.toggle!(:moderate_comments)
37
+ end
38
+
39
+ test "updates section, pageroute and pages if name changed" do
40
+ route = mock('page_route', :update_attribute => true)
41
+ page = mock('page')
42
+ Cms::Section.expects(:find_by_name).returns(Cms::Section.new)
43
+ Cms::PageRoute.expects(:find_by_name).returns(route)
44
+ Cms::Page.expects(:find_by_name).twice.returns(page)
45
+ page.expects(:update_attribute).twice.returns(true)
46
+ page.expects(:publish).twice.returns(true)
47
+
48
+ @blog.update_attribute(:name, "OtherName")
49
+ end
50
+
51
+ test "should create a section with the same name and route" do
52
+ Cms::Section.expects(:create!).with(:name => 'Test', :path => '/test', :parent => Cms::Section.root.first).returns(@section)
53
+ create(:blog, :name => 'Test')
54
+ end
55
+
56
+ test "should create a hidden page with the same name in the section with the blog's name" do
57
+ Cms::Page.expects(:create!).with(:name => 'Test',
58
+ :path => '/test',
59
+ :section => @section,
60
+ :template_file_name => 'default.html.erb',
61
+ :hidden => true).returns(Cms::Page.new)
62
+ create(:blog, :name => 'Test')
63
+ end
64
+
65
+ test "should create a page to hold the BlogPostPortlet" do
66
+ Cms::Page.expects(:create!).with(:name => 'Test: Post',
67
+ :path => '/test/post',
68
+ :section => @section,
69
+ :template_file_name => 'default.html.erb',
70
+ :hidden => true).returns(Cms::Page.new)
71
+ create(:blog, :name => 'Test')
72
+ end
73
+
74
+ test "should create an instance of BlogPostPortlet" do
75
+ BlogPostPortlet.expects(:create!).with(:name => 'Test: Post Portlet',
76
+ :blog_id => 2,
77
+ :template => BlogPostPortlet.default_template,
78
+ :connect_to_page_id => nil,
79
+ :connect_to_container => 'main',
80
+ :publish_on_save => true).returns(BlogPostPortlet.new)
81
+ create(:blog, :name => 'Test')
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,45 @@
1
+ require 'test_helper'
2
+
3
+ module BcmsBlog
4
+ class BlogPostTest < ActiveSupport::TestCase
5
+
6
+ def setup
7
+ setup_blog_stubs
8
+ @post = create(:blog_post, :name => "This is the first Post")
9
+ end
10
+
11
+ test "cretates a valid instance" do
12
+ assert @post.valid?
13
+ end
14
+
15
+ test "requires name" do
16
+ assert build(:blog_post, :name => nil).invalid?
17
+ end
18
+
19
+ test "requires blog_id" do
20
+ assert build(:blog_post, :blog => nil).invalid?
21
+ end
22
+
23
+ test "requires author_id" do
24
+ assert build(:blog_post, :author => nil).invalid?
25
+ end
26
+
27
+ test "should set slug" do
28
+ assert_equal('this-is-the-first-post', @post.slug)
29
+ end
30
+
31
+ test "should set published_at when published" do
32
+ assert_nil @post.published_at
33
+ @post.publish!
34
+ assert_not_nil @post.published_at
35
+ end
36
+
37
+ test "BlogPost should find posts published between 2 given dates" do
38
+ @post.publish!
39
+ create(:blog_post, :published_at => 5.days.ago)
40
+ create(:blog_post, :published_at => 10.days.ago)
41
+ assert_equal(1, BlogPost.published_between(6.days.ago, 4.days.ago).count)
42
+ end
43
+
44
+ end
45
+ end
@@ -0,0 +1,42 @@
1
+ require 'test_helper'
2
+
3
+ class BlogTest < ActiveSupport::TestCase
4
+
5
+ def setup
6
+ setup_blog_stubs
7
+ @blog = create(:blog, :name => 'TestBlog')
8
+ end
9
+
10
+ test "creates a valid instance" do
11
+ assert @blog.valid?
12
+ end
13
+
14
+ test "requires name" do
15
+ assert build(:blog, :name => nil).invalid?
16
+ end
17
+
18
+ test "should be editable by user" do
19
+ group = create(:group, :group_type => create(:group_type,:cms_access => true))
20
+ user = create(:user, :groups => [group])
21
+ blog = build(:blog, :groups => [group])
22
+ assert blog.editable_by?(user)
23
+ assert !@blog.editable_by?(user)
24
+ end
25
+
26
+ test "should be editable by administrators" do
27
+ admin = create(:user)
28
+ admin.expects(:able_to?).with(:administrate).returns(true)
29
+ assert @blog.editable_by?(admin)
30
+ end
31
+
32
+ test "should create an instance of BlogPostPortlet" do
33
+ BlogPostPortlet.expects(:create!).with(:name => 'Test: Post Portlet',
34
+ :blog_id => 2,
35
+ :template => BlogPostPortlet.default_template,
36
+ :connect_to_page_id => nil,
37
+ :connect_to_container => 'main',
38
+ :publish_on_save => true).returns(BlogPostPortlet.new)
39
+ create(:blog, :name => 'Test')
40
+ end
41
+
42
+ end
@@ -0,0 +1,4 @@
1
+ require 'test_helper'
2
+
3
+ class FeedsHelperTest < ActionView::TestCase
4
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bcms_blog
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,19 +9,30 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2010-07-11 00:00:00.000000000 Z
12
+ date: 2012-05-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: browsercms
16
- requirement: &70330799771200 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
- - - ~>
19
+ - - <
20
20
  - !ruby/object:Gem::Version
21
- version: 3.3.0
21
+ version: 3.6.0
22
+ - - ! '>='
23
+ - !ruby/object:Gem::Version
24
+ version: 3.5.0.rc4
22
25
  type: :runtime
23
26
  prerelease: false
24
- version_requirements: *70330799771200
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - <
31
+ - !ruby/object:Gem::Version
32
+ version: 3.6.0
33
+ - - ! '>='
34
+ - !ruby/object:Gem::Version
35
+ version: 3.5.0.rc4
25
36
  description: The Blog Module for BrowserCMS
26
37
  email: github@browsermedia.com
27
38
  executables: []
@@ -30,49 +41,68 @@ extra_rdoc_files:
30
41
  - LICENSE.txt
31
42
  - README.markdown
32
43
  files:
33
- - app/controllers/cms/blog_comments_controller.rb
34
- - app/controllers/cms/blog_posts_controller.rb
35
- - app/controllers/cms/blogs_controller.rb
36
- - app/controllers/feeds_controller.rb
37
- - app/helpers/cms/blog_helper.rb
44
+ - app/assets/javascripts/bcms_blog/application.js
45
+ - app/assets/stylesheets/bcms_blog/application.css
46
+ - app/controllers/bcms_blog/blog_comments_controller.rb
47
+ - app/controllers/bcms_blog/blog_posts_controller.rb
48
+ - app/controllers/bcms_blog/blogs_controller.rb
49
+ - app/controllers/bcms_blog/feeds_controller.rb
50
+ - app/helpers/bcms_blog/blog_helper.rb
38
51
  - app/helpers/feeds_helper.rb
39
- - app/models/blog.rb
40
- - app/models/blog_comment.rb
41
- - app/models/blog_group_membership.rb
42
- - app/models/blog_observer.rb
43
- - app/models/blog_post.rb
52
+ - app/models/bcms_blog/blog.rb
53
+ - app/models/bcms_blog/blog_comment.rb
54
+ - app/models/bcms_blog/blog_group_membership.rb
55
+ - app/models/bcms_blog/blog_observer.rb
56
+ - app/models/bcms_blog/blog_post.rb
44
57
  - app/portlets/blog_post_portlet.rb
45
58
  - app/portlets/blog_posts_portlet.rb
46
- - app/views/cms/blog_comments/_form.html.erb
47
- - app/views/cms/blog_comments/render.html.erb
48
- - app/views/cms/blog_posts/_form.html.erb
49
- - app/views/cms/blog_posts/no_access.html.erb
50
- - app/views/cms/blog_posts/render.html.erb
51
- - app/views/cms/blogs/_form.html.erb
52
- - app/views/cms/blogs/admin_only.html.erb
53
- - app/views/cms/blogs/render.html.erb
54
- - app/views/feeds/index.rss.builder
55
- - app/views/layouts/templates/default.html.erb
59
+ - app/views/bcms_blog/blog_comments/_form.html.erb
60
+ - app/views/bcms_blog/blog_comments/render.html.erb
61
+ - app/views/bcms_blog/blog_posts/_form.html.erb
62
+ - app/views/bcms_blog/blog_posts/no_access.html.erb
63
+ - app/views/bcms_blog/blog_posts/render.html.erb
64
+ - app/views/bcms_blog/blogs/_form.html.erb
65
+ - app/views/bcms_blog/blogs/admin_only.html.erb
66
+ - app/views/bcms_blog/blogs/render.html.erb
67
+ - app/views/bcms_blog/feeds/index.rss.builder
56
68
  - app/views/partials/_blog_post.html.erb
57
69
  - app/views/portlets/blog_post/_form.html.erb
58
70
  - app/views/portlets/blog_post/render.html.erb
59
71
  - app/views/portlets/blog_posts/_form.html.erb
60
72
  - app/views/portlets/blog_posts/render.html.haml
61
- - LICENSE.txt
62
- - README.markdown
63
- - doc/migrate_to_20100427.rb
64
- - doc/README_FOR_APP
65
- - doc/release_notes.txt
73
+ - config/routes.rb
74
+ - db/bcms_blog.seeds.rb
66
75
  - db/migrate/20090415000000_create_blogs.rb
67
76
  - db/migrate/20090415000001_create_blog_posts.rb
68
77
  - db/migrate/20090415000002_create_blog_comments.rb
69
78
  - db/migrate/20090415000003_add_attachment_to_blog_posts.rb
70
79
  - db/migrate/20100521042244_add_moderate_comments_to_blog.rb
80
+ - db/migrate/20120529184028_v130.rb
71
81
  - lib/bcms_blog/engine.rb
72
- - lib/bcms_blog/routes.rb
82
+ - lib/bcms_blog/route_extensions.rb
83
+ - lib/bcms_blog/version.rb
73
84
  - lib/bcms_blog.rb
74
85
  - lib/generators/bcms_blog/install/install_generator.rb
75
86
  - lib/generators/bcms_blog/install/USAGE
87
+ - lib/tasks/bcms_blog_tasks.rake
88
+ - LICENSE.txt
89
+ - README.markdown
90
+ - Gemfile
91
+ - test/bcms_blog_test.rb
92
+ - test/functional/cms/blog_posts_controller_test.rb
93
+ - test/functional/cms/blogs_controller_test.rb
94
+ - test/integration/blog_controller_test.rb
95
+ - test/integration/blog_post_test.rb
96
+ - test/support/blog_test_helper.rb
97
+ - test/support/factories.rb
98
+ - test/support/factory_girl_support.rb
99
+ - test/test_helper.rb
100
+ - test/test_logging.rb
101
+ - test/unit/blog_comment_test.rb
102
+ - test/unit/blog_observer_test.rb
103
+ - test/unit/blog_post_test.rb
104
+ - test/unit/blog_test.rb
105
+ - test/unit/helpers/feeds_helper_test.rb
76
106
  homepage: http://www.github.com/browsermedia/bcms_blog
77
107
  licenses: []
78
108
  post_install_message:
@@ -87,17 +117,35 @@ required_ruby_version: !ruby/object:Gem::Requirement
87
117
  version: '0'
88
118
  segments:
89
119
  - 0
90
- hash: -3905715097688536829
120
+ hash: -3961525454364369353
91
121
  required_rubygems_version: !ruby/object:Gem::Requirement
92
122
  none: false
93
123
  requirements:
94
124
  - - ! '>='
95
125
  - !ruby/object:Gem::Version
96
126
  version: '0'
127
+ segments:
128
+ - 0
129
+ hash: -3961525454364369353
97
130
  requirements: []
98
131
  rubyforge_project: bcms_blog
99
- rubygems_version: 1.8.10
132
+ rubygems_version: 1.8.24
100
133
  signing_key:
101
134
  specification_version: 3
102
135
  summary: The Blog Module for BrowserCMS
103
- test_files: []
136
+ test_files:
137
+ - test/bcms_blog_test.rb
138
+ - test/functional/cms/blog_posts_controller_test.rb
139
+ - test/functional/cms/blogs_controller_test.rb
140
+ - test/integration/blog_controller_test.rb
141
+ - test/integration/blog_post_test.rb
142
+ - test/support/blog_test_helper.rb
143
+ - test/support/factories.rb
144
+ - test/support/factory_girl_support.rb
145
+ - test/test_helper.rb
146
+ - test/test_logging.rb
147
+ - test/unit/blog_comment_test.rb
148
+ - test/unit/blog_observer_test.rb
149
+ - test/unit/blog_post_test.rb
150
+ - test/unit/blog_test.rb
151
+ - test/unit/helpers/feeds_helper_test.rb
@@ -1,3 +0,0 @@
1
- class Cms::BlogCommentsController < Cms::ContentBlockController
2
-
3
- end
@@ -1,35 +0,0 @@
1
- class Cms::BlogPostsController < Cms::ContentBlockController
2
- before_filter :show_no_access_if_none_editable
3
-
4
- def build_block
5
- super
6
- ensure_blog_editable
7
- @block.author = current_user
8
- end
9
-
10
- def load_block
11
- super
12
- ensure_blog_editable
13
- end
14
-
15
- def load_blocks
16
- super
17
- @blocks.delete_if { |b| !b.editable_by?(current_user) }
18
- end
19
-
20
- private
21
-
22
- # If the current user is not able to edit any blog, just show them a page saying so
23
- def show_no_access_if_none_editable
24
- if Blog.editable_by(current_user).empty?
25
- render :action => "no_access"
26
- end
27
- end
28
-
29
- # Ensure the current user can actually edit the blog this blog post is associated with
30
- def ensure_blog_editable
31
- if @block.blog
32
- raise Cms::Errors::AccessDenied unless @block.blog.editable_by?(current_user)
33
- end
34
- end
35
- end
@@ -1,11 +0,0 @@
1
- class Cms::BlogsController < Cms::ContentBlockController
2
- check_permissions :administrate, :except => :index
3
-
4
- def index
5
- if current_user.able_to?(:administrate)
6
- super
7
- else
8
- render :action => "admin_only"
9
- end
10
- end
11
- end
@@ -1,8 +0,0 @@
1
- class FeedsController < ApplicationController
2
-
3
- def index
4
- @blog = Blog.find(params[:blog_id])
5
- @blog_posts = @blog.posts.published.all(:limit => 10, :order => "published_at DESC")
6
- end
7
-
8
- end
@@ -1,20 +0,0 @@
1
- module Cms::BlogHelper
2
- # We can't call it 'blog_path' because that would conflict with the actual named route method if there's a blog named "Blog".
3
- def _blog_path(blog, route_name, route_params)
4
- send("#{blog.name_for_path}_#{route_name}_path", route_params)
5
- end
6
-
7
- def _blog_post_path(blog_post)
8
- send("#{blog_post.route_name}_path", blog_post.route_params)
9
- end
10
-
11
- def feeds_link_tag_for(name)
12
- blog = Blog.find_by_name(name)
13
- auto_discovery_link_tag(:rss, blog_feeds_url(:blog_id => blog), :title => "#{blog.name}")
14
- end
15
-
16
- def new_comment_path(portlet)
17
- url_for(:controller=>"cms/portlet", :action=>"execute_handler", :id=>portlet.id, :handler=>"create_comment")
18
- end
19
- end
20
-
data/app/models/blog.rb DELETED
@@ -1,95 +0,0 @@
1
- class Blog < ActiveRecord::Base
2
- acts_as_content_block
3
-
4
- has_many :posts, :class_name => "BlogPost", :conditions => { :published => true }, :order => "published_at desc"
5
- has_many :blog_group_memberships
6
- has_many :groups, :through => :blog_group_memberships
7
-
8
- validates_presence_of :name
9
- validates_uniqueness_of :name
10
-
11
- scope :editable_by, lambda { |user|
12
- if user.able_to?(:administrate)
13
- { }
14
- else
15
- { :include => :groups, :conditions => ["groups.id IN (?)", user.group_ids.join(",")] }
16
- end
17
- }
18
-
19
- def self.default_template
20
- template_file = ActionController::Base.view_paths.map do |vp|
21
- path = vp.to_s.first == "/" ? vp.to_s : File.join(Rails.root, vp.to_s)
22
- File.join(path, "cms/blogs/render.html.erb")
23
- end.detect{|f| File.exists? f }
24
- template_file ? open(template_file){|f| f.read } : ""
25
- end
26
-
27
- def self.posts_finder(finder, options)
28
- if options[:tag]
29
- finder = finder.tagged_with(options[:tag])
30
- end
31
- if options[:exclude_tags]
32
- finder = finder.not_tagged_with(options[:exclude_tags])
33
- end
34
- if options[:category] || options[:category_id]
35
- category_type = CategoryType.named("Blog Post").first
36
- category = category_type.categories.named(options[:category]).first if options[:category]
37
- category = category_type.categories. find(options[:category_id]) if options[:category_id]
38
- finder = finder.in_category(category)
39
- end
40
- finder
41
- end
42
-
43
- def render
44
- @blog = self
45
- finder = @blog.posts.published
46
- finder = Blog.posts_finder(finder, params)
47
-
48
- if params[:year] && params[:month] && params[:day]
49
- @date = Date.new(params[:year].to_i, params[:month].to_i, params[:day].to_i)
50
- finder = posts.published_between(@date, @date + 1.day)
51
- elsif params[:year] && params[:month]
52
- @date = Date.new(params[:year].to_i, params[:month].to_i)
53
- finder = posts.published_between(@date, @date + 1.month)
54
- elsif params[:year]
55
- @date = Date.new(params[:year].to_i)
56
- finder = posts.published_between(@date, @date + 1.year)
57
- end
58
-
59
- @blog_posts = finder.all(:limit => 25, :order => "published_at desc")
60
- raise ActiveRecord::RecordNotFound.new("No posts found") if @blog_posts.empty?
61
-
62
- if params[:category]
63
- @page_title = "#{params[:category]}"
64
- elsif params[:tag]
65
- @page_title = "Posts tagged with #{params[:tag]}"
66
- elsif params[:year] && params[:month] && params[:day]
67
- @page_title = "Posts from #{@date.to_s(:long)}"
68
- elsif params[:year] && params[:month]
69
- @page_title = "Posts from #{Date::MONTHNAMES[@date.month]} #{@date.year}"
70
- elsif params[:year]
71
- @page_title = "Posts from #{@date.year}"
72
- end
73
- end
74
-
75
- def inline_options
76
- {:inline => self.template}
77
- end
78
-
79
- def self.default_order
80
- "name"
81
- end
82
-
83
- def editable_by?(user)
84
- user.able_to?(:administrate) || !(group_ids & user.group_ids).empty?
85
- end
86
-
87
- def potential_authors
88
- groups.map(&:users).flatten.uniq
89
- end
90
-
91
- def name_for_path
92
- name.to_slug.gsub('-', '_')
93
- end
94
-
95
- end
@@ -1,34 +0,0 @@
1
- class BlogComment < ActiveRecord::Base
2
- acts_as_content_block :is_searachable => "body"
3
- belongs_to :post, :class_name => "BlogPost", :counter_cache => "comments_count"
4
-
5
- validates_presence_of :post_id, :author, :body
6
-
7
- before_create :publish_if_comments_are_enabled
8
-
9
- def publish_if_comments_are_enabled
10
- self.published = true unless post.blog.moderate_comments?
11
- end
12
-
13
- def self.default_order
14
- "blog_comments.created_at desc"
15
- end
16
-
17
- def self.default_order_for_search
18
- default_order
19
- end
20
-
21
- def self.columns_for_index
22
- [ {:label => "Comment", :method => :name, :order => "blog_comments.body" },
23
- {:label => "Created At", :method => :formatted_created_at, :order => "blog_comments.created_at"} ]
24
- end
25
-
26
- def name
27
- body ? body[0..50] : ""
28
- end
29
-
30
- def formatted_created_at
31
- created_at.to_s(:date)
32
- end
33
-
34
- end
@@ -1,4 +0,0 @@
1
- class BlogGroupMembership < ActiveRecord::Base
2
- belongs_to :blog
3
- belongs_to :group
4
- end