Sha256: ef54bf28da9f8cded205c5f6418e6591728f90044e7e273c4f0662144e6cdc35

Contents?: true

Size: 1.47 KB

Versions: 73

Compression:

Stored size: 1.47 KB

Contents

module ZendeskAPI
  # @private
  module Sideloading
    def self.included(klass)
      klass.send(:attr_reader, :included)
    end

    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

    # Traverses the resource looking for associations
    # then descends into those associations and checks for applicable
    # resources to side load
    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

    def to_array(item)
      if item.is_a?(Collection)
        item
      else
        [item].flatten.compact
      end
    end
  end
end

Version data entries

73 entries across 73 versions & 1 rubygems

Version Path
zendesk_api-1.13.4 lib/zendesk_api/sideloading.rb
zendesk_api-1.13.3 lib/zendesk_api/sideloading.rb
zendesk_api-1.13.2 lib/zendesk_api/sideloading.rb
zendesk_api-1.13.1 lib/zendesk_api/sideloading.rb
zendesk_api-1.12.1 lib/zendesk_api/sideloading.rb
zendesk_api-1.12.0 lib/zendesk_api/sideloading.rb
zendesk_api-1.11.7 lib/zendesk_api/sideloading.rb
zendesk_api-1.11.6 lib/zendesk_api/sideloading.rb
zendesk_api-1.11.5 lib/zendesk_api/sideloading.rb
zendesk_api-1.11.4 lib/zendesk_api/sideloading.rb
zendesk_api-1.11.3 lib/zendesk_api/sideloading.rb
zendesk_api-1.11.2 lib/zendesk_api/sideloading.rb
zendesk_api-1.11.1 lib/zendesk_api/sideloading.rb
zendesk_api-1.11.0 lib/zendesk_api/sideloading.rb
zendesk_api-1.10.0 lib/zendesk_api/sideloading.rb
zendesk_api-1.9.6 lib/zendesk_api/sideloading.rb
zendesk_api-1.9.5 lib/zendesk_api/sideloading.rb
zendesk_api-1.9.4 lib/zendesk_api/sideloading.rb
zendesk_api-1.9.3 lib/zendesk_api/sideloading.rb
zendesk_api-1.9.2 lib/zendesk_api/sideloading.rb