class Graphiti::Util::Link

Public Class Methods

new(sideload, model) click to toggle source
# File lib/graphiti/util/link.rb, line 4
def initialize(sideload, model)
  @sideload = sideload
  @model = model
  @linkable = true

  if @sideload.type == :polymorphic_belongs_to
    if (type = @model.send(@sideload.grouper.field_name))
      @sideload = @sideload.children.values.find { |c|
        c.group_name == type.to_sym
      }
      @polymorphic_sideload_not_found = true unless @sideload
    else
      @linkable = false
    end
  end
end

Public Instance Methods

generate() click to toggle source
# File lib/graphiti/util/link.rb, line 21
def generate
  if linkable?
    on_demand_links(raw_url)
  end
end

Private Instance Methods

context() click to toggle source
# File lib/graphiti/util/link.rb, line 84
def context
  Graphiti.context[:object]
end
linkable?() click to toggle source
# File lib/graphiti/util/link.rb, line 29
def linkable?
  return false if @polymorphic_sideload_not_found

  if @sideload.type == :belongs_to
    !@model.send(@sideload.foreign_key).nil?
  else
    @linkable
  end
end
params() click to toggle source
# File lib/graphiti/util/link.rb, line 61
def params
  @params ||= {}.tap do |params|
    if @sideload.type != :belongs_to || @sideload.remote?
      params[:filter] = @sideload.link_filter([@model])
    end

    if (extra_fields = @sideload.link_extra_fields)
      params[:extra_fields] ||= extra_fields
    end

    @sideload.params_proc&.call(params, [@model], context)
  end
end
path() click to toggle source
# File lib/graphiti/util/link.rb, line 75
def path
  @path ||=
    path = @sideload.resource.endpoint[:url].to_s
  if @sideload.type == :belongs_to && !@sideload.remote?
    path = "#{path}/#{@model.send(@sideload.foreign_key)}"
  end
  path
end
raw_url() click to toggle source
# File lib/graphiti/util/link.rb, line 39
def raw_url
  if @sideload.link_proc
    @sideload.link_proc.call(@model)
  elsif params.empty?
    path
  else
    "#{path}?#{CGI.unescape(params.to_query)}"
  end
end