module JsonApiPreloader::Core

Public Class Methods

included(base) click to toggle source
# File lib/json_api_preloader/core.rb, line 6
def self.included(base)
  base.extend(ClassMethods)
  base.class_attribute(:builder_configuration)
end

Private Instance Methods

modify_params(hsh, ary, parent) click to toggle source
# File lib/json_api_preloader/core.rb, line 37
def modify_params(hsh, ary, parent)
  association = ary.shift
  return unless association

  if parent
    new_parent = AssociationsChecker.new(parent, association).call
    return unless new_parent
  end

  modify_params(hsh[association], ary, new_parent)
end
nested_resources(included:, parent:) click to toggle source
# File lib/json_api_preloader/core.rb, line 49
def nested_resources(included:, parent:)
  default_hash = Hash.new { |h, k| h[k] = Hash.new(&h.default_proc) }
  result = included.each_with_object(default_hash) do |param, hash|
    array = param.split('.').map(&:to_sym)
    modify_params(hash, array, parent)
  end
  result
end
parent_model() click to toggle source
# File lib/json_api_preloader/core.rb, line 62
def parent_model
  return unless preload_models?

  config = builder_configuration.detect { |conf| conf[:action] == action_name.to_sym }
  return unless config

  config[:model_name]
end
preload_models?() click to toggle source
# File lib/json_api_preloader/core.rb, line 58
def preload_models?
  @preload_models ||= ModelsPreloadChecker.preload_models?
end
preloaded_query() click to toggle source
# File lib/json_api_preloader/core.rb, line 27
def preloaded_query
  included = params[:include]
  return {} if included.nil? || included.empty?

  nested_resources(
    included: included.split(','),
    parent: parent_model
  )
end