@@ -73,72 +73,85 @@ def generate_path(*args)
73
73
namespace . join ( "/" )
74
74
end
75
75
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
88
93
end
89
- end
90
- end
91
94
92
- private
95
+ private
93
96
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
98
101
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
103
106
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"
108
109
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
111
114
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 )
116
117
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
119
122
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
124
132
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
134
134
135
- return unless id
135
+ side_load = side_loads . detect do |side_load |
136
+ id == side_load [ include_key ]
137
+ end
136
138
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
139
141
end
142
+ end
140
143
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
142
155
end
143
156
144
157
def build_parent_namespace ( parent_class , instance , options , original_options )
0 commit comments