refinerycms-blog 1.6.1 → 1.6.2
Sign up to get free protection for your applications and to get access to all the features.
- data/app/helpers/blog_posts_helper.rb +11 -0
- data/app/models/blog_post.rb +1 -1
- data/app/views/admin/blog/posts/_form.css.erb +8 -0
- data/app/views/admin/blog/posts/_form.html.erb +9 -1
- data/app/views/admin/blog/posts/_form.js.erb +19 -1
- data/app/views/admin/blog/posts/_teaser_part.html.erb +11 -0
- data/app/views/blog/shared/_post.html.erb +2 -4
- data/changelog.md +7 -0
- data/config/locales/en.yml +2 -0
- data/config/routes.rb +1 -1
- data/db/migrate/7_add_custom_teaser_field_to_blog_posts.rb +10 -0
- data/features/category.feature +1 -1
- data/features/support/factories/blog_comments.rb +1 -1
- data/features/support/factories/blog_posts.rb +1 -1
- data/features/support/step_definitions/category_steps.rb +4 -4
- data/features/support/step_definitions/tags_steps.rb +3 -1
- data/lib/gemspec.rb +2 -4
- data/lib/refinery/blog/version.rb +1 -1
- data/readme.md +1 -1
- data/refinerycms-blog.gemspec +202 -0
- data/spec/models/blog_category_spec.rb +5 -5
- data/spec/models/blog_comment_spec.rb +1 -1
- data/spec/models/blog_post_spec.rb +44 -38
- metadata +97 -56
@@ -41,4 +41,15 @@ module BlogPostsHelper
|
|
41
41
|
def next_or_previous?(post)
|
42
42
|
post.next.present? or post.prev.present?
|
43
43
|
end
|
44
|
+
|
45
|
+
def blog_post_teaser(post)
|
46
|
+
if post.respond_to?(:custom_teaser) && post.custom_teaser.present?
|
47
|
+
post.custom_teaser.html_safe
|
48
|
+
else
|
49
|
+
truncate(post.body, {
|
50
|
+
:length => RefinerySetting.find_or_set(:blog_post_teaser_length, 250),
|
51
|
+
:preserve_html_tags => true
|
52
|
+
}).html_safe
|
53
|
+
end
|
54
|
+
end
|
44
55
|
end
|
data/app/models/blog_post.rb
CHANGED
@@ -26,7 +26,7 @@ class BlogPost < ActiveRecord::Base
|
|
26
26
|
:approximate_ascii => RefinerySetting.find_or_set(:approximate_ascii, false, :scoping => 'blog'),
|
27
27
|
:strip_non_ascii => RefinerySetting.find_or_set(:strip_non_ascii, false, :scoping => 'blog')
|
28
28
|
|
29
|
-
attr_accessible :title, :body, :tag_list, :draft, :published_at, :browser_title, :meta_keywords, :meta_description, :user_id, :category_ids, :custom_url
|
29
|
+
attr_accessible :title, :body, :tag_list, :draft, :published_at, :browser_title, :meta_keywords, :meta_description, :user_id, :category_ids, :custom_url, :custom_teaser
|
30
30
|
|
31
31
|
scope :by_archive, lambda { |archive_date|
|
32
32
|
where(['published_at between ? and ?', archive_date.beginning_of_month, archive_date.end_of_month])
|
@@ -4,4 +4,12 @@
|
|
4
4
|
margin: 0px;
|
5
5
|
padding: 0px;
|
6
6
|
}
|
7
|
+
a#copy_body_link {
|
8
|
+
background: url("/images/refinery/icons/add.png") no-repeat scroll 0 6px transparent;
|
9
|
+
border-bottom: 0 none;
|
10
|
+
display: inline;
|
11
|
+
line-height: 29px;
|
12
|
+
margin-top: 0;
|
13
|
+
padding-left: 20px;
|
14
|
+
}
|
7
15
|
</style>
|
@@ -13,9 +13,12 @@
|
|
13
13
|
<div class='field'>
|
14
14
|
<div id='page-tabs' class='clearfix ui-tabs ui-widget ui-widget-content ui-corner-all'>
|
15
15
|
<ul id='page_parts'>
|
16
|
-
<li class='ui-state-default'>
|
16
|
+
<li class='ui-state-default ui-state-active'>
|
17
17
|
<%= link_to "Body", "#page_part_body" %>
|
18
18
|
</li>
|
19
|
+
<li class='ui-state-default'>
|
20
|
+
<%= link_to "Teaser", "#page_part_teaser" %>
|
21
|
+
</li>
|
19
22
|
<% Refinery::Blog.tabs.each_with_index do |tab, tab_index| %>
|
20
23
|
<li class='ui-state-default' id="custom_<%= tab.name %>_tab">
|
21
24
|
<%= link_to tab.name.titleize, "#custom_tab_#{tab_index}" %>
|
@@ -31,6 +34,11 @@
|
|
31
34
|
:f => f,
|
32
35
|
:part_index => (part_index += 1),
|
33
36
|
} -%>
|
37
|
+
<%= render :partial => 'teaser_part',
|
38
|
+
:locals => {
|
39
|
+
:f => f,
|
40
|
+
:part_index => (part_index += 1),
|
41
|
+
} if f.object.respond_to?(:custom_teaser) -%>
|
34
42
|
<% Refinery::Blog.tabs.each_with_index do |tab, tab_index| %>
|
35
43
|
<div class='page_part' id='<%= "custom_tab_#{tab_index}" %>'>
|
36
44
|
<%= render :partial => tab.partial, :locals => {:f => f} %>
|
@@ -1,5 +1,23 @@
|
|
1
1
|
<script>
|
2
2
|
(function($) {
|
3
|
-
$(
|
3
|
+
$(function() {
|
4
|
+
$('#page-tabs').tabs();
|
5
|
+
$('#copy_body_link').click(function(event) {
|
6
|
+
// Find the WYMEditor that maps to the custom_teaser field
|
7
|
+
var teaserTextArea = $('#blog_post_custom_teaser')[0];
|
8
|
+
var teaserEditor = null;
|
9
|
+
$.each(WYMeditor.INSTANCES, function(index, editor) {
|
10
|
+
if (editor._element[0] == teaserTextArea) {
|
11
|
+
teaserEditor = editor;
|
12
|
+
}
|
13
|
+
});
|
14
|
+
|
15
|
+
if (teaserEditor) {
|
16
|
+
teaserEditor.html($('#blog_post_body').attr('value'));
|
17
|
+
}
|
18
|
+
|
19
|
+
event.preventDefault();
|
20
|
+
});
|
21
|
+
});
|
4
22
|
})(jQuery);
|
5
23
|
</script>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<div class='page_part' id='page_part_teaser'>
|
2
|
+
<%= f.text_area :custom_teaser, :rows => 20, :class => 'wymeditor widest' -%>
|
3
|
+
<p>
|
4
|
+
<span class='clearfix label_inline_with_link'>
|
5
|
+
<%= link_to t('admin.blog.posts.form.copy_body'), "#",
|
6
|
+
:id => 'copy_body_link',
|
7
|
+
:title => t('admin.blog.posts.form.copy_body_help') %>
|
8
|
+
</span>
|
9
|
+
</p>
|
10
|
+
</div>
|
11
|
+
|
@@ -12,7 +12,7 @@
|
|
12
12
|
<%=raw categories.collect { |category| link_to category.title, blog_category_url(category) }.to_sentence %>
|
13
13
|
</aside>
|
14
14
|
<% end %>
|
15
|
-
<% if (tags = post.
|
15
|
+
<% if (tags = post.tags).any? %>
|
16
16
|
<aside class='tagged'>
|
17
17
|
<%= t('tagged', :scope => 'blog.posts.show') %>
|
18
18
|
<%=raw tags.collect { |tag| link_to tag, tagged_posts_path(tag.id, tag.name.parameterize) }.to_sentence %>
|
@@ -21,9 +21,7 @@
|
|
21
21
|
</section>
|
22
22
|
</header>
|
23
23
|
<section class='clearfix'>
|
24
|
-
<%=
|
25
|
-
:length => RefinerySetting.find_or_set(:blog_post_teaser_length, 250),
|
26
|
-
:preserve_html_tags => true) %>
|
24
|
+
<%= blog_post_teaser(post) %>
|
27
25
|
</section>
|
28
26
|
<footer>
|
29
27
|
<p>
|
data/changelog.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
## 1.7 [UNRELEASED]
|
2
|
+
* Custom teaser field to overwrite the automatic truncation of the body [wikyd](https://github.com/wikyd)
|
3
|
+
* Tagging URL strategy updated again [joemsak](https://github.com/joemsak)
|
4
|
+
|
5
|
+
## 1.6.2 [UNRELEASED]
|
6
|
+
* Tagging bug fixed [ruprict](https://github.com/ruprict)
|
7
|
+
|
1
8
|
## 1.6.1 [21 June 2011]
|
2
9
|
* Tagging URL strategy updated for reliability /blog/posts/tagged/ID-name-parameterized [joemsak](https://github.com/joemsak)
|
3
10
|
* Heroku/PostgreSQL support for autocomplete tags [joemsak](https://github.com/joemsak)
|
data/config/locales/en.yml
CHANGED
@@ -40,6 +40,8 @@ en:
|
|
40
40
|
published_at: Publish Date
|
41
41
|
custom_url: Custom Url
|
42
42
|
custom_url_help: Generate the url for the blog post from this text instead of the title.
|
43
|
+
copy_body: Copy Post Body to Teaser
|
44
|
+
copy_body_help: Copies the post body to the teaser. Leave teaser blank to let Refinery automatically make the teaser.
|
43
45
|
index:
|
44
46
|
no_items_yet: 'There are no Blog Posts yet. Click "%{create}" to add your first blog post.'
|
45
47
|
uncategorized:
|
data/config/routes.rb
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
match 'categories/:id', :to => 'categories#show', :as => 'blog_category'
|
7
7
|
match ':id/comments', :to => 'posts#comment', :as => 'blog_post_blog_comments'
|
8
8
|
get 'archive/:year(/:month)', :to => 'posts#archive', :as => 'archive_blog_posts'
|
9
|
-
get 'tagged/:tag_id
|
9
|
+
get 'tagged/:tag_id/:tag_name' => 'posts#tagged', :as => 'tagged_posts'
|
10
10
|
end
|
11
11
|
|
12
12
|
scope(:path => 'refinery', :as => 'admin', :module => 'admin') do
|
data/features/category.feature
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'factory_girl'
|
2
2
|
|
3
|
-
Factory.define(:
|
3
|
+
Factory.define(:blog_post, :class => BlogPost) do |f|
|
4
4
|
f.sequence(:title) { |n| "Top #{n} Shopping Centers in Chicago" }
|
5
5
|
f.body "These are the top ten shopping centers in Chicago. You're going to read a long blog post about them. Come to peace with it."
|
6
6
|
f.draft false
|
@@ -1,11 +1,11 @@
|
|
1
1
|
Given /^there is a category titled "([^"]*)"$/ do |title|
|
2
|
-
@category = Factory(:blog_category, :title => title)
|
2
|
+
@category = Factory.create(:blog_category, :title => title)
|
3
3
|
end
|
4
4
|
|
5
|
-
Then /^the blog post should have
|
6
|
-
BlogPost.last.categories.count.should == num_category
|
5
|
+
Then /^the blog post should have ([\d]*) categor[yies]{1,3}$/ do |num_category|
|
6
|
+
BlogPost.last.categories.count.should == num_category.to_i
|
7
7
|
end
|
8
8
|
|
9
|
-
Then /^the blog post should have the category "([^"]*)"$/ do |category|
|
9
|
+
Then /^the blog post should have the category "([^"]*)"$/ do |category|
|
10
10
|
BlogPost.last.categories.first.title.should == category
|
11
11
|
end
|
@@ -1,8 +1,10 @@
|
|
1
1
|
Given /^there is a blog post titled "([^"]*)" and tagged "([^"]*)"$/ do |title, tag_name|
|
2
|
-
@blog_post = Factory(:
|
2
|
+
@blog_post = Factory.create(:blog_post, :title => title, :tag_list => tag_name)
|
3
3
|
end
|
4
4
|
|
5
5
|
When /^I visit the tagged posts page for "([^"]*)"$/ do |tag_name|
|
6
|
+
@blog_post ||= Factory.create(:blog_post, :tag_list => tag_name)
|
7
|
+
tag = BlogPost.tag_counts_on(:tags).first
|
6
8
|
visit tagged_posts_path(tag.id, tag_name.parameterize)
|
7
9
|
end
|
8
10
|
|
data/lib/gemspec.rb
CHANGED
@@ -2,9 +2,7 @@
|
|
2
2
|
require File.expand_path('../refinery/blog/version', __FILE__)
|
3
3
|
version = ::Refinery::Blog::Version.to_s
|
4
4
|
raise "Could not get version so gemspec can not be built" if version.nil?
|
5
|
-
files = Dir.glob("**/*").flatten.reject
|
6
|
-
file =~ /\.gem(spec)?$/
|
7
|
-
end
|
5
|
+
files = Dir.glob("**/*").flatten.reject{|f| f =~ %r{.gem$}}
|
8
6
|
|
9
7
|
gemspec = <<EOF
|
10
8
|
Gem::Specification.new do |s|
|
@@ -19,7 +17,7 @@ Gem::Specification.new do |s|
|
|
19
17
|
s.require_paths = %w(lib)
|
20
18
|
|
21
19
|
# Runtime dependencies
|
22
|
-
s.add_dependency 'refinerycms-core', '~> 1.0.
|
20
|
+
s.add_dependency 'refinerycms-core', '~> 1.0.3'
|
23
21
|
s.add_dependency 'filters_spam', '~> 0.2'
|
24
22
|
s.add_dependency 'acts-as-taggable-on'
|
25
23
|
s.add_dependency 'seo_meta', '~> 1.1.0'
|
data/readme.md
CHANGED
@@ -0,0 +1,202 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = %q{refinerycms-blog}
|
3
|
+
s.version = %q{1.6.2}
|
4
|
+
s.description = %q{A really straightforward open source Ruby on Rails blog engine designed for integration with RefineryCMS.}
|
5
|
+
s.date = %q{2011-06-29}
|
6
|
+
s.summary = %q{Ruby on Rails blogging engine for RefineryCMS.}
|
7
|
+
s.email = %q{info@refinerycms.com}
|
8
|
+
s.homepage = %q{http://refinerycms.com/blog}
|
9
|
+
s.authors = ['Resolve Digital', 'Neoteric Design']
|
10
|
+
s.require_paths = %w(lib)
|
11
|
+
|
12
|
+
# Runtime dependencies
|
13
|
+
s.add_dependency 'refinerycms-core', '~> 1.0.3'
|
14
|
+
s.add_dependency 'filters_spam', '~> 0.2'
|
15
|
+
s.add_dependency 'acts-as-taggable-on'
|
16
|
+
s.add_dependency 'seo_meta', '~> 1.1.0'
|
17
|
+
|
18
|
+
# Development dependencies
|
19
|
+
s.add_development_dependency 'factory_girl'
|
20
|
+
|
21
|
+
s.files = %w(
|
22
|
+
app
|
23
|
+
app/controllers
|
24
|
+
app/controllers/admin
|
25
|
+
app/controllers/admin/blog
|
26
|
+
app/controllers/admin/blog/categories_controller.rb
|
27
|
+
app/controllers/admin/blog/comments_controller.rb
|
28
|
+
app/controllers/admin/blog/posts_controller.rb
|
29
|
+
app/controllers/admin/blog/settings_controller.rb
|
30
|
+
app/controllers/blog
|
31
|
+
app/controllers/blog/categories_controller.rb
|
32
|
+
app/controllers/blog/posts_controller.rb
|
33
|
+
app/controllers/blog_controller.rb
|
34
|
+
app/helpers
|
35
|
+
app/helpers/blog_posts_helper.rb
|
36
|
+
app/mailers
|
37
|
+
app/mailers/blog
|
38
|
+
app/mailers/blog/comment_mailer.rb
|
39
|
+
app/models
|
40
|
+
app/models/blog
|
41
|
+
app/models/blog/comment_mailer.rb
|
42
|
+
app/models/blog_category.rb
|
43
|
+
app/models/blog_comment.rb
|
44
|
+
app/models/blog_post.rb
|
45
|
+
app/models/categorization.rb
|
46
|
+
app/views
|
47
|
+
app/views/admin
|
48
|
+
app/views/admin/blog
|
49
|
+
app/views/admin/blog/_submenu.html.erb
|
50
|
+
app/views/admin/blog/categories
|
51
|
+
app/views/admin/blog/categories/_category.html.erb
|
52
|
+
app/views/admin/blog/categories/_form.html.erb
|
53
|
+
app/views/admin/blog/categories/_sortable_list.html.erb
|
54
|
+
app/views/admin/blog/categories/edit.html.erb
|
55
|
+
app/views/admin/blog/categories/index.html.erb
|
56
|
+
app/views/admin/blog/categories/new.html.erb
|
57
|
+
app/views/admin/blog/comments
|
58
|
+
app/views/admin/blog/comments/_comment.html.erb
|
59
|
+
app/views/admin/blog/comments/_sortable_list.html.erb
|
60
|
+
app/views/admin/blog/comments/index.html.erb
|
61
|
+
app/views/admin/blog/comments/show.html.erb
|
62
|
+
app/views/admin/blog/posts
|
63
|
+
app/views/admin/blog/posts/_form.css.erb
|
64
|
+
app/views/admin/blog/posts/_form.html.erb
|
65
|
+
app/views/admin/blog/posts/_form.js.erb
|
66
|
+
app/views/admin/blog/posts/_form_part.html.erb
|
67
|
+
app/views/admin/blog/posts/_post.html.erb
|
68
|
+
app/views/admin/blog/posts/_sortable_list.html.erb
|
69
|
+
app/views/admin/blog/posts/_teaser_part.html.erb
|
70
|
+
app/views/admin/blog/posts/edit.html.erb
|
71
|
+
app/views/admin/blog/posts/index.html.erb
|
72
|
+
app/views/admin/blog/posts/new.html.erb
|
73
|
+
app/views/admin/blog/posts/uncategorized.html.erb
|
74
|
+
app/views/admin/blog/settings
|
75
|
+
app/views/admin/blog/settings/notification_recipients.html.erb
|
76
|
+
app/views/blog
|
77
|
+
app/views/blog/categories
|
78
|
+
app/views/blog/categories/show.html.erb
|
79
|
+
app/views/blog/comment_mailer
|
80
|
+
app/views/blog/comment_mailer/notification.html.erb
|
81
|
+
app/views/blog/posts
|
82
|
+
app/views/blog/posts/_comment.html.erb
|
83
|
+
app/views/blog/posts/_nav.html.erb
|
84
|
+
app/views/blog/posts/_post.html.erb
|
85
|
+
app/views/blog/posts/archive.html.erb
|
86
|
+
app/views/blog/posts/index.html.erb
|
87
|
+
app/views/blog/posts/index.rss.builder
|
88
|
+
app/views/blog/posts/show.html.erb
|
89
|
+
app/views/blog/posts/tagged.html.erb
|
90
|
+
app/views/blog/shared
|
91
|
+
app/views/blog/shared/_categories.html.erb
|
92
|
+
app/views/blog/shared/_post.html.erb
|
93
|
+
app/views/blog/shared/_posts.html.erb
|
94
|
+
app/views/blog/shared/_rss_feed.html.erb
|
95
|
+
app/views/blog/shared/_tags.html.erb
|
96
|
+
app/views/shared
|
97
|
+
app/views/shared/admin
|
98
|
+
app/views/shared/admin/_autocomplete.html.erb
|
99
|
+
changelog.md
|
100
|
+
config
|
101
|
+
config/locales
|
102
|
+
config/locales/cs.yml
|
103
|
+
config/locales/de.yml
|
104
|
+
config/locales/en.yml
|
105
|
+
config/locales/es.yml
|
106
|
+
config/locales/fr.yml
|
107
|
+
config/locales/it.yml
|
108
|
+
config/locales/nb.yml
|
109
|
+
config/locales/nl.yml
|
110
|
+
config/locales/pl.yml
|
111
|
+
config/locales/pt-BR.yml
|
112
|
+
config/locales/ru.yml
|
113
|
+
config/locales/sk.yml
|
114
|
+
config/locales/zh-CN.yml
|
115
|
+
config/routes.rb
|
116
|
+
db
|
117
|
+
db/migrate
|
118
|
+
db/migrate/1_create_blog_structure.rb
|
119
|
+
db/migrate/2_add_user_id_to_blog_posts.rb
|
120
|
+
db/migrate/3_acts_as_taggable_on_migration.rb
|
121
|
+
db/migrate/4_create_seo_meta_for_blog.rb
|
122
|
+
db/migrate/5_add_cached_slugs.rb
|
123
|
+
db/migrate/6_add_custom_url_field_to_blog_posts.rb
|
124
|
+
db/migrate/7_add_custom_teaser_field_to_blog_posts.rb
|
125
|
+
db/seeds
|
126
|
+
db/seeds/refinerycms_blog.rb
|
127
|
+
features
|
128
|
+
features/authors.feature
|
129
|
+
features/category.feature
|
130
|
+
features/support
|
131
|
+
features/support/factories
|
132
|
+
features/support/factories/blog_categories.rb
|
133
|
+
features/support/factories/blog_comments.rb
|
134
|
+
features/support/factories/blog_posts.rb
|
135
|
+
features/support/paths.rb
|
136
|
+
features/support/step_definitions
|
137
|
+
features/support/step_definitions/authors_steps.rb
|
138
|
+
features/support/step_definitions/category_steps.rb
|
139
|
+
features/support/step_definitions/tags_steps.rb
|
140
|
+
features/tags.feature
|
141
|
+
lib
|
142
|
+
lib/gemspec.rb
|
143
|
+
lib/generators
|
144
|
+
lib/generators/refinerycms_blog_generator.rb
|
145
|
+
lib/refinery
|
146
|
+
lib/refinery/blog
|
147
|
+
lib/refinery/blog/tabs.rb
|
148
|
+
lib/refinery/blog/version.rb
|
149
|
+
lib/refinerycms-blog.rb
|
150
|
+
public
|
151
|
+
public/images
|
152
|
+
public/images/refinerycms-blog
|
153
|
+
public/images/refinerycms-blog/icons
|
154
|
+
public/images/refinerycms-blog/icons/cog.png
|
155
|
+
public/images/refinerycms-blog/icons/comment.png
|
156
|
+
public/images/refinerycms-blog/icons/comment_cross.png
|
157
|
+
public/images/refinerycms-blog/icons/comment_tick.png
|
158
|
+
public/images/refinerycms-blog/icons/comments.png
|
159
|
+
public/images/refinerycms-blog/icons/down.gif
|
160
|
+
public/images/refinerycms-blog/icons/folder.png
|
161
|
+
public/images/refinerycms-blog/icons/folder_add.png
|
162
|
+
public/images/refinerycms-blog/icons/folder_edit.png
|
163
|
+
public/images/refinerycms-blog/icons/page.png
|
164
|
+
public/images/refinerycms-blog/icons/page_add.png
|
165
|
+
public/images/refinerycms-blog/icons/page_copy.png
|
166
|
+
public/images/refinerycms-blog/icons/up.gif
|
167
|
+
public/images/refinerycms-blog/rss-feed.png
|
168
|
+
public/javascripts
|
169
|
+
public/javascripts/refinery
|
170
|
+
public/javascripts/refinery/refinerycms-blog.js
|
171
|
+
public/javascripts/refinerycms-blog.js
|
172
|
+
public/stylesheets
|
173
|
+
public/stylesheets/refinery
|
174
|
+
public/stylesheets/refinery/refinerycms-blog.css
|
175
|
+
public/stylesheets/refinerycms-blog.css
|
176
|
+
public/stylesheets/ui-lightness
|
177
|
+
public/stylesheets/ui-lightness/images
|
178
|
+
public/stylesheets/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png
|
179
|
+
public/stylesheets/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png
|
180
|
+
public/stylesheets/ui-lightness/images/ui-bg_flat_10_000000_40x100.png
|
181
|
+
public/stylesheets/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png
|
182
|
+
public/stylesheets/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png
|
183
|
+
public/stylesheets/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png
|
184
|
+
public/stylesheets/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png
|
185
|
+
public/stylesheets/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
|
186
|
+
public/stylesheets/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
|
187
|
+
public/stylesheets/ui-lightness/images/ui-icons_222222_256x240.png
|
188
|
+
public/stylesheets/ui-lightness/images/ui-icons_228ef1_256x240.png
|
189
|
+
public/stylesheets/ui-lightness/images/ui-icons_ef8c08_256x240.png
|
190
|
+
public/stylesheets/ui-lightness/images/ui-icons_ffd27a_256x240.png
|
191
|
+
public/stylesheets/ui-lightness/images/ui-icons_ffffff_256x240.png
|
192
|
+
public/stylesheets/ui-lightness/jquery-ui-1.8.13.custom.css
|
193
|
+
readme.md
|
194
|
+
refinerycms-blog.gemspec
|
195
|
+
spec
|
196
|
+
spec/models
|
197
|
+
spec/models/blog_category_spec.rb
|
198
|
+
spec/models/blog_comment_spec.rb
|
199
|
+
spec/models/blog_post_spec.rb
|
200
|
+
)
|
201
|
+
|
202
|
+
end
|
@@ -3,7 +3,7 @@ Dir[File.expand_path('../../../features/support/factories/*.rb', __FILE__)].each
|
|
3
3
|
|
4
4
|
describe BlogCategory do
|
5
5
|
before(:each) do
|
6
|
-
@blog_category = Factory(:blog_category)
|
6
|
+
@blog_category = Factory.create(:blog_category)
|
7
7
|
end
|
8
8
|
|
9
9
|
describe "validations" do
|
@@ -20,20 +20,20 @@ describe BlogCategory do
|
|
20
20
|
it "has a posts attribute" do
|
21
21
|
@blog_category.should respond_to(:posts)
|
22
22
|
end
|
23
|
-
|
23
|
+
|
24
24
|
it "returns posts by published_at date in descending order" do
|
25
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
|
26
|
+
latest_post = @blog_category.posts.create!({ :title => "parndt is p. okay", :body => "For a Kiwi.", :published_at => Time.now })
|
27
27
|
|
28
28
|
@blog_category.posts.first.should == latest_post
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
end
|
32
32
|
|
33
33
|
describe "#post_count" do
|
34
34
|
it "returns post count in category" do
|
35
35
|
2.times do
|
36
|
-
@blog_category.posts << Factory(:
|
36
|
+
@blog_category.posts << Factory.create(:blog_post)
|
37
37
|
end
|
38
38
|
@blog_category.post_count.should == 2
|
39
39
|
end
|
@@ -2,19 +2,19 @@ require 'spec_helper'
|
|
2
2
|
Dir[File.expand_path('../../../features/support/factories/*.rb', __FILE__)].each{|factory| require factory}
|
3
3
|
|
4
4
|
describe BlogPost do
|
5
|
-
let(:blog_post ) { Factory
|
6
|
-
|
5
|
+
let(:blog_post ) { Factory.create(:blog_post) }
|
6
|
+
|
7
7
|
describe "validations" do
|
8
8
|
it "requires title" do
|
9
|
-
Factory.build(:
|
9
|
+
Factory.build(:blog_post, :title => "").should_not be_valid
|
10
10
|
end
|
11
11
|
|
12
12
|
it "won't allow duplicate titles" do
|
13
|
-
Factory.build(:
|
13
|
+
Factory.build(:blog_post, :title => blog_post.title).should_not be_valid
|
14
14
|
end
|
15
15
|
|
16
16
|
it "requires body" do
|
17
|
-
Factory.build(:
|
17
|
+
Factory.build(:blog_post, :body => nil).should_not be_valid
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
@@ -25,7 +25,7 @@ describe BlogPost do
|
|
25
25
|
end
|
26
26
|
|
27
27
|
it "destroys associated comments" do
|
28
|
-
Factory(:blog_comment, :blog_post_id => blog_post.id)
|
28
|
+
Factory.create(:blog_comment, :blog_post_id => blog_post.id)
|
29
29
|
blog_post.destroy
|
30
30
|
BlogComment.find_by_blog_post_id(blog_post.id).should == nil
|
31
31
|
end
|
@@ -36,16 +36,16 @@ describe BlogPost do
|
|
36
36
|
blog_post.should respond_to(:categories)
|
37
37
|
end
|
38
38
|
end
|
39
|
-
|
39
|
+
|
40
40
|
describe "tags" do
|
41
41
|
it "acts as taggable" do
|
42
42
|
blog_post.should respond_to(:tag_list)
|
43
|
-
|
43
|
+
|
44
44
|
#the factory has default tags, including 'chicago'
|
45
45
|
blog_post.tag_list.should include("chicago")
|
46
46
|
end
|
47
47
|
end
|
48
|
-
|
48
|
+
|
49
49
|
describe "authors" do
|
50
50
|
it "are authored" do
|
51
51
|
BlogPost.instance_methods.map(&:to_sym).should include(:author)
|
@@ -54,54 +54,54 @@ describe BlogPost do
|
|
54
54
|
|
55
55
|
describe "by_archive scope" do
|
56
56
|
before do
|
57
|
-
@blog_post1 = Factory(:
|
58
|
-
@blog_post2 = Factory(:
|
59
|
-
|
57
|
+
@blog_post1 = Factory.create(:blog_post, :published_at => Date.new(2011, 3, 11))
|
58
|
+
@blog_post2 = Factory.create(:blog_post, :published_at => Date.new(2011, 3, 12))
|
59
|
+
|
60
60
|
#2 months before
|
61
|
-
Factory(:
|
61
|
+
Factory.create(:blog_post, :published_at => Date.new(2011, 1, 10))
|
62
62
|
end
|
63
63
|
|
64
64
|
it "returns all posts from specified month" do
|
65
65
|
#check for this month
|
66
66
|
date = "03/2011"
|
67
|
-
BlogPost.by_archive(Time.parse(date)).count.should == 2
|
67
|
+
BlogPost.by_archive(Time.parse(date)).count.should be == 2
|
68
68
|
BlogPost.by_archive(Time.parse(date)).should == [@blog_post2, @blog_post1]
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
72
72
|
describe "all_previous scope" do
|
73
73
|
before do
|
74
|
-
@blog_post1 = Factory(:
|
75
|
-
@blog_post2 = Factory(:
|
76
|
-
Factory
|
74
|
+
@blog_post1 = Factory.create(:blog_post, :published_at => Time.now - 2.months)
|
75
|
+
@blog_post2 = Factory.create(:blog_post, :published_at => Time.now - 1.month)
|
76
|
+
Factory.create(:blog_post, :published_at => Time.now)
|
77
77
|
end
|
78
78
|
|
79
79
|
it "returns all posts from previous months" do
|
80
|
-
BlogPost.all_previous.count.should == 2
|
80
|
+
BlogPost.all_previous.count.should be == 2
|
81
81
|
BlogPost.all_previous.should == [@blog_post2, @blog_post1]
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
85
85
|
describe "live scope" do
|
86
86
|
before do
|
87
|
-
@blog_post1 = Factory(:
|
88
|
-
@blog_post2 = Factory(:
|
89
|
-
Factory(:
|
90
|
-
Factory(:
|
87
|
+
@blog_post1 = Factory.create(:blog_post, :published_at => Time.now.advance(:minutes => -2))
|
88
|
+
@blog_post2 = Factory.create(:blog_post, :published_at => Time.now.advance(:minutes => -1))
|
89
|
+
Factory.create(:blog_post, :draft => true)
|
90
|
+
Factory.create(:blog_post, :published_at => Time.now + 1.minute)
|
91
91
|
end
|
92
92
|
|
93
93
|
it "returns all posts which aren't in draft and pub date isn't in future" do
|
94
|
-
BlogPost.live.count.should == 2
|
94
|
+
BlogPost.live.count.should be == 2
|
95
95
|
BlogPost.live.should == [@blog_post2, @blog_post1]
|
96
96
|
end
|
97
97
|
end
|
98
98
|
|
99
99
|
describe "uncategorized scope" do
|
100
100
|
before do
|
101
|
-
@uncategorized_blog_post = Factory(:
|
102
|
-
@categorized_blog_post = Factory(:
|
101
|
+
@uncategorized_blog_post = Factory.create(:blog_post)
|
102
|
+
@categorized_blog_post = Factory.create(:blog_post)
|
103
103
|
|
104
|
-
@categorized_blog_post.categories << Factory(:blog_category)
|
104
|
+
@categorized_blog_post.categories << Factory.create(:blog_category)
|
105
105
|
end
|
106
106
|
|
107
107
|
it "returns uncategorized posts if they exist" do
|
@@ -112,22 +112,22 @@ describe BlogPost do
|
|
112
112
|
|
113
113
|
describe "#live?" do
|
114
114
|
it "returns true if post is not in draft and it's published" do
|
115
|
-
Factory(:
|
115
|
+
Factory.create(:blog_post).live?.should be_true
|
116
116
|
end
|
117
117
|
|
118
118
|
it "returns false if post is in draft" do
|
119
|
-
Factory(:
|
119
|
+
Factory.create(:blog_post, :draft => true).live?.should be_false
|
120
120
|
end
|
121
121
|
|
122
122
|
it "returns false if post pub date is in future" do
|
123
|
-
Factory(:
|
123
|
+
Factory.create(:blog_post, :published_at => Time.now.advance(:minutes => 1)).live?.should be_false
|
124
124
|
end
|
125
125
|
end
|
126
126
|
|
127
127
|
describe "#next" do
|
128
128
|
before do
|
129
|
-
Factory(:
|
130
|
-
@blog_post = Factory(:
|
129
|
+
Factory.create(:blog_post, :published_at => Time.now.advance(:minutes => -1))
|
130
|
+
@blog_post = Factory.create(:blog_post)
|
131
131
|
end
|
132
132
|
|
133
133
|
it "returns next article when called on current article" do
|
@@ -137,8 +137,8 @@ describe BlogPost do
|
|
137
137
|
|
138
138
|
describe "#prev" do
|
139
139
|
before do
|
140
|
-
Factory(:
|
141
|
-
@blog_post = Factory(:
|
140
|
+
Factory.create(:blog_post)
|
141
|
+
@blog_post = Factory.create(:blog_post, :published_at => Time.now.advance(:minutes => -1))
|
142
142
|
end
|
143
143
|
|
144
144
|
it "returns previous article when called on current article" do
|
@@ -148,9 +148,9 @@ describe BlogPost do
|
|
148
148
|
|
149
149
|
describe "#category_ids=" do
|
150
150
|
before do
|
151
|
-
@cat1 = Factory(:blog_category, :id => 1)
|
152
|
-
@cat2 = Factory(:blog_category, :id => 2)
|
153
|
-
@cat3 = Factory(:blog_category, :id => 3)
|
151
|
+
@cat1 = Factory.create(:blog_category, :id => 1)
|
152
|
+
@cat2 = Factory.create(:blog_category, :id => 2)
|
153
|
+
@cat3 = Factory.create(:blog_category, :id => 3)
|
154
154
|
blog_post.category_ids = [1,2,"","",3]
|
155
155
|
end
|
156
156
|
|
@@ -168,7 +168,7 @@ describe BlogPost do
|
|
168
168
|
before do
|
169
169
|
RefinerySetting.set(:comments_allowed, { :scoping => 'blog', :value => true })
|
170
170
|
end
|
171
|
-
|
171
|
+
|
172
172
|
it "should be true" do
|
173
173
|
BlogPost.comments_allowed?.should be_true
|
174
174
|
end
|
@@ -178,10 +178,16 @@ describe BlogPost do
|
|
178
178
|
before do
|
179
179
|
RefinerySetting.set(:comments_allowed, { :scoping => 'blog', :value => false })
|
180
180
|
end
|
181
|
-
|
181
|
+
|
182
182
|
it "should be false" do
|
183
183
|
BlogPost.comments_allowed?.should be_false
|
184
184
|
end
|
185
185
|
end
|
186
186
|
end
|
187
|
+
|
188
|
+
describe "custom teasers" do
|
189
|
+
it "should allow a custom teaser" do
|
190
|
+
Factory.create(:blog_post, :custom_teaser => 'This is some custom content').should be_valid
|
191
|
+
end
|
192
|
+
end
|
187
193
|
end
|
metadata
CHANGED
@@ -1,80 +1,108 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: refinerycms-blog
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 11
|
5
5
|
prerelease:
|
6
|
+
segments:
|
7
|
+
- 1
|
8
|
+
- 6
|
9
|
+
- 2
|
10
|
+
version: 1.6.2
|
6
11
|
platform: ruby
|
7
|
-
authors:
|
12
|
+
authors:
|
8
13
|
- Resolve Digital
|
9
14
|
- Neoteric Design
|
10
15
|
autorequire:
|
11
16
|
bindir: bin
|
12
17
|
cert_chain: []
|
13
|
-
|
18
|
+
|
19
|
+
date: 2011-06-29 00:00:00 +12:00
|
14
20
|
default_executable:
|
15
|
-
dependencies:
|
16
|
-
- !ruby/object:Gem::Dependency
|
21
|
+
dependencies:
|
22
|
+
- !ruby/object:Gem::Dependency
|
17
23
|
name: refinerycms-core
|
18
|
-
|
24
|
+
prerelease: false
|
25
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
19
26
|
none: false
|
20
|
-
requirements:
|
27
|
+
requirements:
|
21
28
|
- - ~>
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
hash: 17
|
31
|
+
segments:
|
32
|
+
- 1
|
33
|
+
- 0
|
34
|
+
- 3
|
35
|
+
version: 1.0.3
|
24
36
|
type: :runtime
|
25
|
-
|
26
|
-
|
27
|
-
- !ruby/object:Gem::Dependency
|
37
|
+
version_requirements: *id001
|
38
|
+
- !ruby/object:Gem::Dependency
|
28
39
|
name: filters_spam
|
29
|
-
|
40
|
+
prerelease: false
|
41
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
30
42
|
none: false
|
31
|
-
requirements:
|
43
|
+
requirements:
|
32
44
|
- - ~>
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
hash: 15
|
47
|
+
segments:
|
48
|
+
- 0
|
49
|
+
- 2
|
50
|
+
version: "0.2"
|
35
51
|
type: :runtime
|
36
|
-
|
37
|
-
|
38
|
-
- !ruby/object:Gem::Dependency
|
52
|
+
version_requirements: *id002
|
53
|
+
- !ruby/object:Gem::Dependency
|
39
54
|
name: acts-as-taggable-on
|
40
|
-
|
55
|
+
prerelease: false
|
56
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
41
57
|
none: false
|
42
|
-
requirements:
|
43
|
-
- -
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
hash: 3
|
62
|
+
segments:
|
63
|
+
- 0
|
64
|
+
version: "0"
|
46
65
|
type: :runtime
|
47
|
-
|
48
|
-
|
49
|
-
- !ruby/object:Gem::Dependency
|
66
|
+
version_requirements: *id003
|
67
|
+
- !ruby/object:Gem::Dependency
|
50
68
|
name: seo_meta
|
51
|
-
|
69
|
+
prerelease: false
|
70
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
52
71
|
none: false
|
53
|
-
requirements:
|
72
|
+
requirements:
|
54
73
|
- - ~>
|
55
|
-
- !ruby/object:Gem::Version
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
hash: 19
|
76
|
+
segments:
|
77
|
+
- 1
|
78
|
+
- 1
|
79
|
+
- 0
|
56
80
|
version: 1.1.0
|
57
81
|
type: :runtime
|
58
|
-
|
59
|
-
|
60
|
-
- !ruby/object:Gem::Dependency
|
82
|
+
version_requirements: *id004
|
83
|
+
- !ruby/object:Gem::Dependency
|
61
84
|
name: factory_girl
|
62
|
-
|
85
|
+
prerelease: false
|
86
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
63
87
|
none: false
|
64
|
-
requirements:
|
65
|
-
- -
|
66
|
-
- !ruby/object:Gem::Version
|
67
|
-
|
88
|
+
requirements:
|
89
|
+
- - ">="
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
hash: 3
|
92
|
+
segments:
|
93
|
+
- 0
|
94
|
+
version: "0"
|
68
95
|
type: :development
|
69
|
-
|
70
|
-
|
71
|
-
description: A really straightforward open source Ruby on Rails blog engine designed
|
72
|
-
for integration with RefineryCMS.
|
96
|
+
version_requirements: *id005
|
97
|
+
description: A really straightforward open source Ruby on Rails blog engine designed for integration with RefineryCMS.
|
73
98
|
email: info@refinerycms.com
|
74
99
|
executables: []
|
100
|
+
|
75
101
|
extensions: []
|
102
|
+
|
76
103
|
extra_rdoc_files: []
|
77
|
-
|
104
|
+
|
105
|
+
files:
|
78
106
|
- app/controllers/admin/blog/categories_controller.rb
|
79
107
|
- app/controllers/admin/blog/comments_controller.rb
|
80
108
|
- app/controllers/admin/blog/posts_controller.rb
|
@@ -106,6 +134,7 @@ files:
|
|
106
134
|
- app/views/admin/blog/posts/_form_part.html.erb
|
107
135
|
- app/views/admin/blog/posts/_post.html.erb
|
108
136
|
- app/views/admin/blog/posts/_sortable_list.html.erb
|
137
|
+
- app/views/admin/blog/posts/_teaser_part.html.erb
|
109
138
|
- app/views/admin/blog/posts/edit.html.erb
|
110
139
|
- app/views/admin/blog/posts/index.html.erb
|
111
140
|
- app/views/admin/blog/posts/new.html.erb
|
@@ -148,6 +177,7 @@ files:
|
|
148
177
|
- db/migrate/4_create_seo_meta_for_blog.rb
|
149
178
|
- db/migrate/5_add_cached_slugs.rb
|
150
179
|
- db/migrate/6_add_custom_url_field_to_blog_posts.rb
|
180
|
+
- db/migrate/7_add_custom_teaser_field_to_blog_posts.rb
|
151
181
|
- db/seeds/refinerycms_blog.rb
|
152
182
|
- features/authors.feature
|
153
183
|
- features/category.feature
|
@@ -198,32 +228,43 @@ files:
|
|
198
228
|
- public/stylesheets/ui-lightness/images/ui-icons_ffffff_256x240.png
|
199
229
|
- public/stylesheets/ui-lightness/jquery-ui-1.8.13.custom.css
|
200
230
|
- readme.md
|
231
|
+
- refinerycms-blog.gemspec
|
201
232
|
- spec/models/blog_category_spec.rb
|
202
233
|
- spec/models/blog_comment_spec.rb
|
203
234
|
- spec/models/blog_post_spec.rb
|
204
235
|
has_rdoc: true
|
205
236
|
homepage: http://refinerycms.com/blog
|
206
237
|
licenses: []
|
238
|
+
|
207
239
|
post_install_message:
|
208
240
|
rdoc_options: []
|
209
|
-
|
241
|
+
|
242
|
+
require_paths:
|
210
243
|
- lib
|
211
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
244
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
212
245
|
none: false
|
213
|
-
requirements:
|
214
|
-
- -
|
215
|
-
- !ruby/object:Gem::Version
|
216
|
-
|
217
|
-
|
246
|
+
requirements:
|
247
|
+
- - ">="
|
248
|
+
- !ruby/object:Gem::Version
|
249
|
+
hash: 3
|
250
|
+
segments:
|
251
|
+
- 0
|
252
|
+
version: "0"
|
253
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
218
254
|
none: false
|
219
|
-
requirements:
|
220
|
-
- -
|
221
|
-
- !ruby/object:Gem::Version
|
222
|
-
|
255
|
+
requirements:
|
256
|
+
- - ">="
|
257
|
+
- !ruby/object:Gem::Version
|
258
|
+
hash: 3
|
259
|
+
segments:
|
260
|
+
- 0
|
261
|
+
version: "0"
|
223
262
|
requirements: []
|
263
|
+
|
224
264
|
rubyforge_project:
|
225
265
|
rubygems_version: 1.6.2
|
226
266
|
signing_key:
|
227
267
|
specification_version: 3
|
228
268
|
summary: Ruby on Rails blogging engine for RefineryCMS.
|
229
269
|
test_files: []
|
270
|
+
|