diff --git a/app/controllers/admin/homepage_controller.rb b/app/controllers/admin/homepage_controller.rb
index ff0c51043..93c5e070b 100644
--- a/app/controllers/admin/homepage_controller.rb
+++ b/app/controllers/admin/homepage_controller.rb
@@ -2,7 +2,8 @@ class Admin::HomepageController < Admin::BaseController
def show
load_header
- load_settings
+ load_feeds
+ load_recommendations
load_cards
end
@@ -12,14 +13,16 @@ class Admin::HomepageController < Admin::BaseController
@header = ::Widget::Card.header
end
- def load_settings
- settings = /feature.homepage.widgets/
- @settings = Setting.select {|setting| setting.key =~ /#{settings}/ }
- @settings << Setting.where(key: 'feature.user.recommendations').first
+ def load_recommendations
+ @recommendations = Setting.where(key: 'feature.user.recommendations').first
end
def load_cards
@cards = ::Widget::Card.body
end
+ def load_feeds
+ @feeds = Widget::Feed.order("created_at")
+ end
+
end
\ No newline at end of file
diff --git a/app/controllers/admin/widget/feeds_controller.rb b/app/controllers/admin/widget/feeds_controller.rb
new file mode 100644
index 000000000..ab4a5a474
--- /dev/null
+++ b/app/controllers/admin/widget/feeds_controller.rb
@@ -0,0 +1,16 @@
+class Admin::Widget::FeedsController < Admin::BaseController
+
+ def update
+ @feed = ::Widget::Feed.find(params[:id])
+ @feed.update(feed_params)
+
+ render nothing: true
+ end
+
+ private
+
+ def feed_params
+ params.require(:widget_feed).permit(:limit)
+ end
+
+end
\ No newline at end of file
diff --git a/app/helpers/settings.rb b/app/helpers/settings.rb
new file mode 100644
index 000000000..d308535ab
--- /dev/null
+++ b/app/helpers/settings.rb
@@ -0,0 +1,7 @@
+module SettingsHelper
+
+ def setting_for_widget(widget)
+ Setting.where(key: 'feature.user.recommendations').first
+ end
+
+end
\ No newline at end of file
diff --git a/app/models/widget/feed.rb b/app/models/widget/feed.rb
index 00b2a54e0..870bde1de 100644
--- a/app/models/widget/feed.rb
+++ b/app/models/widget/feed.rb
@@ -3,14 +3,18 @@ class Widget::Feed < ActiveRecord::Base
KINDS = %w(proposals debates processes)
- def active?(kind)
- Setting["feature.homepage.widgets.feeds.#{kind}"].present?
+ def active?
+ setting.value.present?
+ end
+
+ def setting
+ Setting.where(key: "feature.homepage.widgets.feeds.#{kind}").first
end
def self.active
KINDS.collect do |kind|
- feed = new(kind: kind)
- feed if feed.active?(kind)
+ feed = find_or_create_by(kind: kind)
+ feed if feed.active?
end.compact
end
@@ -30,8 +34,4 @@ class Widget::Feed < ActiveRecord::Base
Legislation::Process.open.limit(limit)
end
- def limit
- 3
- end
-
end
\ No newline at end of file
diff --git a/app/views/admin/homepage/_feed.html.erb b/app/views/admin/homepage/_feed.html.erb
new file mode 100644
index 000000000..3f39cfcc5
--- /dev/null
+++ b/app/views/admin/homepage/_feed.html.erb
@@ -0,0 +1,9 @@
+
+ <%= t("admin.homepage.feeds.#{feed.kind}") %>
+
+ <%= render "setting", setting: feed.setting %>
+
+ <%= form_for [:admin, feed], remote: true do |f| %>
+ <%= f.select :limit, (1..10), {}, class: "js-submit-on-change" %>
+ <% end %>
+
\ No newline at end of file
diff --git a/app/views/admin/homepage/show.html.erb b/app/views/admin/homepage/show.html.erb
index b209a0ec6..91f490085 100644
--- a/app/views/admin/homepage/show.html.erb
+++ b/app/views/admin/homepage/show.html.erb
@@ -37,12 +37,13 @@
-
-<% @settings.each do |setting| %>
-
-
<%= t("settings.#{setting.key}") %>
-
- <%= render "setting", setting: setting %>
-
-
+<% @feeds.each do |feed| %>
+ <%= render "feed", feed: feed %>
<% end %>
+
+
+
<%= t("settings.#{@recommendations.key}") %>
+
+ <%= render "setting", setting: @recommendations %>
+
+
diff --git a/config/locales/en/admin.yml b/config/locales/en/admin.yml
index 809fddec6..abded2037 100644
--- a/config/locales/en/admin.yml
+++ b/config/locales/en/admin.yml
@@ -1229,6 +1229,10 @@ en:
description: Description
link_text: Link text
link_url: Link URL
+ feeds:
+ proposals: Proposals
+ debates: Debates
+ processes: Processes
new:
header_title: New header
submit_header: Create header
diff --git a/config/locales/es/admin.yml b/config/locales/es/admin.yml
index 9487996ef..45a2825aa 100644
--- a/config/locales/es/admin.yml
+++ b/config/locales/es/admin.yml
@@ -1229,6 +1229,10 @@ es:
description: Descripción
link_text: Texto del enlace
link_url: URL del enlace
+ feeds:
+ proposals: Propuestas
+ debates: Debates
+ processes: Procesos
new:
header_title: Nuevo encabezado
submit_header: Crear encabezado
diff --git a/config/routes/admin.rb b/config/routes/admin.rb
index 61825aff4..2125b6ee9 100644
--- a/config/routes/admin.rb
+++ b/config/routes/admin.rb
@@ -180,9 +180,10 @@ namespace :admin do
resources :content_blocks, except: [:show]
end
- resource :homepage, controller: :homepage
+ resource :homepage, controller: :homepage, only: [:show]
namespace :widget do
resources :cards
+ resources :feeds, only: [:update]
end
end
diff --git a/db/migrate/20180519132610_create_widget_feeds.rb b/db/migrate/20180519132610_create_widget_feeds.rb
index 4b7682a59..e01d1f3ad 100644
--- a/db/migrate/20180519132610_create_widget_feeds.rb
+++ b/db/migrate/20180519132610_create_widget_feeds.rb
@@ -2,6 +2,7 @@ class CreateWidgetFeeds < ActiveRecord::Migration
def change
create_table :widget_feeds do |t|
t.string :kind
+ t.integer :limit, default: 3
t.timestamps null: false
end
end
diff --git a/db/schema.rb b/db/schema.rb
index f32a174eb..da47db5ac 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -1236,8 +1236,9 @@ ActiveRecord::Schema.define(version: 20180519132610) do
create_table "widget_feeds", force: :cascade do |t|
t.string "kind"
- t.datetime "created_at", null: false
- t.datetime "updated_at", null: false
+ t.integer "limit", default: 3
+ t.datetime "created_at", null: false
+ t.datetime "updated_at", null: false
end
add_foreign_key "administrators", "users"
diff --git a/spec/features/admin/homepage/homepage_spec.rb b/spec/features/admin/homepage/homepage_spec.rb
index efb5f4a4f..aed30db10 100644
--- a/spec/features/admin/homepage/homepage_spec.rb
+++ b/spec/features/admin/homepage/homepage_spec.rb
@@ -12,9 +12,10 @@ feature 'Homepage' do
Setting['feature.user.recommendations'] = false
end
- let(:proposals_setting) { Setting.where(key: 'feature.homepage.widgets.feeds.proposals').first }
- let(:debates_setting) { Setting.where(key: 'feature.homepage.widgets.feeds.debates').first }
- let(:processes_setting) { Setting.where(key: 'feature.homepage.widgets.feeds.processes').first }
+ let!(:proposals_feed) { create(:widget_feed, kind: "proposals") }
+ let!(:debates_feed) { create(:widget_feed, kind: "debates") }
+ let!(:processes_feed) { create(:widget_feed, kind: "processes") }
+
let(:user_recommendations) { Setting.where(key: 'feature.user.recommendations').first }
let(:user) { create(:user) }
@@ -23,48 +24,46 @@ feature 'Homepage' do
context "Feeds" do
- scenario "Proposals" do
+ scenario "Proposals", :js do
5.times { create(:proposal) }
visit admin_homepage_path
- within("#setting_#{proposals_setting.id}") do
- click_button "Enable"
- end
- expect(page).to have_content "Value updated"
+ within("#widget_feed_#{proposals_feed.id}") do
+ select '1', from: 'widget_feed_limit'
+ accept_confirm { click_button "Enable" }
+ end
visit root_path
expect(page).to have_content "Most active proposals"
- expect(page).to have_css(".proposal", count: 3)
+ expect(page).to have_css(".proposal", count: 1)
end
- scenario "Debates" do
+ scenario "Debates", :js do
5.times { create(:debate) }
visit admin_homepage_path
- within("#setting_#{debates_setting.id}") do
- click_button "Enable"
+ within("#widget_feed_#{debates_feed.id}") do
+ select '2', from: 'widget_feed_limit'
+ accept_confirm { click_button "Enable" }
end
- expect(page).to have_content "Value updated"
-
visit root_path
expect(page).to have_content "Most active debates"
- expect(page).to have_css(".debate", count: 3)
+ expect(page).to have_css(".debate", count: 2)
end
- scenario "Processes" do
+ scenario "Processes", :js do
5.times { create(:legislation_process) }
visit admin_homepage_path
- within("#setting_#{processes_setting.id}") do
- click_button "Enable"
+ within("#widget_feed_#{processes_feed.id}") do
+ select '3', from: 'widget_feed_limit'
+ accept_confirm { click_button "Enable" }
end
- expect(page).to have_content "Value updated"
-
visit root_path
expect(page).to have_content "Open processes"