refinerycms-blog 1.3.2 → 1.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.
Files changed (39) hide show
  1. data/app/controllers/blog/posts_controller.rb +14 -1
  2. data/app/models/blog_post.rb +15 -9
  3. data/app/models/categorization.rb +2 -0
  4. data/app/views/admin/blog/posts/_form.html.erb +8 -1
  5. data/app/views/blog/posts/_post.html.erb +2 -4
  6. data/app/views/blog/posts/archive.html.erb +1 -2
  7. data/app/views/blog/posts/index.html.erb +1 -0
  8. data/app/views/blog/posts/show.html.erb +1 -0
  9. data/app/views/blog/posts/tagged.html.erb +22 -0
  10. data/app/views/blog/shared/_post.html.erb +7 -3
  11. data/app/views/blog/shared/_tags.html.erb +8 -0
  12. data/changelog.md +6 -1
  13. data/config/locales/cs.yml +128 -0
  14. data/config/locales/en.yml +5 -0
  15. data/config/locales/nb.yml +7 -0
  16. data/config/locales/nl.yml +120 -10
  17. data/config/locales/pt-BR.yml +3 -0
  18. data/config/locales/sk.yml +128 -0
  19. data/config/locales/zh-CN.yml +128 -0
  20. data/config/routes.rb +2 -1
  21. data/db/migrate/3_acts_as_taggable_on_migration.rb +28 -0
  22. data/db/migrate/4_create_seo_meta_for_blog.rb +25 -0
  23. data/db/seeds/refinerycms_blog.rb +18 -14
  24. data/features/authors.feature +4 -4
  25. data/features/support/factories/blog_categories.rb +2 -1
  26. data/features/support/factories/blog_comments.rb +2 -4
  27. data/features/support/factories/blog_posts.rb +3 -0
  28. data/features/support/step_definitions/tags_steps.rb +11 -0
  29. data/features/tags.feature +26 -0
  30. data/lib/gemspec.rb +12 -6
  31. data/lib/refinery/blog/version.rb +17 -0
  32. data/lib/refinerycms-blog.rb +10 -9
  33. data/readme.md +1 -1
  34. data/spec/models/blog_category_spec.rb +41 -0
  35. data/spec/models/{blog_comments_spec.rb → blog_comment_spec.rb} +0 -0
  36. data/spec/models/blog_post_spec.rb +187 -0
  37. metadata +53 -10
  38. data/spec/models/blog_categories_spec.rb +0 -41
  39. data/spec/models/blog_posts_spec.rb +0 -176
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
- require File.expand_path('../refinerycms-blog.rb', __FILE__)
3
- version = ::Refinery::Blog.version
2
+ require File.expand_path('../refinery/blog/version', __FILE__)
3
+ version = ::Refinery::Blog::Version.to_s
4
4
  raise "Could not get version so gemspec can not be built" if version.nil?
5
5
  files = Dir.glob("**/*").flatten.reject do |file|
6
6
  file =~ /\.gem(spec)?$/
@@ -14,12 +14,18 @@ Gem::Specification.new do |s|
14
14
  s.date = %q{#{Time.now.strftime('%Y-%m-%d')}}
15
15
  s.summary = %q{Ruby on Rails blogging engine for RefineryCMS.}
16
16
  s.email = %q{info@refinerycms.com}
17
- s.homepage = %q{http://refinerycms.com}
18
- s.authors = %w(Resolve\\ Digital Neoteric\\ Design)
17
+ s.homepage = %q{http://refinerycms.com/blog}
18
+ s.authors = ['Resolve Digital', 'Neoteric Design']
19
19
  s.require_paths = %w(lib)
20
20
 
21
- s.add_dependency 'refinerycms', '>= 0.9.8'
22
- s.add_dependency 'filters_spam', '~> 0.2'
21
+ # Runtime dependencies
22
+ s.add_dependency 'refinerycms-core', '~> 0.9.9.22'
23
+ s.add_dependency 'filters_spam', '~> 0.2'
24
+ s.add_dependency 'acts-as-taggable-on'
25
+ s.add_dependency 'seo_meta', '~> 1.1.0'
26
+
27
+ # Development dependencies
28
+ s.add_development_dependency 'factory_girl'
23
29
 
24
30
  s.files = %w(
25
31
  #{files.join("\n ")}
@@ -0,0 +1,17 @@
1
+ module Refinery
2
+ module Blog
3
+ class Version
4
+ @major = 1
5
+ @minor = 4
6
+ @tiny = 0
7
+
8
+ class << self
9
+ attr_reader :major, :minor, :tiny
10
+
11
+ def to_s
12
+ [@major, @minor, @tiny].compact.join('.')
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -3,6 +3,13 @@ require 'filters_spam'
3
3
  module Refinery
4
4
  module Blog
5
5
 
6
+ autoload :Version, File.expand_path('../refinery/blog/version', __FILE__)
7
+ class << self
8
+ def version
9
+ ::Refinery::Blog::Version.to_s
10
+ end
11
+ end
12
+
6
13
  class Engine < Rails::Engine
7
14
  initializer 'blog serves assets' do |app|
8
15
  app.middleware.insert_after ::ActionDispatch::Static, ::ActionDispatch::Static, "#{root}/public"
@@ -21,25 +28,19 @@ module Refinery
21
28
  # refinery 0.9.8 had a bug that we later found through using this engine.
22
29
  # the bug was that the plugin urls were not :controller => '/admin/whatever'
23
30
  if Refinery.version == '0.9.8'
24
- ::Refinery::Plugin.class_eval %{
31
+ ::Refinery::Plugin.class_eval do
25
32
  alias_method :old_url, :url
26
33
 
27
34
  def url
28
35
  if (plugin_url = self.old_url).is_a?(Hash) and plugin_url[:controller] =~ %r{^admin}
29
- plugin_url[:controller] = "/\#{plugin_url[:controller]}"
36
+ plugin_url[:controller] = "/#{plugin_url[:controller]}"
30
37
  end
31
38
 
32
39
  plugin_url
33
40
  end
34
- }
41
+ end
35
42
  end
36
43
  end
37
44
  end if defined?(Rails::Engine)
38
-
39
- class << self
40
- def version
41
- %q{1.3.2}
42
- end
43
- end
44
45
  end
45
46
  end
data/readme.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Simple blog engine for [Refinery CMS](http://refinerycms.com). It supports posts, categories and comments.
4
4
 
5
- Refinery CMS Blog supports Rails 2.3.x using the [Rails 2.3.x stable branch](http://github.com/resolve/refinerycms-blog/tree/rails2-stable).
5
+ This version of `refinerycms-blog` supports Rails 3.0.x. To use Rails 2.3.x use the [refinerycms-blog "Rails 2.3.x stable branch"](http://github.com/resolve/refinerycms-blog/tree/rails2-stable).
6
6
 
7
7
  Options:
8
8
 
@@ -0,0 +1,41 @@
1
+ require 'spec_helper'
2
+ Dir[File.expand_path('../../../features/support/factories/*.rb', __FILE__)].each{|factory| require factory}
3
+
4
+ describe BlogCategory do
5
+ before(:each) do
6
+ @blog_category = Factory(:blog_category)
7
+ end
8
+
9
+ describe "validations" do
10
+ it "requires title" do
11
+ Factory.build(:blog_category, :title => "").should_not be_valid
12
+ end
13
+
14
+ it "won't allow duplicate titles" do
15
+ Factory.build(:blog_category, :title => @blog_category.title).should_not be_valid
16
+ end
17
+ end
18
+
19
+ describe "blog posts association" do
20
+ it "has a posts attribute" do
21
+ @blog_category.should respond_to(:posts)
22
+ end
23
+
24
+ it "returns posts by published_at date in descending order" do
25
+ first_post = @blog_category.posts.create!({ :title => "Breaking News: Joe Sak is hot stuff you guys!!", :body => "True story.", :published_at => Time.now.yesterday })
26
+ latest_post = @blog_category.posts.create!({ :title => "parndt is p. okay", :body => "For a kiwi.", :published_at => Time.now })
27
+
28
+ @blog_category.posts.first.should == latest_post
29
+ end
30
+
31
+ end
32
+
33
+ describe "#post_count" do
34
+ it "returns post count in category" do
35
+ 2.times do
36
+ @blog_category.posts << Factory(:post)
37
+ end
38
+ @blog_category.post_count.should == 2
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,187 @@
1
+ require 'spec_helper'
2
+ Dir[File.expand_path('../../../features/support/factories/*.rb', __FILE__)].each{|factory| require factory}
3
+
4
+ describe BlogPost do
5
+ let(:blog_post ) { Factory :post }
6
+
7
+ describe "validations" do
8
+ it "requires title" do
9
+ Factory.build(:post, :title => "").should_not be_valid
10
+ end
11
+
12
+ it "won't allow duplicate titles" do
13
+ Factory.build(:post, :title => blog_post.title).should_not be_valid
14
+ end
15
+
16
+ it "requires body" do
17
+ Factory.build(:post, :body => nil).should_not be_valid
18
+ end
19
+ end
20
+
21
+ describe "comments association" do
22
+
23
+ it "have a comments attribute" do
24
+ blog_post.should respond_to(:comments)
25
+ end
26
+
27
+ it "destroys associated comments" do
28
+ Factory(:blog_comment, :blog_post_id => blog_post.id)
29
+ blog_post.destroy
30
+ BlogComment.find_by_blog_post_id(blog_post.id).should == nil
31
+ end
32
+ end
33
+
34
+ describe "categories association" do
35
+ it "have categories attribute" do
36
+ blog_post.should respond_to(:categories)
37
+ end
38
+ end
39
+
40
+ describe "tags" do
41
+ it "acts as taggable" do
42
+ blog_post.should respond_to(:tag_list)
43
+
44
+ #the factory has default tags, including 'chicago'
45
+ blog_post.tag_list.should include("chicago")
46
+ end
47
+ end
48
+
49
+ describe "authors" do
50
+ it "are authored" do
51
+ BlogPost.instance_methods.map(&:to_sym).should include(:author)
52
+ end
53
+ end
54
+
55
+ describe "by_archive scope" do
56
+ before do
57
+ @blog_post1 = Factory(:post, :published_at => Date.new(2011, 3, 11))
58
+ @blog_post2 = Factory(:post, :published_at => Date.new(2011, 3, 12))
59
+
60
+ #2 months before
61
+ Factory(:post, :published_at => Date.new(2011, 1, 10))
62
+ end
63
+
64
+ it "returns all posts from specified month" do
65
+ #check for this month
66
+ date = "03/2011"
67
+ BlogPost.by_archive(Time.parse(date)).count.should == 2
68
+ BlogPost.by_archive(Time.parse(date)).should == [@blog_post2, @blog_post1]
69
+ end
70
+ end
71
+
72
+ describe "all_previous scope" do
73
+ before do
74
+ @blog_post1 = Factory(:post, :published_at => Time.now - 2.months)
75
+ @blog_post2 = Factory(:post, :published_at => Time.now - 1.month)
76
+ Factory :post, :published_at => Time.now
77
+ end
78
+
79
+ it "returns all posts from previous months" do
80
+ BlogPost.all_previous.count.should == 2
81
+ BlogPost.all_previous.should == [@blog_post2, @blog_post1]
82
+ end
83
+ end
84
+
85
+ describe "live scope" do
86
+ before do
87
+ @blog_post1 = Factory(:post, :published_at => Time.now.advance(:minutes => -2))
88
+ @blog_post2 = Factory(:post, :published_at => Time.now.advance(:minutes => -1))
89
+ Factory(:post, :draft => true)
90
+ Factory(:post, :published_at => Time.now + 1.minute)
91
+ end
92
+
93
+ it "returns all posts which aren't in draft and pub date isn't in future" do
94
+ BlogPost.live.count.should == 2
95
+ BlogPost.live.should == [@blog_post2, @blog_post1]
96
+ end
97
+ end
98
+
99
+ describe "uncategorized scope" do
100
+ before do
101
+ @uncategorized_blog_post = Factory(:post)
102
+ @categorized_blog_post = Factory(:post)
103
+
104
+ @categorized_blog_post.categories << Factory(:blog_category)
105
+ end
106
+
107
+ it "returns uncategorized posts if they exist" do
108
+ BlogPost.uncategorized.should include @uncategorized_blog_post
109
+ BlogPost.uncategorized.should_not include @categorized_blog_post
110
+ end
111
+ end
112
+
113
+ describe "#live?" do
114
+ it "returns true if post is not in draft and it's published" do
115
+ Factory(:post).live?.should be_true
116
+ end
117
+
118
+ it "returns false if post is in draft" do
119
+ Factory(:post, :draft => true).live?.should be_false
120
+ end
121
+
122
+ it "returns false if post pub date is in future" do
123
+ Factory(:post, :published_at => Time.now.advance(:minutes => 1)).live?.should be_false
124
+ end
125
+ end
126
+
127
+ describe "#next" do
128
+ before do
129
+ Factory(:post, :published_at => Time.now.advance(:minutes => -1))
130
+ @blog_post = Factory(:post)
131
+ end
132
+
133
+ it "returns next article when called on current article" do
134
+ BlogPost.last.next.should == @blog_post
135
+ end
136
+ end
137
+
138
+ describe "#prev" do
139
+ before do
140
+ Factory(:post)
141
+ @blog_post = Factory(:post, :published_at => Time.now.advance(:minutes => -1))
142
+ end
143
+
144
+ it "returns previous article when called on current article" do
145
+ BlogPost.first.prev.should == @blog_post
146
+ end
147
+ end
148
+
149
+ describe "#category_ids=" do
150
+ before do
151
+ @cat1 = Factory(:blog_category, :id => 1)
152
+ @cat2 = Factory(:blog_category, :id => 2)
153
+ @cat3 = Factory(:blog_category, :id => 3)
154
+ blog_post.category_ids = [1,2,"","",3]
155
+ end
156
+
157
+ it "rejects blank category ids" do
158
+ blog_post.categories.count.should == 3
159
+ end
160
+
161
+ it "returns array of categories based on given ids" do
162
+ blog_post.categories.should == [@cat1, @cat2, @cat3]
163
+ end
164
+ end
165
+
166
+ describe ".comments_allowed?" do
167
+ context "with RefinerySetting comments_allowed set to true" do
168
+ before do
169
+ RefinerySetting.set(:comments_allowed, { :scoping => 'blog', :value => true })
170
+ end
171
+
172
+ it "should be true" do
173
+ BlogPost.comments_allowed?.should be_true
174
+ end
175
+ end
176
+
177
+ context "with RefinerySetting comments_allowed set to true" do
178
+ before do
179
+ RefinerySetting.set(:comments_allowed, { :scoping => 'blog', :value => false })
180
+ end
181
+
182
+ it "should be false" do
183
+ BlogPost.comments_allowed?.should be_false
184
+ end
185
+ end
186
+ end
187
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: refinerycms-blog
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.3.2
5
+ version: 1.4.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Resolve Digital
@@ -11,18 +11,18 @@ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
13
 
14
- date: 2011-03-09 00:00:00 +13:00
14
+ date: 2011-05-26 00:00:00 +12:00
15
15
  default_executable:
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
- name: refinerycms
18
+ name: refinerycms-core
19
19
  prerelease: false
20
20
  requirement: &id001 !ruby/object:Gem::Requirement
21
21
  none: false
22
22
  requirements:
23
- - - ">="
23
+ - - ~>
24
24
  - !ruby/object:Gem::Version
25
- version: 0.9.8
25
+ version: 0.9.9.22
26
26
  type: :runtime
27
27
  version_requirements: *id001
28
28
  - !ruby/object:Gem::Dependency
@@ -36,6 +36,39 @@ dependencies:
36
36
  version: "0.2"
37
37
  type: :runtime
38
38
  version_requirements: *id002
39
+ - !ruby/object:Gem::Dependency
40
+ name: acts-as-taggable-on
41
+ prerelease: false
42
+ requirement: &id003 !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: "0"
48
+ type: :runtime
49
+ version_requirements: *id003
50
+ - !ruby/object:Gem::Dependency
51
+ name: seo_meta
52
+ prerelease: false
53
+ requirement: &id004 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ~>
57
+ - !ruby/object:Gem::Version
58
+ version: 1.1.0
59
+ type: :runtime
60
+ version_requirements: *id004
61
+ - !ruby/object:Gem::Dependency
62
+ name: factory_girl
63
+ prerelease: false
64
+ requirement: &id005 !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: "0"
70
+ type: :development
71
+ version_requirements: *id005
39
72
  description: A really straightforward open source Ruby on Rails blog engine designed for integration with RefineryCMS.
40
73
  email: info@refinerycms.com
41
74
  executables: []
@@ -89,11 +122,14 @@ files:
89
122
  - app/views/blog/posts/index.html.erb
90
123
  - app/views/blog/posts/index.rss.builder
91
124
  - app/views/blog/posts/show.html.erb
125
+ - app/views/blog/posts/tagged.html.erb
92
126
  - app/views/blog/shared/_categories.html.erb
93
127
  - app/views/blog/shared/_post.html.erb
94
128
  - app/views/blog/shared/_posts.html.erb
95
129
  - app/views/blog/shared/_rss_feed.html.erb
130
+ - app/views/blog/shared/_tags.html.erb
96
131
  - changelog.md
132
+ - config/locales/cs.yml
97
133
  - config/locales/de.yml
98
134
  - config/locales/en.yml
99
135
  - config/locales/es.yml
@@ -104,9 +140,13 @@ files:
104
140
  - config/locales/pl.yml
105
141
  - config/locales/pt-BR.yml
106
142
  - config/locales/ru.yml
143
+ - config/locales/sk.yml
144
+ - config/locales/zh-CN.yml
107
145
  - config/routes.rb
108
146
  - db/migrate/1_create_blog_structure.rb
109
147
  - db/migrate/2_add_user_id_to_blog_posts.rb
148
+ - db/migrate/3_acts_as_taggable_on_migration.rb
149
+ - db/migrate/4_create_seo_meta_for_blog.rb
110
150
  - db/seeds/refinerycms_blog.rb
111
151
  - features/authors.feature
112
152
  - features/support/factories/blog_categories.rb
@@ -114,8 +154,11 @@ files:
114
154
  - features/support/factories/blog_posts.rb
115
155
  - features/support/paths.rb
116
156
  - features/support/step_definitions/authors_steps.rb
157
+ - features/support/step_definitions/tags_steps.rb
158
+ - features/tags.feature
117
159
  - lib/gemspec.rb
118
160
  - lib/generators/refinerycms_blog_generator.rb
161
+ - lib/refinery/blog/version.rb
119
162
  - lib/refinerycms-blog.rb
120
163
  - public/images/refinerycms-blog/icons/cog.png
121
164
  - public/images/refinerycms-blog/icons/comment.png
@@ -136,11 +179,11 @@ files:
136
179
  - public/stylesheets/refinery/refinerycms-blog.css
137
180
  - public/stylesheets/refinerycms-blog.css
138
181
  - readme.md
139
- - spec/models/blog_categories_spec.rb
140
- - spec/models/blog_comments_spec.rb
141
- - spec/models/blog_posts_spec.rb
182
+ - spec/models/blog_category_spec.rb
183
+ - spec/models/blog_comment_spec.rb
184
+ - spec/models/blog_post_spec.rb
142
185
  has_rdoc: true
143
- homepage: http://refinerycms.com
186
+ homepage: http://refinerycms.com/blog
144
187
  licenses: []
145
188
 
146
189
  post_install_message:
@@ -163,7 +206,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
163
206
  requirements: []
164
207
 
165
208
  rubyforge_project:
166
- rubygems_version: 1.6.1
209
+ rubygems_version: 1.6.2
167
210
  signing_key:
168
211
  specification_version: 3
169
212
  summary: Ruby on Rails blogging engine for RefineryCMS.