Class: ApiResource::Finders::MultiObjectAssociationFinder
- Inherits:
-
AbstractFinder
- Object
- AbstractFinder
- ApiResource::Finders::MultiObjectAssociationFinder
- Defined in:
- lib/api_resource/finders/multi_object_association_finder.rb
Instance Attribute Summary
Attributes inherited from AbstractFinder
#condition, #found, #internal_object, #klass
Instance Method Summary collapse
-
#initialize(klass, condition, internal_object = nil) ⇒ MultiObjectAssociationFinder
constructor
If they pass in the internal object just skip the first step and apply the includes.
- #load ⇒ Object
Methods inherited from AbstractFinder
#all, #headers, #instance_of?, #is_a?, #kind_of?, #method_missing, #offset, #paginated?, #response, #total_entries
Constructor Details
#initialize(klass, condition, internal_object = nil) ⇒ MultiObjectAssociationFinder
If they pass in the internal object just skip the first step and apply the includes
12 13 14 15 16 17 18 |
# File 'lib/api_resource/finders/multi_object_association_finder.rb', line 12 def initialize(klass, condition, internal_object = nil) super(klass, condition) if internal_object @internal_object = internal_object end end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class ApiResource::Finders::AbstractFinder
Instance Method Details
#load ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/api_resource/finders/multi_object_association_finder.rb', line 20 def load # otherwise just instantiate the record unless self.condition.remote_path raise "Tried to load association without a remote path" end return [] if self.response.blank? @internal_object ||= self.klass.instantiate_collection( Array.wrap(self.response) ) @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 |