Skip to content

Commit

Permalink
Simplify join queries by using merge
Browse files Browse the repository at this point in the history
  • Loading branch information
dwbutler committed Jun 10, 2017
1 parent 57bb48a commit 8dc61d0
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 7 deletions.
4 changes: 2 additions & 2 deletions lib/groupify/adapter/active_record/group.rb
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ def merge!(source_group, destination_group)
# Ensure that all the members of the source can be members of the destination
invalid_member_classes = (source_group.member_classes - destination_group.member_classes)
invalid_member_classes.each do |klass|
if klass.joins(:group_memberships_as_member).where(Groupify.group_membership_klass.table_name => {:group_id => source_group.id}).count > 0
if klass.joins(:group_memberships_as_member).merge(Groupify.group_membership_klass.where(group_id: source_group)).count > 0
raise ArgumentError.new("#{source_group.class} has members that cannot belong to #{destination_group.class}")
end
end
Expand All @@ -103,7 +103,7 @@ def register(member_klass)

module MemberAssociationExtensions
def as(membership_type)
where(Groupify.group_membership_klass.table_name => {membership_type: membership_type})
merge(Groupify.group_membership_klass.as(membership_type))
end

def delete(*args)
Expand Down
10 changes: 5 additions & 5 deletions lib/groupify/adapter/active_record/group_member.rb
Original file line number Diff line number Diff line change
Expand Up @@ -97,21 +97,21 @@ def shares_any_group?(other, opts={})

module ClassMethods
def as(membership_type)
joins(:group_memberships_as_member).where(Groupify.group_membership_klass.table_name => { membership_type: membership_type })
joins(:group_memberships_as_member).merge(Groupify.group_membership_klass.as(membership_type))
end

def in_group(group)
return none unless group.present?

joins(:group_memberships_as_member).where(Groupify.group_membership_klass.table_name => { group_id: group.id }).distinct
joins(:group_memberships_as_member).merge(Groupify.group_membership_klass.where(group_id: group)).distinct
end

def in_any_group(*groups)
groups = groups.flatten
return none unless groups.present?

joins(:group_memberships_as_member).
where(Groupify.group_membership_klass.table_name => { group_id: groups.map(&:id) }).
merge(Groupify.group_membership_klass.where(group_id: groups)).
distinct
end

Expand All @@ -121,7 +121,7 @@ def in_all_groups(*groups)

joins(:group_memberships_as_member).
group("#{quoted_table_name}.#{connection.quote_column_name('id')}").
where(Groupify.group_membership_klass.table_name => {group_id: groups.map(&:id)}).
merge(Groupify.group_membership_klass.where(group_id: groups)).
having("COUNT(DISTINCT #{Groupify.group_membership_klass.quoted_table_name}.#{connection.quote_column_name('group_id')}) = ?", groups.count).
distinct
end
Expand All @@ -137,7 +137,7 @@ def in_only_groups(*groups)

def in_other_groups(*groups)
joins(:group_memberships_as_member).
where.not(Groupify.group_membership_klass.table_name => {group_id: groups.map(&:id)})
merge(Groupify.group_membership_klass.where.not(group_id: groups))
end

def shares_any_group(other)
Expand Down

0 comments on commit 8dc61d0

Please sign in to comment.