module ZendeskAPI::Sideloading
@private
Public Class Methods
included(klass)
click to toggle source
# File lib/zendesk_api/sideloading.rb, line 4 def self.included(klass) klass.send(:attr_reader, :included) end
Public Instance Methods
set_includes(resource_or_resources, includes, body)
click to toggle source
# File lib/zendesk_api/sideloading.rb, line 8 def set_includes(resource_or_resources, includes, body) @included = {} includes.each do |side_load| unless body.key?(side_load.to_s) @client.config.logger.warn "Missing #{side_load} key in response -- cannot side load" end end resources = to_array(resource_or_resources) resource_class = resources.first.class return if resources.empty? body.keys.each do |name| @included[name] = body[name] _side_load(name, resource_class, resources) end end
Private Instance Methods
_side_load(name, klass, resources)
click to toggle source
Traverses the resource looking for associations then descends into those associations and checks for applicable resources to side load
# File lib/zendesk_api/sideloading.rb, line 33 def _side_load(name, klass, resources) associations = klass.associated_with(name) associations.each do |association| association.side_load(resources, @included[name]) end resources.each do |resource| loaded_associations = resource.loaded_associations loaded_associations.each do |association| loaded = resource.send(association[:name]) next unless loaded _side_load(name, association[:class], to_array(loaded)) end end end
to_array(item)
click to toggle source
# File lib/zendesk_api/sideloading.rb, line 50 def to_array(item) if item.is_a?(Collection) item else [item].flatten.compact end end