From 4b2310c1350349fb6f983f08f4264461ea97a830 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sen=C3=A9n=20Rodero=20Rodr=C3=ADguez?= Date: Fri, 7 Jul 2017 13:57:07 +0200 Subject: [PATCH] Move and refactor method from follow to user model to get user interests. Add specification to check the discard of duplicate interests. --- app/controllers/users_controller.rb | 8 ++++---- app/models/follow.rb | 10 ---------- app/models/user.rb | 4 ++++ app/views/users/show.html.erb | 2 +- spec/features/users_spec.rb | 2 +- spec/models/follow_spec.rb | 13 ------------- spec/models/user_spec.rb | 23 +++++++++++++++++++++++ 7 files changed, 33 insertions(+), 29 deletions(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index c5d919b3a..6ef59fb60 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -7,7 +7,7 @@ class UsersController < ApplicationController def show load_filtered_activity if valid_access? - load_interest if valid_interest_access? + load_interests if valid_interests_access? end private @@ -63,15 +63,15 @@ class UsersController < ApplicationController @budget_investments = Budget::Investment.where(author_id: @user.id).order(created_at: :desc).page(params[:page]) end - def load_interest - @interests = Follow.interests_by(@user) + def load_interests + @user.interests end def valid_access? @user.public_activity || authorized_current_user? end - def valid_interest_access? + def valid_interests_access? @user.public_interests || authorized_current_user? end diff --git a/app/models/follow.rb b/app/models/follow.rb index f11a2a8e7..ee44cac96 100644 --- a/app/models/follow.rb +++ b/app/models/follow.rb @@ -18,14 +18,4 @@ class Follow < ActiveRecord::Base !! by_user_and_followable(user, followable).try(:first) end - def self.interests_by(user) - interests = [] - user.follows.each do |follow| - follow.followable.tags.each do |tag| - interests << tag.name - end - end - interests.uniq - end - end diff --git a/app/models/user.rb b/app/models/user.rb index fb11aacf9..60536195b 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -309,6 +309,10 @@ class User < ActiveRecord::Base where(conditions.to_hash).where(["username = ?", login]).first end + def interests + follows.map{|follow| follow.followable.tags.map(&:name)}.flatten.compact.uniq + end + private def clean_document_number diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb index fd2526172..fb4a3d1f9 100644 --- a/app/views/users/show.html.erb +++ b/app/views/users/show.html.erb @@ -49,7 +49,7 @@ <% if @user.public_interests || @authorized_current_user %>

<%= t('account.show.public_interests_title_list') %>

- <% @interests.in_groups_of(10, false) do |interests_group| %> + <% @user.interests.in_groups_of(10, false) do |interests_group| %>
    <% interests_group.each do |interest| %> diff --git a/spec/features/users_spec.rb b/spec/features/users_spec.rb index e770ca2f3..a6e9e2941 100644 --- a/spec/features/users_spec.rb +++ b/spec/features/users_spec.rb @@ -242,7 +242,7 @@ feature 'Users' do login_as(@user) visit account_path - check 'account_public_interest' + check 'account_public_interests' click_button 'Save changes' logout diff --git a/spec/models/follow_spec.rb b/spec/models/follow_spec.rb index f01ee04fc..fc17924f5 100644 --- a/spec/models/follow_spec.rb +++ b/spec/models/follow_spec.rb @@ -23,17 +23,4 @@ describe Follow do expect(follow).to_not be_valid end - describe "interests" do - - let(:user) { create(:user) } - - it "interests_by user" do - proposal = create(:proposal, tag_list: "Sport") - create(:follow, :followed_proposal, followable: proposal, user: user) - - expect(Follow.interests_by(user)).to eq ["Sport"] - end - - end - end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 2e92e5c96..2ca1dfe05 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -657,4 +657,27 @@ describe User do end end + describe "#interests" do + let(:user) { create(:user) } + + it "should return followed object tags" do + proposal = create(:proposal, tag_list: "Sport") + create(:follow, followable: proposal, user: user) + + expect(user.interests).to eq ["Sport"] + end + + it "should discard followed objects duplicated tags" do + proposal1 = create(:proposal, tag_list: "Sport") + proposal2 = create(:proposal, tag_list: "Sport") + budget_investment = create(:budget_investment, tag_list: "Sport") + + create(:follow, followable: proposal1, user: user) + create(:follow, followable: proposal2, user: user) + create(:follow, followable: budget_investment, user: user) + + expect(user.interests).to eq ["Sport"] + end + + end end