Class: CacheQL::PolymorphicKeyLoader

Inherits:
GraphQL::Batch::Loader
  • Object
show all
Defined in:
lib/cacheql/polymorphic_key_loader.rb

Instance Method Summary collapse

Constructor Details

#initialize(model, polymorphic_key) ⇒ PolymorphicKeyLoader

Returns a new instance of PolymorphicKeyLoader.



4
5
6
7
# File 'lib/cacheql/polymorphic_key_loader.rb', line 4

def initialize(model, polymorphic_key)
  @model = model
  @polymorphic_key = polymorphic_key
end

Instance Method Details

#perform(polymorphic_value_sets) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/cacheql/polymorphic_key_loader.rb', line 9

def perform(polymorphic_value_sets)
  polymorphic_values = polymorphic_value_sets.flatten.uniq
  records = @model.where(@polymorphic_key => polymorphic_values).to_a

  polymorphic_value_sets.each do |polymorphic_value_set|
    matching_records = records.select do |record|
      polymorphic_value_set.id == record.public_send("#{@polymorphic_key}_id") &&
      polymorphic_value_set.class.name == record.public_send("#{@polymorphic_key}_type")
    end
    fulfill(polymorphic_value_set, matching_records)
  end
end