class Fixably::ResourceLazyLoader

Attributes

associations_to_expand[R]
model[R]

Public Class Methods

new(model:) click to toggle source
# File lib/fixably/resource_lazy_loader.rb, line 8
def initialize(model:)
  if !model.respond_to?(:ancestors) ||
      !model.ancestors.include?(ApplicationResource)
    raise(
      ArgumentError,
      "The model is expected to be a class that extend ApplicationResource"
    )
  end

  @model = model
  @associations_to_expand = Set.new
end

Public Instance Methods

all(*args) click to toggle source
# File lib/fixably/resource_lazy_loader.rb, line 56
def all(*args)
  options = expand_associations(args.slice(0) || {})
  arguments = [options].concat(args[1..] || [])

  model.all(*arguments)
end
find(*args) click to toggle source
# File lib/fixably/resource_lazy_loader.rb, line 34
def find(*args)
  id = args.slice(0)
  options = expand_associations(args.slice(1) || {})
  arguments = [options].concat(args[2..] || [])

  model.find(id, *arguments)
end
first(*args) click to toggle source
# File lib/fixably/resource_lazy_loader.rb, line 42
def first(*args)
  options = expand_associations(args.slice(0) || {})
  arguments = [options].concat(args[1..] || [])

  model.first(*arguments)
end
includes(association) click to toggle source
# File lib/fixably/resource_lazy_loader.rb, line 21
def includes(association)
  unless model.reflections.key?(association)
    raise(
      ArgumentError,
      "#{association} is not a known association of #{model}"
    )
  end

  associations_to_expand << association

  self
end
last(*args) click to toggle source
# File lib/fixably/resource_lazy_loader.rb, line 49
def last(*args)
  options = expand_associations(args.slice(0) || {})
  arguments = [options].concat(args[1..] || [])

  model.last(*arguments)
end
where(clauses = {}) click to toggle source
# File lib/fixably/resource_lazy_loader.rb, line 63
def where(clauses = {})
  arguments = expand_associations(clauses)
  model.where(arguments)
end

Private Instance Methods

expand_associations(args) click to toggle source
# File lib/fixably/resource_lazy_loader.rb, line 70
def expand_associations(args)
  expand = args[:expand].to_a.to_set
  args[:expand] = expand.merge(associations_to_expand)
  args
end