Sha256: e828b112ea4d96bf37c32838dadf6f751c751cde34ca40cbd0e29f858477464a

Contents?: true

Size: 928 Bytes

Versions: 2

Compression:

Stored size: 928 Bytes

Contents

require 'encore/serializer/utils'

module Encore
  module Serializer
    module LinkedResourceManager
      extend ActiveSupport::Concern

      def self.add(linked_ids, object)
        included_models = linked_ids.keys.map { |key| key.downcase }
        included_models << object.klass.name.downcase

        linked_ids.reduce({}) do |memo, (model, ids)|
          klass = model.constantize
          serializer = Utils.fetch_serializer(klass)

          collection = klass.where(id: ids.to_a)
          reflections = klass.try(:_reflections) || klass.reflections
          available_includes = reflections.map do |key, _|
            next unless included_models.include?(key.to_s)
            key
          end.compact

          collection = collection.includes(available_includes) unless available_includes.empty?
          memo.merge! MainResourceManager.add(collection, serializer)
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
encore-0.2.3 lib/encore/serializer/linked_resource_manager.rb
encore-0.2.2 lib/encore/serializer/linked_resource_manager.rb