class GraphqlLazyLoad::Custom

Attributes

value[R]

Public Class Methods

new(type, unique_identifier, value, default_value: nil, **params, &block) click to toggle source
# File lib/graphql_lazy_load/custom.rb, line 5
def initialize(type, unique_identifier, value, default_value: nil, **params, &block)
  context_key = [type.class, unique_identifier, params]
  @value = value
  # Initialize the loading state for this query,
  # or get the previously-initiated state
  @lazy = type.context[context_key] ||= {
    values: Set.new,
    results: Hash.new(default_value),
    params: params,
    block: block,
  }
  # Register this to be loaded later unless we've already queued or loaded it
  return if already_loaded_or_queued?
  lazy_values.add(value)
end

Public Instance Methods

result() click to toggle source

Return the loaded record, hitting the database if needed

# File lib/graphql_lazy_load/custom.rb, line 22
def result
  if not_already_loaded? && any_to_load?
    lazy_results.merge!(block_results)
    lazy_values.clear
  end
  lazy_results[value]
end

Private Instance Methods

already_loaded_or_queued?() click to toggle source
# File lib/graphql_lazy_load/custom.rb, line 45
def already_loaded_or_queued?
  lazy_values.include?(value) || lazy_results.key?(value)
end
any_to_load?() click to toggle source
# File lib/graphql_lazy_load/custom.rb, line 53
def any_to_load?
  lazy_values.any?
end
block_results() click to toggle source
# File lib/graphql_lazy_load/custom.rb, line 33
def block_results
  lazy_block.call(lazy_values.to_a, lazy_params)
end
lazy_block() click to toggle source
# File lib/graphql_lazy_load/custom.rb, line 41
def lazy_block
  @lazy[:block]
end
lazy_params() click to toggle source
# File lib/graphql_lazy_load/custom.rb, line 37
def lazy_params
  @lazy[:params]
end
lazy_results() click to toggle source
# File lib/graphql_lazy_load/custom.rb, line 65
def lazy_results
  @lazy[:results]
end
lazy_values() click to toggle source
# File lib/graphql_lazy_load/custom.rb, line 61
def lazy_values
  @lazy[:values]
end
lazy_values_array() click to toggle source
# File lib/graphql_lazy_load/custom.rb, line 57
def lazy_values_array
  lazy_values.to_a
end
not_already_loaded?() click to toggle source
# File lib/graphql_lazy_load/custom.rb, line 49
def not_already_loaded?
  !lazy_results.key?(value)
end