Method: Adapi::Campaign#update_ad_groups!
- Defined in:
- lib/adapi/campaign.rb
#update_ad_groups!(ad_groups = []) ⇒ Object
helper method that updates ad_groups. called from Campaign#update method
243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 |
# File 'lib/adapi/campaign.rb', line 243 def update_ad_groups!(ad_groups = []) return true if ad_groups.nil? or ad_groups.empty? # FIXME deep symbolize_keys ad_groups.map! { |ag| ag.symbolize_keys } # check if every ad_group has either :id or :name parameter ad_groups.each do |ag| if ag[:id].blank? && ag[:name].blank? self.errors.add("AdGroup", "required parameter (:id or :name) is missing") return false end end # get current ad_groups original_ad_groups = AdGroup.find(:all, :campaign_id => @id) ad_groups.each do |ad_group_data| ad_group_data[:campaign_id] = @id # find ad_group by id or name k, v = ad_group_data.has_key?(:id) ? [:id, ad_group_data[:id]] : [:name, ad_group_data[:name]] ad_group = original_ad_groups.find { |ag| ag[k] == v } # update existing ad_group if ad_group.present? ad_group.update(ad_group_data) original_ad_groups.delete_if { |ag| ag[k] == v } # create new ad_group # FIXME report error if searching by :id, because such ad_group should exists else ad_group_data.delete(:id) ad_group = AdGroup.create(ad_group_data) end check_for_errors(ad_group, :prefix => "AdGroup \"#{ad_group[:id] || ad_group[:name]}\"") end # delete ad_groups which haven't been updated original_ad_groups.each do |ag| unless ag.delete # FIXME storing error twice for the moment because neither # of these errors says all the needed information self.errors.add("AdGroup #{ag[:id]}", "could not be deleted") self.store_errors(ad_group, "AdGroup #{ag[:id]}") return false end end self.errors.empty? rescue CampaignError => e false end |