class ApiMaker::PreloaderBelongsTo
Public Class Methods
new(ability:, args:, data:, collection:, records:, reflection:, select:)
click to toggle source
# File lib/api_maker/preloader_belongs_to.rb, line 2 def initialize(ability:, args:, data:, collection:, records:, reflection:, select:) @ability = ability @args = args @data = data @collection = collection @reflection = reflection @reflection_name = @reflection.name @records = records @select = select end
Public Instance Methods
preload()
click to toggle source
# File lib/api_maker/preloader_belongs_to.rb, line 13 def preload models.each do |model| records_for_model(model).each do |record| record.relationships[@reflection_name] = model.id end serializer = ApiMaker::Serializer.new(ability: @ability, args: @args, model: model, select: @select&.dig(model.class)) collection_name = serializer.resource.collection_name @data.fetch(:included)[collection_name] ||= {} @data.fetch(:included).fetch(collection_name)[model.id] ||= serializer end {collection: models} end
Private Instance Methods
collection_name()
click to toggle source
# File lib/api_maker/preloader_belongs_to.rb, line 31 def collection_name @collection_name = ApiMaker::MemoryStorage.current.resource_for_model(@reflection.active_record).collection_name end
look_up_key()
click to toggle source
# File lib/api_maker/preloader_belongs_to.rb, line 48 def look_up_key @look_up_key ||= @reflection.options[:primary_key] || @reflection.klass.primary_key end
model_class()
click to toggle source
# File lib/api_maker/preloader_belongs_to.rb, line 35 def model_class @model_class ||= @reflection.klass end
models()
click to toggle source
# File lib/api_maker/preloader_belongs_to.rb, line 39 def models @models ||= begin models = @reflection.klass.where(look_up_key => @collection.map(&@reflection.foreign_key.to_sym).uniq) models = models.accessible_by(@ability) if @ability models.load models end end
records_for_model(model)
click to toggle source
# File lib/api_maker/preloader_belongs_to.rb, line 52 def records_for_model(model) @records .fetch(collection_name) .values .select { |record| record.model.read_attribute(@reflection.foreign_key) == model.read_attribute(look_up_key) } end