diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-08-19 12:08:42 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-08-19 12:08:42 +0300 |
commit | b76ae638462ab0f673e5915986070518dd3f9ad3 (patch) | |
tree | bdab0533383b52873be0ec0eb4d3c66598ff8b91 /lib/gem_extensions/active_record/disable_joins/relation.rb | |
parent | 434373eabe7b4be9593d18a585fb763f1e5f1a6f (diff) |
Add latest changes from gitlab-org/gitlab@14-2-stable-eev14.2.0-rc42
Diffstat (limited to 'lib/gem_extensions/active_record/disable_joins/relation.rb')
-rw-r--r-- | lib/gem_extensions/active_record/disable_joins/relation.rb | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/lib/gem_extensions/active_record/disable_joins/relation.rb b/lib/gem_extensions/active_record/disable_joins/relation.rb new file mode 100644 index 00000000000..01eb6381a85 --- /dev/null +++ b/lib/gem_extensions/active_record/disable_joins/relation.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +module GemExtensions + module ActiveRecord + module DisableJoins + class Relation < ::ActiveRecord::Relation + attr_reader :ids, :key + + def initialize(klass, key, ids) + @ids = ids.uniq + @key = key + super(klass) + end + + def limit(value) + records.take(value) # rubocop:disable CodeReuse/ActiveRecord + end + + def first(limit = nil) + if limit + records.limit(limit).first + else + records.first + end + end + + def load + super + records = @records + + records_by_id = records.group_by do |record| + record[key] + end + + records = ids.flat_map { |id| records_by_id[id.to_i] } + records.compact! + + @records = records + end + end + end + end +end |