@@ -73,72 +73,85 @@ def generate_path(*args)
7373 namespace . join ( "/" )
7474 end
7575
76- # Tries to place side loads onto given resources.
77- def side_load ( resources , side_loads )
78- key = "#{ options . name } _id"
79- plural_key = "#{ Inflection . singular options . name . to_s } _ids"
80-
81- resources . each do |resource |
82- if resource . key? ( plural_key ) # Grab associations from child_ids field on resource
83- side_load_from_child_ids ( resource , side_loads , plural_key )
84- elsif resource . key? ( key ) || options . singular
85- side_load_from_child_or_parent_id ( resource , side_loads , key )
86- else # Grab associations from parent_id field from multiple child resources
87- side_load_from_parent_id ( resource , side_loads , key )
76+ class SideLoad
77+ class << self
78+ attr_reader :options
79+
80+ def side_load ( resources , side_loads )
81+ key = "#{ options . name } _id"
82+ plural_key = "#{ Inflection . singular options . name . to_s } _ids"
83+
84+ resources . each do |resource |
85+ if resource . key? ( plural_key ) # Grab associations from child_ids field on resource
86+ side_load_from_child_ids ( resource , side_loads , plural_key )
87+ elsif resource . key? ( key ) || options . singular
88+ side_load_from_child_or_parent_id ( resource , side_loads , key )
89+ else # Grab associations from parent_id field from multiple child resources
90+ side_load_from_parent_id ( resource , side_loads , key )
91+ end
92+ end
8893 end
89- end
90- end
9194
92- private
95+ private
9396
94- # @return [Array<String>] ['ZendeskAPI', 'Voice', etc.. ]
95- def ignorable_namespace_strings
96- ZendeskAPI :: DataNamespace . descendants . map { | klass | klass . to_s . split ( '::' ) } . flatten . uniq
97- end
97+ def _side_load ( resource , side_loads )
98+ side_loads . map! do | side_load |
99+ resource . send ( :wrap_resource , side_load , options )
100+ end
98101
99- def _side_load ( resource , side_loads )
100- side_loads . map! do | side_load |
101- resource . send ( :wrap_resource , side_load , options )
102- end
102+ ZendeskAPI :: Collection . new ( resource . client , options [ :class ] ) . tap do | collection |
103+ collection . replace ( side_loads )
104+ end
105+ end
103106
104- ZendeskAPI ::Collection . new ( resource . client , options [ :class ] ) . tap do |collection |
105- collection . replace ( side_loads )
106- end
107- end
107+ def side_load_from_parent_id ( resource , side_loads , key )
108+ key = "#{ resource . class . singular_resource_name } _id"
108109
109- def side_load_from_parent_id ( resource , side_loads , key )
110- key = "#{ resource . class . singular_resource_name } _id"
110+ resource . send ( "#{ options . name } =" , _side_load ( resource , side_loads . select { |side_load |
111+ side_load [ key ] == resource . id
112+ } ) )
113+ end
111114
112- resource . send ( "#{ options . name } =" , _side_load ( resource , side_loads . select { |side_load |
113- side_load [ key ] == resource . id
114- } ) )
115- end
115+ def side_load_from_child_ids ( resource , side_loads , plural_key )
116+ ids = resource . send ( plural_key )
116117
117- def side_load_from_child_ids ( resource , side_loads , plural_key )
118- ids = resource . send ( plural_key )
118+ resource . send ( "#{ options . name } =" , _side_load ( resource , side_loads . select { |side_load |
119+ ids . include? ( side_load [ options . include_key ] )
120+ } ) )
121+ end
119122
120- resource . send ( "#{ options . name } =" , _side_load ( resource , side_loads . select { |side_load |
121- ids . include? ( side_load [ options . include_key ] )
122- } ) )
123- end
123+ def side_load_from_child_or_parent_id ( resource , side_loads , key )
124+ # Either grab association from child_id field on resource or parent_id on child resource
125+ if resource . key? ( key )
126+ id = resource . send ( key )
127+ include_key = options . include_key
128+ else
129+ id = resource . id
130+ include_key = "#{ resource . class . singular_resource_name } _id"
131+ end
124132
125- def side_load_from_child_or_parent_id ( resource , side_loads , key )
126- # Either grab association from child_id field on resource or parent_id on child resource
127- if resource . key? ( key )
128- id = resource . send ( key )
129- include_key = options . include_key
130- else
131- id = resource . id
132- include_key = "#{ resource . class . singular_resource_name } _id"
133- end
133+ return unless id
134134
135- return unless id
135+ side_load = side_loads . detect do |side_load |
136+ id == side_load [ include_key ]
137+ end
136138
137- side_load = side_loads . detect do | side_load |
138- id == side_load [ include_key ]
139+ resource . send ( " #{ options . name } =" , side_load ) if side_load
140+ end
139141 end
142+ end
140143
141- resource . send ( "#{ options . name } =" , side_load ) if side_load
144+ # Tries to place side loads onto given resources.
145+ def side_load ( resources , side_loads )
146+ SideLoad . instance_variable_set '@options' , options
147+ SideLoad . side_load ( resources , side_loads )
148+ end
149+
150+ private
151+
152+ # @return [Array<String>] ['ZendeskAPI', 'Voice', etc.. ]
153+ def ignorable_namespace_strings
154+ ZendeskAPI ::DataNamespace . descendants . map { |klass | klass . to_s . split ( '::' ) } . flatten . uniq
142155 end
143156
144157 def build_parent_namespace ( parent_class , instance , options , original_options )
0 commit comments