refinerycms-news 1.1.0 → 1.2.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.
- data/app/models/news_item.rb +6 -4
- data/app/views/admin/news_items/_form.html.erb +5 -9
- data/app/views/admin/news_items/_news_item.html.erb +1 -1
- data/app/views/news_items/index.html.erb +1 -5
- data/config/locales/cs.yml +0 -6
- data/config/locales/de.yml +0 -6
- data/config/locales/en.yml +1 -6
- data/config/locales/es-MX.yml +0 -6
- data/config/locales/es.yml +0 -7
- data/config/locales/fr.yml +0 -6
- data/config/locales/it.yml +0 -7
- data/config/locales/lv.yml +1 -7
- data/config/locales/nb.yml +0 -7
- data/config/locales/nl.yml +0 -7
- data/config/locales/ru.yml +0 -7
- data/config/locales/sk.yml +0 -6
- data/config/locales/sl.yml +0 -6
- data/db/migrate/5_add_expiration_date_to_news_items.rb +15 -0
- data/db/migrate/6_remove_image_id_and_external_url_from_news.rb +19 -0
- data/lib/gemspec.rb +1 -4
- data/lib/news.rb +1 -1
- data/spec/models/news_item_spec.rb +36 -21
- metadata +8 -8
- data/test/fixtures/news_items.yml +0 -14
- data/test/unit/news_items_test.rb +0 -34
data/app/models/news_item.rb
CHANGED
@@ -1,12 +1,10 @@
|
|
1
1
|
class NewsItem < ActiveRecord::Base
|
2
|
-
belongs_to :image, :class_name => 'Image'
|
3
|
-
|
4
2
|
translates :title, :body, :external_url
|
5
3
|
|
6
4
|
attr_accessor :locale # to hold temporarily
|
7
5
|
|
8
6
|
alias_attribute :content, :body
|
9
|
-
|
7
|
+
validates :title, :content, :publish_date, :presence => true
|
10
8
|
|
11
9
|
has_friendly_id :title, :use_slug => true
|
12
10
|
|
@@ -16,8 +14,12 @@ class NewsItem < ActiveRecord::Base
|
|
16
14
|
|
17
15
|
# If you're using a named scope that includes a changing variable you need to wrap it in a lambda
|
18
16
|
# This avoids the query being cached thus becoming unaffected by changes (i.e. Time.now is constant)
|
17
|
+
scope :not_expired, lambda {
|
18
|
+
news_items = Arel::Table.new(NewsItem.table_name)
|
19
|
+
where(news_items[:expiration_date].eq(nil).or(news_items[:expiration_date].gt(Time.now)))
|
20
|
+
}
|
19
21
|
scope :published, lambda {
|
20
|
-
where(
|
22
|
+
not_expired.where("publish_date < ?", Time.now)
|
21
23
|
}
|
22
24
|
scope :latest, lambda { |*l_params|
|
23
25
|
published.limit( l_params.first || 10)
|
@@ -21,18 +21,14 @@
|
|
21
21
|
</div>
|
22
22
|
|
23
23
|
<div class='field'>
|
24
|
-
<%= f.label :
|
25
|
-
<%= f.
|
24
|
+
<%= f.label :expiration_date %>
|
25
|
+
<%= f.datetime_select :expiration_date, :start_year => Time.now.year,
|
26
|
+
:include_blank => true %>
|
26
27
|
</div>
|
27
28
|
|
28
29
|
<div class='field'>
|
29
|
-
<%= f.label :
|
30
|
-
<%= f.
|
31
|
-
</div>
|
32
|
-
|
33
|
-
<div class='field'>
|
34
|
-
<%= f.label :image %>
|
35
|
-
<%= render :partial => "/shared/admin/image_picker", :locals => {:f => f, :field => :image_id, :image => @news_item.image } %>
|
30
|
+
<%= f.label :content %>
|
31
|
+
<%= f.text_area :content, :rows => "20", :class => "wymeditor widest" %>
|
36
32
|
</div>
|
37
33
|
|
38
34
|
<%= render :partial => "/shared/admin/form_actions",
|
@@ -4,7 +4,7 @@
|
|
4
4
|
<span class="preview">
|
5
5
|
<%= t('.published') %> <%= l(news_item.publish_date, :format => :short) %>
|
6
6
|
</span>
|
7
|
-
<% if ::Refinery::I18n.frontend_locales.many? and
|
7
|
+
<% if defined?(::Refinery::I18n) and ::Refinery::I18n.frontend_locales.many? and
|
8
8
|
(locales = news_item.translations.collect{|t| t.locale}).present? %>
|
9
9
|
<span class='preview'>
|
10
10
|
<% locales.each do |locale| %>
|
@@ -1,9 +1,5 @@
|
|
1
|
-
<% content_for :body_content_title do %>
|
2
|
-
<%= t('plugins.refinerycms_news.title') %>
|
3
|
-
<% end %>
|
4
|
-
|
5
1
|
<% content_for :body_content_left do %>
|
6
|
-
<%= @page[:body] if @news_items.offset == 0 %>
|
2
|
+
<%=raw @page[:body] if @news_items.offset == 0 %>
|
7
3
|
|
8
4
|
<% if @news_items.any? %>
|
9
5
|
<% @news_items.each do |item| %>
|
data/config/locales/cs.yml
CHANGED
data/config/locales/de.yml
CHANGED
data/config/locales/en.yml
CHANGED
data/config/locales/es-MX.yml
CHANGED
data/config/locales/es.yml
CHANGED
data/config/locales/fr.yml
CHANGED
data/config/locales/it.yml
CHANGED
data/config/locales/lv.yml
CHANGED
@@ -31,12 +31,6 @@ lv:
|
|
31
31
|
body: Saturs
|
32
32
|
content: Saturs
|
33
33
|
publish_date: Publikācijas datums
|
34
|
-
|
35
|
-
image: &image Attēlu
|
34
|
+
expiration_date: Publikācijas beigu datums
|
36
35
|
models:
|
37
36
|
news_item: jaunums
|
38
|
-
shared:
|
39
|
-
admin:
|
40
|
-
image_picker:
|
41
|
-
image: *image
|
42
|
-
|
data/config/locales/nb.yml
CHANGED
data/config/locales/nl.yml
CHANGED
data/config/locales/ru.yml
CHANGED
data/config/locales/sk.yml
CHANGED
data/config/locales/sl.yml
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
class AddExpirationDateToNewsItems < ActiveRecord::Migration
|
2
|
+
|
3
|
+
def self.up
|
4
|
+
unless ::NewsItem.column_names.map(&:to_sym).include?(:expiration_date)
|
5
|
+
add_column ::NewsItem.table_name, :expiration_date, :datetime
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.down
|
10
|
+
if ::NewsItem.column_names.map(&:to_sym).include?(:expiration_date)
|
11
|
+
remove_column ::NewsItem.table_name, :expiration_date
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class RemoveImageIdAndExternalUrlFromNews < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
if ::NewsItem.column_names.map(&:to_sym).include?(:external_url)
|
4
|
+
remove_column ::NewsItem.table_name, :external_url
|
5
|
+
end
|
6
|
+
if ::NewsItem.column_names.map(&:to_sym).include?(:image_id)
|
7
|
+
remove_column ::NewsItem.table_name, :image_id
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.down
|
12
|
+
unless ::NewsItem.column_names.map(&:to_sym).include?(:external_url)
|
13
|
+
add_column ::NewsItem.table_name, :external_url, :string
|
14
|
+
end
|
15
|
+
unless ::NewsItem.column_names.map(&:to_sym).include?(:image_id)
|
16
|
+
add_column ::NewsItem.table_name, :image_id, :integer
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/gemspec.rb
CHANGED
@@ -18,14 +18,11 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.authors = %w(Resolve\\ Digital)
|
19
19
|
s.require_paths = %w(lib)
|
20
20
|
|
21
|
-
s.add_dependency 'refinerycms-core', '~> 0.
|
21
|
+
s.add_dependency 'refinerycms-core', '~> 1.0.0'
|
22
22
|
|
23
23
|
s.files = [
|
24
24
|
'#{files.join("',\n '")}'
|
25
25
|
]
|
26
|
-
#{"s.test_files = [
|
27
|
-
'#{Dir.glob("test/**/*.rb").join("',\n '")}'
|
28
|
-
]" if File.directory?("test")}
|
29
26
|
end
|
30
27
|
EOF
|
31
28
|
|
data/lib/news.rb
CHANGED
@@ -3,33 +3,28 @@ require 'spec_helper'
|
|
3
3
|
Dir[File.expand_path('../../../features/support/factories.rb', __FILE__)].each {|f| require f}
|
4
4
|
|
5
5
|
describe NewsItem do
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
:title => "RefinyerCMS",
|
10
|
-
:content => "Some random text ...",
|
11
|
-
:publish_date => Date.today
|
12
|
-
}
|
13
|
-
end
|
14
|
-
|
15
|
-
it "rejects empty title" do
|
16
|
-
NewsItem.new(@attr.merge(:title => "")).should_not be_valid
|
17
|
-
end
|
6
|
+
|
7
|
+
let(:time_now) { Time.now }
|
8
|
+
let(:news_item) { Factory(:news_item) }
|
18
9
|
|
19
|
-
|
20
|
-
|
10
|
+
describe "validations" do
|
11
|
+
subject do
|
12
|
+
news_item = NewsItem.create! :title => "RefinyerCMS",
|
13
|
+
:content => "Some random text ...",
|
14
|
+
:publish_date => time_now
|
15
|
+
news_item
|
21
16
|
end
|
22
17
|
|
23
|
-
it
|
24
|
-
|
25
|
-
|
18
|
+
it { should be_valid }
|
19
|
+
its(:errors) { should be_empty }
|
20
|
+
its(:title) { should == "RefinyerCMS" }
|
21
|
+
its(:content) { should == "Some random text ..." }
|
22
|
+
its(:publish_date) { should == time_now }
|
26
23
|
end
|
27
24
|
|
28
25
|
describe "attribute aliasing" do
|
29
|
-
|
30
|
-
|
31
|
-
news_item.content.should == news_item.body
|
32
|
-
end
|
26
|
+
subject { news_item }
|
27
|
+
its(:content) { should == news_item.body }
|
33
28
|
end
|
34
29
|
|
35
30
|
describe "default scope" do
|
@@ -42,6 +37,26 @@ describe NewsItem do
|
|
42
37
|
end
|
43
38
|
end
|
44
39
|
|
40
|
+
describe ".not_expired" do
|
41
|
+
let!(:news_item) { Factory(:news_item) }
|
42
|
+
|
43
|
+
specify "expiration date not set" do
|
44
|
+
NewsItem.not_expired.count.should == 1
|
45
|
+
end
|
46
|
+
|
47
|
+
specify "expiration date set in future" do
|
48
|
+
news_item.expiration_date = Time.now + 1.hour
|
49
|
+
news_item.save!
|
50
|
+
NewsItem.not_expired.count.should == 1
|
51
|
+
end
|
52
|
+
|
53
|
+
specify "expiration date in past" do
|
54
|
+
news_item.expiration_date = Time.now - 1.hour
|
55
|
+
news_item.save!
|
56
|
+
NewsItem.not_expired.count.should == 0
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
45
60
|
describe ".published" do
|
46
61
|
it "returns only published news items" do
|
47
62
|
Factory(:news_item)
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: refinerycms-news
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 1.
|
5
|
+
version: 1.2.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Resolve Digital
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-05-27 00:00:00 +12:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
requirements:
|
22
22
|
- - ~>
|
23
23
|
- !ruby/object:Gem::Version
|
24
|
-
version: 0.
|
24
|
+
version: 1.0.0
|
25
25
|
type: :runtime
|
26
26
|
version_requirements: *id001
|
27
27
|
description: A really straightforward open source Ruby on Rails news engine designed for integration with RefineryCMS.
|
@@ -65,6 +65,8 @@ files:
|
|
65
65
|
- db/migrate/2_add_external_url_to_news_items.rb
|
66
66
|
- db/migrate/3_translate_news_items.rb
|
67
67
|
- db/migrate/4_add_image_id_to_news_items.rb
|
68
|
+
- db/migrate/5_add_expiration_date_to_news_items.rb
|
69
|
+
- db/migrate/6_remove_image_id_and_external_url_from_news.rb
|
68
70
|
- db/seeds/refinerycms_news.rb
|
69
71
|
- features/manage_news_items.feature
|
70
72
|
- features/step_definitions/news_steps.rb
|
@@ -78,8 +80,6 @@ files:
|
|
78
80
|
- license.md
|
79
81
|
- readme.md
|
80
82
|
- spec/models/news_item_spec.rb
|
81
|
-
- test/fixtures/news_items.yml
|
82
|
-
- test/unit/news_items_test.rb
|
83
83
|
has_rdoc: true
|
84
84
|
homepage: http://refinerycms.com
|
85
85
|
licenses: []
|
@@ -104,9 +104,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
104
104
|
requirements: []
|
105
105
|
|
106
106
|
rubyforge_project:
|
107
|
-
rubygems_version: 1.6.
|
107
|
+
rubygems_version: 1.6.2
|
108
108
|
signing_key:
|
109
109
|
specification_version: 3
|
110
110
|
summary: Ruby on Rails news engine for RefineryCMS.
|
111
|
-
test_files:
|
112
|
-
|
111
|
+
test_files: []
|
112
|
+
|
@@ -1,14 +0,0 @@
|
|
1
|
-
website_launched:
|
2
|
-
title: New website launched!
|
3
|
-
body: Oh yes our brand new website is here and it is running on Refinery CMS.
|
4
|
-
publish_date: <%= Date.today - 4.days %>
|
5
|
-
|
6
|
-
new_team_member:
|
7
|
-
title: Amanda joins Resolve Digital
|
8
|
-
body: Welcome Amanda to the Resolve Digital team.
|
9
|
-
publish_date: <%= Date.today - 2.days %>
|
10
|
-
|
11
|
-
product_launch:
|
12
|
-
title: Secret new product launched
|
13
|
-
body: Oh yes our brand new website is here and it is running on Refinery CMS.
|
14
|
-
publish_date: <%= Date.today.tomorrow %>
|
@@ -1,34 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class NewsItemsTest < ActiveSupport::TestCase
|
4
|
-
|
5
|
-
self.fixture_path = File.expand_path("../../fixtures", __FILE__)
|
6
|
-
fixtures :news_items
|
7
|
-
|
8
|
-
def setup
|
9
|
-
@new_news_item = NewsItem.new
|
10
|
-
@new_valid_news_item = NewsItem.new(:title => "valid post", :content => "yep looks valid", :publish_date => Date.today)
|
11
|
-
end
|
12
|
-
|
13
|
-
def test_should_not_save_without_title_and_body
|
14
|
-
assert !@new_news_item.save
|
15
|
-
|
16
|
-
assert_equal "can't be blank", @new_news_item.errors.on('title')
|
17
|
-
assert_equal "can't be blank", @new_news_item.errors.on('content')
|
18
|
-
assert_equal "can't be blank", @new_news_item.errors.on('publish_date')
|
19
|
-
|
20
|
-
assert @new_valid_news_item.save
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_per_page
|
24
|
-
assert_equal 20, NewsItem.per_page
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_named_scopes
|
28
|
-
assert_equal 2, NewsItem.published.size
|
29
|
-
assert NewsItem.latest.size < 10
|
30
|
-
|
31
|
-
assert_equal news_items(:new_team_member), NewsItem.latest.first
|
32
|
-
end
|
33
|
-
|
34
|
-
end
|