diff --git a/app/models/flag.rb b/app/models/flag.rb index 8d54c2dc7..a8be6da76 100644 --- a/app/models/flag.rb +++ b/app/models/flag.rb @@ -9,6 +9,8 @@ class Flag < ActiveRecord::Base flaggable_id: flaggable.id) end) + scope :for_comments, ->(comments) { where(flaggable_type: 'Comment', flaggable_id: comments) } + def self.flag(user, flaggable) return false if flagged?(user, flaggable) create(user: user, flaggable: flaggable) diff --git a/app/models/user.rb b/app/models/user.rb index 67db79b5b..d03cac6e4 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -81,6 +81,11 @@ class User < ActiveRecord::Base voted.each_with_object({}) { |v, h| h[v.votable_id] = v.value } end + def comment_flags(comments) + comment_flags = flags.for_comments(comments) + comment_flags.each_with_object({}){ |f, h| h[f.flaggable_id] = true } + end + def administrator? administrator.present? end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index fc26051b2..d00ed71ca 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -24,6 +24,28 @@ describe User do end end + describe "#comment_flags" do + let(:user) { create(:user) } + + it "returns {} if no comment" do + expect(user.comment_flags([])).to eq({}) + end + + it "returns a hash of flaggable_ids with 'true' if they were flagged by the user" do + comment1 = create(:comment) + comment2 = create(:comment) + comment3 = create(:comment) + Flag.flag(user, comment1) + Flag.flag(user, comment3) + + flagged = user.comment_flags([comment1, comment2, comment3]) + + expect(flagged[comment1.id]).to be + expect(flagged[comment2.id]).to_not be + expect(flagged[comment3.id]).to be + end + end + subject { build(:user) } it "is valid" do