Sha256: 9e30fa784e0fab5feed89a17f12515f2262d2c1131a4e92e75d4b43189a105a2

Contents?: true

Size: 1.01 KB

Versions: 10

Compression:

Stored size: 1.01 KB

Contents

module JsonapiActions
  class EagerLoader
    attr_reader :records, :serializer, :includes

    # @param records [ActiveRecord::Relation]
    # @param serializer
    # @param includes [Array<Symbol>]
    def initialize(records, serializer, includes)
      @records = records
      @serializer = serializer
      @includes = includes
    end

    # @return [ActiveRecord::Relation]
    def eager_load
      serializer.relationships_to_serialize&.each do |rel|
        next if @records.eager_load_values.include?(rel[0])
        @records = @records.eager_load(rel[0])
      end

      includes.each do |include|
        rel = path_to_relationship(include.to_s.split('.'))
        next if @records.eager_load_values.include?(rel)
        @records = records.eager_load(rel)
      end

      @records
    end

    private

      def path_to_relationship(parts)
        if parts.length == 1
          parts[0].to_sym
        else parts.length == 2
        { parts[0].to_sym => path_to_relationship(parts[1..-1]) }
        end
      end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
jsonapi_actions-0.7.0 lib/jsonapi_actions/eager_loader.rb
jsonapi_actions-0.6.0 lib/jsonapi_actions/eager_loader.rb
jsonapi_actions-0.5.0 lib/jsonapi_actions/eager_loader.rb
jsonapi_actions-0.4.0 lib/jsonapi_actions/eager_loader.rb
jsonapi_actions-0.3.0 lib/jsonapi_actions/eager_loader.rb
jsonapi_actions-0.2.2 lib/jsonapi_actions/eager_loader.rb
jsonapi_actions-0.2.1 lib/jsonapi_actions/eager_loader.rb
jsonapi_actions-0.2.0 lib/jsonapi_actions/eager_loader.rb
jsonapi_actions-0.1.1 lib/jsonapi_actions/eager_loader.rb
jsonapi_actions-0.1.0 lib/jsonapi_actions/eager_loader.rb