From 05237ca1e27009732f7d63c8206f31116b7b9bd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juanjo=20Baz=C3=A1n?= Date: Tue, 22 Sep 2015 13:50:01 +0200 Subject: [PATCH] adds scopes for every actionable class to activity --- app/models/activity.rb | 6 ++++++ spec/models/activity_spec.rb | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/app/models/activity.rb b/app/models/activity.rb index 87c68e556..bb5338607 100644 --- a/app/models/activity.rb +++ b/app/models/activity.rb @@ -7,6 +7,12 @@ class Activity < ActiveRecord::Base validates :action, inclusion: {in: VALID_ACTIONS} + scope :on_proposals, -> { where(actionable_type: 'Proposal') } + scope :on_debates, -> { where(actionable_type: 'Debate') } + scope :on_users, -> { where(actionable_type: 'User') } + scope :on_comments, -> { where(actionable_type: 'Comment') } + scope :for_render, -> { includes(user: [:moderator, :administrator]).includes(:actionable) } + def self.log(user, action, actionable) create(user: user, action: action.to_s, actionable: actionable) end diff --git a/spec/models/activity_spec.rb b/spec/models/activity_spec.rb index f1133dbd8..0c7b99027 100644 --- a/spec/models/activity_spec.rb +++ b/spec/models/activity_spec.rb @@ -66,4 +66,23 @@ describe Activity do end end + describe "scopes by actionable" do + it "should filter by actionable type" do + on_proposal = create(:activity, actionable: create(:proposal)) + on_debate = create(:activity, actionable: create(:debate)) + on_comment = create(:activity, actionable: create(:comment)) + on_user = create(:activity, actionable: create(:user)) + + expect(Activity.on_proposals.size).to eq 1 + expect(Activity.on_debates.size).to eq 1 + expect(Activity.on_comments.size).to eq 1 + expect(Activity.on_users.size).to eq 1 + + expect(Activity.on_proposals.first).to eq on_proposal + expect(Activity.on_debates.first).to eq on_debate + expect(Activity.on_comments.first).to eq on_comment + expect(Activity.on_users.first).to eq on_user + end + end + end