refinerycms-news 2.0.1 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +4 -0
  3. data/.rspec +1 -0
  4. data/.travis.yml +23 -10
  5. data/Gemfile +23 -54
  6. data/Rakefile +2 -0
  7. data/app/controllers/refinery/news/items_controller.rb +8 -11
  8. data/app/helpers/refinery/news/items_helper.rb +14 -17
  9. data/app/models/refinery/news/item.rb +9 -4
  10. data/app/views/refinery/news/admin/items/_form.html.erb +9 -16
  11. data/app/views/refinery/news/admin/items/_item.html.erb +6 -3
  12. data/app/views/refinery/news/admin/items/edit.html.erb +1 -1
  13. data/app/views/refinery/news/admin/items/index.html.erb +1 -1
  14. data/app/views/refinery/news/admin/items/new.html.erb +1 -1
  15. data/app/views/refinery/news/items/archive.html.erb +6 -6
  16. data/app/views/refinery/news/items/index.html.erb +3 -3
  17. data/app/views/refinery/news/items/show.html.erb +3 -3
  18. data/app/views/refinery/news/items/widgets/_news_archive.html.erb +1 -5
  19. data/app/views/refinery/news/shared/_body_content_right.html.erb +1 -1
  20. data/config/locales/bg.yml +18 -18
  21. data/config/locales/cs.yml +19 -19
  22. data/config/locales/da.yml +47 -0
  23. data/config/locales/de.yml +18 -18
  24. data/config/locales/en.yml +3 -2
  25. data/config/locales/es-MX.yml +18 -18
  26. data/config/locales/es.yml +19 -19
  27. data/config/locales/fr.yml +31 -19
  28. data/config/locales/it.yml +18 -18
  29. data/config/locales/ja.yml +48 -0
  30. data/config/locales/lv.yml +20 -18
  31. data/config/locales/nb.yml +18 -18
  32. data/config/locales/nl.yml +30 -18
  33. data/config/locales/pl.yml +29 -18
  34. data/config/locales/ru.yml +18 -18
  35. data/config/locales/sk.yml +31 -19
  36. data/config/locales/sl.yml +0 -2
  37. data/config/locales/zh-CN.yml +18 -18
  38. data/config/locales/zh-TW.yml +29 -29
  39. data/config/routes.rb +2 -2
  40. data/readme.md +51 -2
  41. data/refinerycms-news.gemspec +4 -5
  42. data/spec/controllers/refinery/news/items_controller_spec.rb +67 -0
  43. data/spec/{requests → features}/manage_news_items_spec.rb +6 -6
  44. data/spec/{requests → features}/news_archive.rb +0 -0
  45. data/spec/{requests → features}/visit_news_items_spec.rb +5 -7
  46. data/spec/helpers/refinery/news/items_helper_spec.rb +34 -0
  47. data/spec/models/refinery/news/item_spec.rb +38 -14
  48. data/spec/spec_helper.rb +20 -46
  49. metadata +26 -30
  50. data/Guardfile +0 -20
  51. data/app/views/refinery/news/admin/items/_locale_picker.html.erb +0 -11
  52. data/config/locales/jp.yml +0 -36
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a5eb03c40be74b743440b65a5f321d684a27fbaa
4
+ data.tar.gz: 5dec817e08d7d98232ea21d4301d53c36054f1b3
5
+ SHA512:
6
+ metadata.gz: 6d6ac165e91096cf87e2e776e21308c176e753ed6997b3cbd6c16195dd0a7ad99d14ee5e52c45afdcc24efbd90cc76d2d481baadd3a37383d4b848a7b674843d
7
+ data.tar.gz: 207bde8a3c45dae4f7848765340cabbb0938a7e10ef5d2b8d267beed061acb6ae0beb64a0fdf023a78265af431f2e844890c79bcd215c1f16c783894f582b41d
data/.gitignore CHANGED
@@ -1,3 +1,7 @@
1
1
  .DS_Store
2
2
  Gemfile.lock
3
3
  spec/dummy
4
+ .idea
5
+
6
+ # Local Gemfile for developing without sharing dependencies
7
+ .gemfile
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/.travis.yml CHANGED
@@ -1,17 +1,30 @@
1
+ language: ruby
2
+ bundler_args: --without development
1
3
  before_script:
2
- - "bundle exec rake refinery:testing:dummy_app > /dev/null"
3
- script: "bundle exec rspec ./spec"
4
+ - "sh -e /etc/init.d/xvfb start"
5
+ - "bundle exec rake refinery:testing:dummy_app"
6
+ script:
7
+ - "DISPLAY=:99.0 bundle exec rspec spec"
4
8
  notifications:
5
- email:
6
- - parndt@gmail.com
7
- - ugis.ozolss@gmail.com
8
- - heinleng@gmail.com
9
+ email: true
10
+ irc:
11
+ use_notice: true
12
+ skip_join: true
13
+ channels:
14
+ - "irc.freenode.org#refinerycms"
15
+ campfire:
16
+ on_success: always
17
+ on_failure: always
18
+ rooms:
19
+ - secure: "JaX+Ckvdd2wqL2bD6t8PHvMDBHxWBlCrkBKPcDKxV0t0DOwzzzwxMryVqcRi\nPsmM/zvmWFATDyRmivhNOpu4lRg9RytSroxZ9nkmbLDqjCyEAZ6tv4yZXME/\nPaxPwmfwgS9g8TKjj3lSWS7rEpqqg0D5S0XIfIHrj6KB6LUmFHc="
9
20
  env:
10
21
  - DB=postgresql
11
22
  - DB=mysql
23
+ matrix:
24
+ allow_failures:
25
+ - rvm: rbx-19mode
12
26
  rvm:
13
- - 1.8.7
14
- - 1.9.2
27
+ - 2.0.0
15
28
  - 1.9.3
16
- - rbx
17
- - jruby
29
+ - rbx-19mode
30
+ - jruby-19mode
data/Gemfile CHANGED
@@ -2,63 +2,29 @@ source 'http://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
5
- gem 'refinerycms', '~> 2.0.1'
6
-
7
- group :development, :test do
8
- gem 'refinerycms-testing', '~> 2.0.0'
9
- gem 'guard-rspec', '~> 0.6.0'
10
-
11
- platforms :jruby do
12
- gem 'activerecord-jdbcsqlite3-adapter'
13
- gem 'activerecord-jdbcmysql-adapter'
14
- gem 'activerecord-jdbcpostgresql-adapter'
15
- gem 'jruby-openssl'
16
- end
17
-
18
- unless defined?(JRUBY_VERSION)
19
- gem 'sqlite3'
20
- gem 'mysql2'
21
- gem 'pg'
22
- end
23
-
24
- platforms :mswin, :mingw do
25
- gem 'win32console'
26
- gem 'rb-fchange', '~> 0.0.5'
27
- gem 'rb-notifu', '~> 0.0.4'
28
- end
29
-
30
- platforms :ruby do
31
- gem 'spork', '~> 0.9.0.rc'
32
- gem 'guard-spork'
5
+ gem 'refinerycms', '~> 2.1.0'
6
+ gem 'refinerycms-settings', :github => 'refinery/refinerycms-settings'
7
+ gem 'refinerycms-testing', '~> 2.1.0', :group => :test
8
+
9
+ # Database Configuration
10
+ unless ENV['TRAVIS']
11
+ gem 'activerecord-jdbcsqlite3-adapter', :platform => :jruby
12
+ gem 'sqlite3', :platform => :ruby
13
+ end
33
14
 
34
- unless ENV['TRAVIS']
35
- require 'rbconfig'
36
- if RbConfig::CONFIG['target_os'] =~ /darwin/i
37
- gem 'rb-fsevent', '>= 0.3.9'
38
- gem 'ruby_gntp'
39
- end
40
- if RbConfig::CONFIG['target_os'] =~ /linux/i
41
- gem 'rb-inotify', '>= 0.5.1'
42
- gem 'libnotify', '~> 0.1.3'
43
- gem 'therubyracer', '~> 0.9.9'
44
- end
45
- end
46
- end
15
+ if !ENV['TRAVIS'] || ENV['DB'] == 'mysql'
16
+ gem 'activerecord-jdbcmysql-adapter', :platform => :jruby
17
+ gem 'jdbc-mysql', '= 5.1.13', :platform => :jruby
18
+ gem 'mysql2', :platform => :ruby
19
+ end
47
20
 
48
- platforms :jruby do
49
- unless ENV['TRAVIS']
50
- require 'rbconfig'
51
- if RbConfig::CONFIG['target_os'] =~ /darwin/i
52
- gem 'ruby_gntp'
53
- end
54
- if RbConfig::CONFIG['target_os'] =~ /linux/i
55
- gem 'rb-inotify', '>= 0.5.1'
56
- gem 'libnotify', '~> 0.1.3'
57
- end
58
- end
59
- end
21
+ if !ENV['TRAVIS'] || ENV['DB'] == 'postgresql'
22
+ gem 'activerecord-jdbcpostgresql-adapter', :platform => :jruby
23
+ gem 'pg', :platform => :ruby
60
24
  end
61
25
 
26
+ gem 'jruby-openssl', :platform => :jruby
27
+
62
28
  # Refinery/rails should pull in the proper versions of these
63
29
  group :assets do
64
30
  gem 'sass-rails'
@@ -66,4 +32,7 @@ group :assets do
66
32
  gem 'uglifier'
67
33
  end
68
34
 
69
- gem 'jquery-rails'
35
+ # Load local gems according to Refinery developer preference.
36
+ if File.exist? local_gemfile = File.expand_path('../.gemfile', __FILE__)
37
+ eval File.read(local_gemfile)
38
+ end
data/Rakefile CHANGED
@@ -17,3 +17,5 @@ Refinery::Testing::Railtie.load_tasks
17
17
  Refinery::Testing::Railtie.load_dummy_tasks(ENGINE_PATH)
18
18
 
19
19
  load File.expand_path('../tasks/rspec.rake', __FILE__)
20
+
21
+ task :default => :spec
@@ -15,30 +15,27 @@ module Refinery
15
15
 
16
16
  def archive
17
17
  if params[:month].present?
18
- date = "#{params[:month]}/#{params[:year]}"
19
- @archive_date = Time.parse(date)
20
- @date_title = @archive_date.strftime('%B %Y')
21
- @items = Refinery::News::Item.live.by_archive(@archive_date).page(params[:page])
18
+ @archive_for_month = true
19
+ @archive_date = Time.parse("#{params[:month]}/#{params[:year]}")
20
+ @items = Item.archived.translated.by_archive(@archive_date).page(params[:page])
22
21
  else
23
- date = "01/#{params[:year]}"
24
- @archive_date = Time.parse(date)
25
- @date_title = @archive_date.strftime('%Y')
26
- @items = Refinery::News::Item.live.by_year(@archive_date).page(params[:page])
22
+ @archive_date = Time.parse("01/#{params[:year]}")
23
+ @items = Item.archived.translated.by_year(@archive_date).page(params[:page])
27
24
  end
28
25
  end
29
26
 
30
27
  protected
31
28
 
32
29
  def find_latest_news_items
33
- @items = Refinery::News::Item.latest.translated
30
+ @items = Item.latest.translated
34
31
  end
35
32
 
36
33
  def find_published_news_items
37
- @items = Refinery::News::Item.published.translated.page(params[:page])
34
+ @items = Item.published.translated.page(params[:page])
38
35
  end
39
36
 
40
37
  def find_news_item
41
- @item = Refinery::News::Item.published.translated.find(params[:id])
38
+ @item = Item.published.translated.find(params[:id])
42
39
  end
43
40
 
44
41
  def find_page
@@ -5,7 +5,7 @@ module Refinery
5
5
  items = Refinery::News::Item.select('publish_date').all_previous
6
6
  return nil if items.blank?
7
7
 
8
- render :partial => "/refinery/news/items/widgets/news_archive", :locals => { :items => items }
8
+ render "/refinery/news/items/widgets/news_archive", :items => items
9
9
  end
10
10
  alias_method :news_archive_list, :news_item_archive_widget
11
11
 
@@ -28,23 +28,20 @@ module Refinery
28
28
  end
29
29
  end
30
30
 
31
- def news_item_archive_link(item)
32
- if item.publish_date >= Time.now.end_of_year.advance(:years => -3)
33
- post_date = item.publish_date.strftime('%m/%Y')
34
- year = post_date.split('/')[1]
35
- month = post_date.split('/')[0]
36
- count = News::Item.by_archive(Time.parse(post_date)).size
37
- text = t("date.month_names")[month.to_i] + " #{year} (#{count})"
38
-
39
- link_to(text, refinery.news_items_archive_path(:year => year, :month => month))
40
- else
41
- post_date = post.publish_date.strftime('01/%Y')
42
- year = post_date.split('/')[1]
43
- count = Refinery::News::Item.by_year(Time.parse(post_date)).size
44
- text = "#{year} (#{count})"
45
-
46
- link_to(text, refinery.news_items_archive_path(:year => year))
31
+ def news_item_archive_links
32
+ html = ''
33
+ item_months = ::Refinery::News::Item.archived.group_by {|i| i.publish_date.beginning_of_month}
34
+ item_months.each do |month, items|
35
+ if items.present?
36
+ text = "#{t("date.month_names")[month.month]} #{month.year} (#{items.count})"
37
+ html += "<li>#{link_to(text, refinery.news_items_archive_path(:year => month.year, :month => month.month))}</li>"
38
+ end
47
39
  end
40
+ content_tag('ul', raw(html))
41
+ end
42
+
43
+ def archive_date_format(date_for_month)
44
+ date_for_month ? "%B %Y" : "%Y"
48
45
  end
49
46
  end
50
47
  end
@@ -1,3 +1,5 @@
1
+ require 'acts_as_indexed'
2
+
1
3
  module Refinery
2
4
  module News
3
5
  class Item < Refinery::Core::BaseModel
@@ -6,7 +8,6 @@ module Refinery
6
8
  translates :title, :body
7
9
 
8
10
  attr_accessor :locale # to hold temporarily
9
-
10
11
  attr_accessible :title, :body, :content, :source, :publish_date, :expiration_date
11
12
  class Translation
12
13
  attr_accessible :locale
@@ -35,11 +36,11 @@ module Refinery
35
36
 
36
37
  class << self
37
38
  def by_archive(archive_date)
38
- where(['publish_date between ? and ?', archive_date.beginning_of_month, archive_date.end_of_month])
39
+ where(:publish_date => archive_date.beginning_of_month..archive_date.end_of_month)
39
40
  end
40
41
 
41
42
  def by_year(archive_year)
42
- where(['publish_date between ? and ?', archive_year.beginning_of_year, archive_year.end_of_year])
43
+ where(:publish_date => archive_year.beginning_of_year..archive_year.end_of_year)
43
44
  end
44
45
 
45
46
  def all_previous
@@ -69,7 +70,11 @@ module Refinery
69
70
  end
70
71
 
71
72
  def live
72
- not_expired.where( "publish_date <= ?", Time.now)
73
+ not_expired.where("publish_date <= ?", Time.now)
74
+ end
75
+
76
+ def archived
77
+ where("publish_date <= ?", Time.now)
73
78
  end
74
79
 
75
80
  # rejects any page that has not been translated to the current locale.
@@ -1,14 +1,9 @@
1
1
  <%= form_for [refinery, :news, :admin, @item] do |f| %>
2
- <%= render :partial => "/refinery/admin/error_messages",
3
- :locals => {
4
- :object => @item,
5
- :include_object_name => true
6
- } %>
2
+ <%= render "/refinery/admin/error_messages",
3
+ :object => @item,
4
+ :include_object_name => true %>
7
5
 
8
- <%= render :partial => "locale_picker",
9
- :locals => {
10
- :current_locale => Thread.current[:globalize_locale]
11
- } if defined?(::Refinery::I18n) %>
6
+ <%= render '/refinery/admin/locale_picker', :current_locale => Globalize.locale %>
12
7
 
13
8
  <div class='field'>
14
9
  <%= f.label :title %>
@@ -36,12 +31,10 @@
36
31
  <%= f.text_field :source, :class => "larger widest" %>
37
32
  </div>
38
33
 
39
- <%= render :partial => "/refinery/admin/form_actions",
40
- :locals => {
41
- :f => f,
42
- :continue_editing => true,
43
- :delete_title => t('admin.news.items.item.delete'),
44
- :delete_confirmation => t('shared.admin.delete.message', :title => @item.title)
45
- } %>
34
+ <%= render "/refinery/admin/form_actions",
35
+ :f => f,
36
+ :continue_editing => true,
37
+ :delete_title => t('admin.news.items.item.delete'),
38
+ :delete_confirmation => t('shared.admin.delete.message', :title => @item.title) %>
46
39
 
47
40
  <% end %>
@@ -4,11 +4,12 @@
4
4
  <span class="preview">
5
5
  <%= t('.published') %> <%= l(item.publish_date, :format => :short) %>
6
6
  </span>
7
- <% if defined?(::Refinery::I18n) and ::Refinery::I18n.frontend_locales.many? and
7
+ <% if Refinery::I18n.frontend_locales.many? and
8
8
  (locales = item.translations.collect{|t| t.locale}).present? %>
9
9
  <span class='preview'>
10
10
  <% locales.each do |locale| %>
11
- <%= refinery_icon_tag "flags/#{locale}.png", :size => '32x32' %>
11
+ <%= link_to refinery_icon_tag("flags/#{locale}.png", :size => '16x11'), refinery.edit_news_admin_item_path(item, :switch_locale => locale),
12
+ :class => "locale" %>
12
13
  <% end %>
13
14
  </span>
14
15
  <% end %>
@@ -23,6 +24,8 @@
23
24
  :class => "cancel confirm-delete",
24
25
  :title => t('.delete'),
25
26
  :method => :delete,
26
- :confirm => t('shared.admin.delete.message', :title => item.title) %>
27
+ :data => {
28
+ :confirm => t('refinery.admin.delete.message', :title => item.title)
29
+ } %>
27
30
  </span>
28
31
  </li>
@@ -1 +1 @@
1
- <%= render :partial => "form" %>
1
+ <%= render "form" %>
@@ -1,7 +1,7 @@
1
1
  <div id='actions'>
2
2
  <ul>
3
3
  <li>
4
- <%= render :partial => "/refinery/admin/search", :locals => {:url => refinery.news_admin_items_path} %>
4
+ <%= render "/refinery/admin/search", :url => refinery.news_admin_items_path %>
5
5
  </li>
6
6
  <li>
7
7
  <%= link_to t('.create'), refinery.new_news_admin_item_path, :class => "add_icon" %>
@@ -1 +1 @@
1
- <%= render :partial => "form" %>
1
+ <%= render "form" %>
@@ -1,17 +1,17 @@
1
- <% content_for :title, "#{t('.news_item_archive_for', :date => @archive_date.strftime('%B %Y'))}" %>
1
+ <% content_for :title, "#{t('.news_item_archive_for', :date => l(@archive_date, :format => archive_date_format(@archive_for_month)))}" %>
2
2
 
3
- <% content_for :body_content_left do %>
4
- <h1><%= t('.news_item_archive_for', :date => @archive_date.strftime('%B %Y')) %></h1>
3
+ <% content_for :body do %>
4
+ <h1><%= t('.news_item_archive_for', :date => l(@archive_date, :format => archive_date_format(@archive_for_month))) %></h1>
5
5
  <% if @items.any? %>
6
6
  <section id="news_items">
7
7
  <%= render :partial => "/refinery/news/shared/item", :collection => @items %>
8
8
  </section>
9
9
  <% else %>
10
- <p><%= t('.no_news_item_articles_posted', :date => @archive_date.strftime('%B %Y')) %></p>
10
+ <p><%= t('.no_news_item_articles_posted', :date => l(@archive_date, :format => '%B %Y')) %></p>
11
11
  <% end %>
12
12
  <% end %>
13
13
 
14
- <%= render :partial => '/refinery/news/shared/body_content_right' %>
14
+ <%= render '/refinery/news/shared/body_content_right' %>
15
15
 
16
- <%= render :partial => "/refinery/content_page" %>
16
+ <%= render "/refinery/content_page" %>
17
17
  <% content_for :stylesheets, stylesheet_link_tag('refinery/news/frontend') %>
@@ -1,4 +1,4 @@
1
- <% content_for :body_content_left do %>
1
+ <% content_for :body do %>
2
2
  <%=raw @page.content_for(Refinery::Pages.default_parts.first.to_sym) unless params[:page] %>
3
3
 
4
4
  <% if @items.any? %>
@@ -23,6 +23,6 @@
23
23
  <% content_for :body_content_right_prepend do -%>
24
24
  <%= raw @page.content_for(::Refinery::Pages.default_parts.second.to_sym) %>
25
25
  <% end if ::Refinery::Pages.default_parts.many? -%>
26
- <%= render :partial => '/refinery/news/shared/body_content_right' %>
26
+ <%= render '/refinery/news/shared/body_content_right' %>
27
27
 
28
- <%= render :partial => "/refinery/content_page" %>
28
+ <%= render "/refinery/content_page" %>
@@ -1,5 +1,5 @@
1
1
  <% content_for :body_content_title, @item.title %>
2
- <% content_for :body_content_left do %>
2
+ <% content_for :body do %>
3
3
  <article class="news_item">
4
4
  <p>
5
5
  <small><%= t('.published') %> <%= l(@item.publish_date, :format => :long) %></small>
@@ -15,6 +15,6 @@
15
15
  </p>
16
16
  </article>
17
17
  <% end %>
18
- <% content_for :body_content_right, render(:partial => 'recent_posts') %>
18
+ <% content_for :side_body, render(:partial => 'recent_posts') %>
19
19
 
20
- <%= render :partial => "/refinery/content_page" %>
20
+ <%= render "/refinery/content_page" %>
@@ -1,10 +1,6 @@
1
1
  <section id="news_archive_widget">
2
2
  <h2><%= t('archives', :scope => 'refinery.news.shared') %></h2>
3
3
  <nav>
4
- <ul>
5
- <% items.each do |item| %>
6
- <li><%= news_item_archive_link(item) %></li>
7
- <% end %>
8
- </ul>
4
+ <%= news_item_archive_links %>
9
5
  </nav>
10
6
  </section>
@@ -1,4 +1,4 @@
1
- <% content_for :body_content_right do %>
1
+ <% content_for :side_body do %>
2
2
  <%= yield(:body_content_right_prepend) %>
3
3
  <%= news_item_archive_widget %>
4
4
  <%= yield(:body_content_right_append) %>