Adds User.comment_flags

This commit is contained in:
kikito
2015-09-01 13:09:35 +02:00
parent c2faf0ef92
commit d0c7c7fe79
3 changed files with 29 additions and 0 deletions

View File

@@ -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)

View File

@@ -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

View File

@@ -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