Sha256: c409dab13697a1b910d69455777d6d8ace85b7774e5d371ffbaec35429042466

Contents?: true

Size: 1.11 KB

Versions: 4

Compression:

Stored size: 1.11 KB

Contents

module ApiResource

	module Finders

		class MultiObjectAssociationFinder < AbstractFinder

			# If they pass in the internal object just skip the first
			# step and apply the includes
			def initialize(klass, condition, internal_object = nil)
				super(klass, condition)

				@internal_object = internal_object
			end

			def load
				# otherwise just instantiate the record
				unless self.condition.remote_path
					raise "Tried to load association without a remote path"
				end

				unless @internal_object
					data = self.klass.connection.get(self.build_load_path)
					return [] if data.blank?

					@internal_object = self.klass.instantiate_collection(data)
				end

				@loaded = true

				id_hash = self.condition.included_objects.inject({}) do |accum, assoc|
					accum[assoc] = @internal_object.collect do |obj|
						obj.send(obj.class.association_foreign_key_field(assoc))
					end

					accum[assoc].flatten!
					accum[assoc].uniq!
					accum
				end

				included_objects = self.load_includes(id_hash)

				self.apply_includes(@internal_object, included_objects)

				return @internal_object
			end
		end

	end

end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
api_resource-0.6.4 lib/api_resource/finders/multi_object_association_finder.rb
api_resource-0.6.3 lib/api_resource/finders/multi_object_association_finder.rb
api_resource-0.6.2 lib/api_resource/finders/multi_object_association_finder.rb
api_resource-0.6.1 lib/api_resource/finders/multi_object_association_finder.rb