facebookbusiness 0.7.0.3 → 0.10.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (127) hide show
  1. checksums.yaml +4 -4
  2. data/lib/facebook_ads/ad_objects/ad.rb +4 -1
  3. data/lib/facebook_ads/ad_objects/ad_account.rb +33 -46
  4. data/lib/facebook_ads/ad_objects/ad_account_ad_volume.rb +24 -0
  5. data/lib/facebook_ads/ad_objects/ad_account_delivery_estimate.rb +1 -0
  6. data/lib/facebook_ads/ad_objects/ad_account_matched_search_applications_edge_data.rb +1 -0
  7. data/lib/facebook_ads/ad_objects/ad_account_targeting_unified.rb +22 -5
  8. data/lib/facebook_ads/ad_objects/ad_activity.rb +0 -1
  9. data/lib/facebook_ads/ad_objects/ad_asset_feed_spec.rb +8 -0
  10. data/lib/facebook_ads/ad_objects/ad_async_request.rb +2 -0
  11. data/lib/facebook_ads/ad_objects/ad_campaign_activity.rb +10 -2
  12. data/lib/facebook_ads/ad_objects/ad_campaign_delivery_estimate.rb +1 -0
  13. data/lib/facebook_ads/ad_objects/ad_creative.rb +8 -0
  14. data/lib/facebook_ads/ad_objects/ad_creative_interactive_components_spec.rb +1 -0
  15. data/lib/facebook_ads/ad_objects/ad_creative_link_data_call_to_action.rb +6 -0
  16. data/lib/facebook_ads/ad_objects/{offline_terms_of_service.rb → ad_creative_omnichannel_link_spec.rb} +5 -4
  17. data/lib/facebook_ads/ad_objects/ad_network_analytics_sync_query_result.rb +1 -0
  18. data/lib/facebook_ads/ad_objects/ad_place_page_set.rb +6 -0
  19. data/lib/facebook_ads/ad_objects/ad_preview.rb +4 -0
  20. data/lib/facebook_ads/ad_objects/ad_report_run.rb +1 -0
  21. data/lib/facebook_ads/ad_objects/ad_report_spec.rb +0 -1
  22. data/lib/facebook_ads/ad_objects/ad_rule_evaluation_spec.rb +1 -2
  23. data/lib/facebook_ads/ad_objects/ad_rule_execution_spec.rb +4 -0
  24. data/lib/facebook_ads/ad_objects/ad_set.rb +6 -2
  25. data/lib/facebook_ads/ad_objects/ad_study.rb +1 -12
  26. data/lib/facebook_ads/ad_objects/ad_study_objective.rb +1 -4
  27. data/lib/facebook_ads/ad_objects/ad_video.rb +8 -6
  28. data/lib/facebook_ads/ad_objects/adgroup_activity.rb +2 -0
  29. data/lib/facebook_ads/ad_objects/adgroup_placement_specific_review_feedback.rb +1 -0
  30. data/lib/facebook_ads/ad_objects/adoptable_pet.rb +8 -0
  31. data/lib/facebook_ads/ad_objects/ads_action_stats.rb +2 -0
  32. data/lib/facebook_ads/ad_objects/ads_insights.rb +3 -1
  33. data/lib/facebook_ads/ad_objects/ads_pixel.rb +8 -0
  34. data/lib/facebook_ads/ad_objects/album.rb +0 -10
  35. data/lib/facebook_ads/ad_objects/application.rb +18 -4
  36. data/lib/facebook_ads/ad_objects/atlas_campaign.rb +1 -1
  37. data/lib/facebook_ads/ad_objects/automotive_model.rb +26 -0
  38. data/lib/facebook_ads/ad_objects/business.rb +77 -2
  39. data/lib/facebook_ads/ad_objects/business_asset_group.rb +2 -0
  40. data/lib/facebook_ads/ad_objects/business_role_request.rb +4 -0
  41. data/lib/facebook_ads/ad_objects/business_unit.rb +1 -2
  42. data/lib/facebook_ads/ad_objects/business_user.rb +4 -0
  43. data/lib/facebook_ads/ad_objects/campaign.rb +11 -2
  44. data/lib/facebook_ads/ad_objects/{friend_list.rb → catalog_item_channels_to_integrity_status.rb} +5 -5
  45. data/lib/facebook_ads/ad_objects/catalog_sub_vertical_list.rb +91 -0
  46. data/lib/facebook_ads/ad_objects/comment.rb +1 -0
  47. data/lib/facebook_ads/ad_objects/commerce_merchant_settings.rb +17 -19
  48. data/lib/facebook_ads/ad_objects/commerce_merchant_settings_setup_status.rb +1 -0
  49. data/lib/facebook_ads/ad_objects/commerce_order.rb +6 -0
  50. data/lib/facebook_ads/ad_objects/commerce_order_transaction_detail.rb +4 -0
  51. data/lib/facebook_ads/ad_objects/{work_meeting_link.rb → connections_targeting.rb} +3 -2
  52. data/lib/facebook_ads/ad_objects/{atlas_url.rb → contextual_bundling_spec.rb} +2 -2
  53. data/lib/facebook_ads/ad_objects/{iterative_split_test_config.rb → cpas_advertiser_partnership_recommendation.rb} +9 -9
  54. data/lib/facebook_ads/ad_objects/cpas_collaboration_request.rb +50 -0
  55. data/lib/facebook_ads/ad_objects/custom_audience.rb +8 -10
  56. data/lib/facebook_ads/ad_objects/custom_audience_data_source.rb +1 -0
  57. data/lib/facebook_ads/ad_objects/da_check.rb +7 -0
  58. data/lib/facebook_ads/ad_objects/destination.rb +1 -0
  59. data/lib/facebook_ads/ad_objects/event.rb +1 -1
  60. data/lib/facebook_ads/ad_objects/extended_credit.rb +7 -1
  61. data/lib/facebook_ads/ad_objects/flight.rb +1 -0
  62. data/lib/facebook_ads/ad_objects/group.rb +29 -23
  63. data/lib/facebook_ads/ad_objects/home_listing.rb +1 -0
  64. data/lib/facebook_ads/ad_objects/hotel.rb +1 -0
  65. data/lib/facebook_ads/ad_objects/hotel_room.rb +1 -0
  66. data/lib/facebook_ads/ad_objects/ig_media.rb +0 -1
  67. data/lib/facebook_ads/ad_objects/ig_user.rb +6 -1
  68. data/lib/facebook_ads/ad_objects/image_copyright.rb +302 -0
  69. data/lib/facebook_ads/ad_objects/insights_result.rb +1 -1
  70. data/lib/facebook_ads/ad_objects/instagram_user.rb +0 -3
  71. data/lib/facebook_ads/ad_objects/life_event.rb +0 -4
  72. data/lib/facebook_ads/ad_objects/link.rb +0 -10
  73. data/lib/facebook_ads/ad_objects/live_video.rb +0 -4
  74. data/lib/facebook_ads/ad_objects/messenger_profile.rb +1 -0
  75. data/lib/facebook_ads/ad_objects/native_offer_view.rb +0 -1
  76. data/lib/facebook_ads/ad_objects/oracle_transaction.rb +0 -7
  77. data/lib/facebook_ads/ad_objects/page.rb +76 -72
  78. data/lib/facebook_ads/ad_objects/page_call_to_action.rb +3 -0
  79. data/lib/facebook_ads/ad_objects/page_commerce_eligibility.rb +38 -0
  80. data/lib/facebook_ads/ad_objects/page_post.rb +0 -8
  81. data/lib/facebook_ads/ad_objects/{user_taggable_friend.rb → payment_engine_payment.rb} +36 -13
  82. data/lib/facebook_ads/ad_objects/payment_subscription.rb +3 -3
  83. data/lib/facebook_ads/ad_objects/photo.rb +0 -4
  84. data/lib/facebook_ads/ad_objects/playable_content.rb +1 -0
  85. data/lib/facebook_ads/ad_objects/post.rb +46 -27
  86. data/lib/facebook_ads/ad_objects/product_catalog.rb +57 -9
  87. data/lib/facebook_ads/ad_objects/product_feed.rb +32 -1
  88. data/lib/facebook_ads/ad_objects/product_feed_schedule.rb +2 -0
  89. data/lib/facebook_ads/ad_objects/product_group.rb +1 -0
  90. data/lib/facebook_ads/ad_objects/product_item.rb +11 -1
  91. data/lib/facebook_ads/ad_objects/{user_payment_methods_info.rb → product_item_ar_data.rb} +23 -8
  92. data/lib/facebook_ads/ad_objects/product_set.rb +1 -0
  93. data/lib/facebook_ads/ad_objects/product_set_metadata.rb +1 -0
  94. data/lib/facebook_ads/ad_objects/publisher_block_list.rb +6 -0
  95. data/lib/facebook_ads/ad_objects/referral.rb +2 -0
  96. data/lib/facebook_ads/ad_objects/security_settings.rb +0 -1
  97. data/lib/facebook_ads/ad_objects/server_side/action_source.rb +48 -0
  98. data/lib/facebook_ads/ad_objects/server_side/batch_processor.rb +73 -0
  99. data/lib/facebook_ads/ad_objects/server_side/content.rb +23 -4
  100. data/lib/facebook_ads/ad_objects/server_side/custom_data.rb +21 -0
  101. data/lib/facebook_ads/ad_objects/server_side/delivery_category.rb +33 -0
  102. data/lib/facebook_ads/ad_objects/server_side/event.rb +32 -6
  103. data/lib/facebook_ads/ad_objects/server_side/event_request.rb +61 -14
  104. data/lib/facebook_ads/ad_objects/server_side/event_request_async.rb +43 -0
  105. data/lib/facebook_ads/ad_objects/server_side/http_method.rb +28 -0
  106. data/lib/facebook_ads/ad_objects/{page_about_story.rb → server_side/http_service_interface.rb} +10 -16
  107. data/lib/facebook_ads/ad_objects/server_side/http_util.rb +31 -0
  108. data/lib/facebook_ads/ad_objects/server_side/user_data.rb +20 -1
  109. data/lib/facebook_ads/ad_objects/server_side/util.rb +27 -1
  110. data/lib/facebook_ads/ad_objects/system_user.rb +4 -4
  111. data/lib/facebook_ads/ad_objects/targeting.rb +3 -5
  112. data/lib/facebook_ads/ad_objects/third_party_measurement_report_dataset.rb +0 -1
  113. data/lib/facebook_ads/ad_objects/user.rb +35 -32
  114. data/lib/facebook_ads/ad_objects/vehicle.rb +2 -0
  115. data/lib/facebook_ads/ad_objects/vehicle_offer.rb +1 -0
  116. data/lib/facebook_ads/ad_objects/whats_app_business_account.rb +25 -0
  117. data/lib/facebook_ads/ad_objects/{read_only_analytics_user_property_config.rb → whats_app_business_profile.rb} +2 -3
  118. data/lib/facebook_ads/edge.rb +2 -1
  119. data/lib/facebook_ads/errors.rb +1 -1
  120. data/lib/facebook_ads/session.rb +1 -1
  121. data/lib/facebook_ads/version.rb +2 -2
  122. metadata +47 -28
  123. data/lib/facebook_ads/ad_objects/ad_account_creation_request.rb +0 -71
  124. data/lib/facebook_ads/ad_objects/ad_account_roas.rb +0 -65
  125. data/lib/facebook_ads/ad_objects/event_tour.rb +0 -56
  126. data/lib/facebook_ads/ad_objects/split_test_config.rb +0 -41
  127. data/lib/facebook_ads/ad_objects/user_payment_modules_options.rb +0 -40
@@ -68,6 +68,35 @@ module FacebookAds
68
68
  "VEHICLE_OFFER",
69
69
  ]
70
70
 
71
+ ITEM_SUB_TYPE = [
72
+ "APPLIANCES",
73
+ "BABY_FEEDING",
74
+ "BABY_TRANSPORT",
75
+ "BEAUTY",
76
+ "BEDDING",
77
+ "CAMERAS",
78
+ "CELL_PHONES_AND_SMART_WATCHES",
79
+ "CLEANING_SUPPLIES",
80
+ "CLOTHING",
81
+ "CLOTHING_ACCESSORIES",
82
+ "COMPUTERS_AND_TABLETS",
83
+ "DIAPERING_AND_POTTY_TRAINING",
84
+ "ELECTRONICS_ACCESSORIES",
85
+ "FURNITURE",
86
+ "HEALTH",
87
+ "HOME_GOODS",
88
+ "JEWELRY",
89
+ "NURSERY",
90
+ "PRINTERS_AND_SCANNERS",
91
+ "PROJECTORS",
92
+ "SHOES_AND_FOOTWEAR",
93
+ "SOFTWARE",
94
+ "TOYS",
95
+ "TVS_AND_MONITORS",
96
+ "VIDEO_GAME_CONSOLES_AND_VIDEO_GAMES",
97
+ "WATCHES",
98
+ ]
99
+
71
100
  OVERRIDE_TYPE = [
72
101
  "CATALOG_SEGMENT_CUSTOMIZE_DEFAULT",
73
102
  "COUNTRY",
@@ -85,7 +114,9 @@ module FacebookAds
85
114
  field :encoding, 'string'
86
115
  field :file_name, 'string'
87
116
  field :id, 'string'
117
+ field :item_sub_type, 'string'
88
118
  field :latest_upload, 'ProductFeedUpload'
119
+ field :migrated_from_feed_id, 'string'
89
120
  field :name, 'string'
90
121
  field :override_type, 'string'
91
122
  field :product_count, 'int'
@@ -95,7 +126,7 @@ module FacebookAds
95
126
  field :feed_type, { enum: -> { FEED_TYPE }}
96
127
  field :override_value, 'string'
97
128
  field :rules, { list: 'string' }
98
- field :whitelisted_properties, { list: 'string' }
129
+ field :selected_override_fields, { list: 'string' }
99
130
 
100
131
  has_edge :automotive_models do |edge|
101
132
  edge.get 'AutomotiveModel' do |api|
@@ -54,6 +54,8 @@ module FacebookAds
54
54
  field :timezone, 'string'
55
55
  field :url, 'string'
56
56
  field :username, 'string'
57
+ has_no_post
58
+ has_no_delete
57
59
 
58
60
  end
59
61
  end
@@ -57,6 +57,7 @@ module FacebookAds
57
57
  api.has_param :custom_label_4, 'string'
58
58
  api.has_param :description, 'string'
59
59
  api.has_param :expiration_date, 'string'
60
+ api.has_param :fb_product_category, 'string'
60
61
  api.has_param :gender, { enum: -> { ProductItem::GENDER }}
61
62
  api.has_param :gtin, 'string'
62
63
  api.has_param :image_url, 'string'
@@ -92,6 +92,7 @@ module FacebookAds
92
92
  "FB_APRL_CLOTHING",
93
93
  "FB_APRL_COSTUME",
94
94
  "FB_APRL_CSTM",
95
+ "FB_APRL_FORMAL",
95
96
  "FB_APRL_HANDBAG",
96
97
  "FB_APRL_JEWELRY",
97
98
  "FB_APRL_SHOE",
@@ -293,10 +294,12 @@ module FacebookAds
293
294
  field :additional_variant_attributes, 'hash'
294
295
  field :age_group, { enum: -> { AGE_GROUP }}
295
296
  field :applinks, 'CatalogItemAppLinks'
297
+ field :ar_data, 'ProductItemArData'
296
298
  field :availability, { enum: -> { AVAILABILITY }}
297
299
  field :brand, 'string'
298
300
  field :capability_to_review_status, 'hash'
299
301
  field :category, 'string'
302
+ field :category_specific_fields, 'CatalogSubVerticalList'
300
303
  field :color, 'string'
301
304
  field :commerce_insights, 'ProductItemCommerceInsights'
302
305
  field :condition, { enum: -> { CONDITION }}
@@ -309,17 +312,20 @@ module FacebookAds
309
312
  field :custom_label_4, 'string'
310
313
  field :description, 'string'
311
314
  field :expiration_date, 'string'
315
+ field :fb_product_category, 'string'
312
316
  field :gender, { enum: -> { GENDER }}
313
317
  field :gtin, 'string'
314
318
  field :id, 'string'
315
319
  field :image_cdn_urls, 'hash'
316
320
  field :image_url, 'string'
321
+ field :images, { list: 'string' }
317
322
  field :inventory, 'int'
318
323
  field :manufacturer_part_number, 'string'
319
324
  field :material, 'string'
320
325
  field :mobile_link, 'string'
321
326
  field :name, 'string'
322
327
  field :ordering_index, 'int'
328
+ field :parent_product_id, 'string'
323
329
  field :pattern, 'string'
324
330
  field :price, 'string'
325
331
  field :product_catalog, 'ProductCatalog'
@@ -340,7 +346,7 @@ module FacebookAds
340
346
  field :start_date, 'string'
341
347
  field :url, 'string'
342
348
  field :visibility, { enum: -> { VISIBILITY }}
343
- field :additional_image_files, { list: 'file' }
349
+ field :additional_uploaded_image_ids, { list: 'string' }
344
350
  field :android_app_name, 'string'
345
351
  field :android_class, 'string'
346
352
  field :android_package, 'string'
@@ -365,6 +371,10 @@ module FacebookAds
365
371
  field :windows_phone_app_name, 'string'
366
372
  field :windows_phone_url, 'string'
367
373
 
374
+ has_edge :channels_to_integrity_status do |edge|
375
+ edge.get 'CatalogItemChannelsToIntegrityStatus'
376
+ end
377
+
368
378
  has_edge :product_sets do |edge|
369
379
  edge.get 'ProductSet'
370
380
  end
@@ -25,15 +25,30 @@ module FacebookAds
25
25
  # on github and we'll fix in our codegen framework. We'll not be able to accept
26
26
  # pull request for this class.
27
27
 
28
- class UserPaymentMethodsInfo < AdObject
28
+ class ProductItemArData < AdObject
29
+ SURFACES = [
30
+ "B2C_MARKETPLACE",
31
+ "C2C_MARKETPLACE",
32
+ "DA",
33
+ "DAILY_DEALS",
34
+ "DAILY_DEALS_LEGACY",
35
+ "IG_PRODUCT_TAGGING",
36
+ "MARKETPLACE",
37
+ "MARKETPLACE_ADS_DEPRECATED",
38
+ "MARKETPLACE_SHOPS",
39
+ "OFFLINE_CONVERSIONS",
40
+ "SHOPS",
41
+ "UNIVERSAL_CHECKOUT",
42
+ ]
29
43
 
30
- field :account_id, 'string'
31
- field :available_card_types, { list: 'string' }
32
- field :available_payment_methods, { list: 'string' }
33
- field :available_payment_methods_details, { list: 'object' }
34
- field :country, 'string'
35
- field :currency, 'string'
36
- field :existing_payment_methods, { list: 'object' }
44
+
45
+ field :container_effect, 'string'
46
+ field :effect_icon, 'string'
47
+ field :effect_parameters, 'object'
48
+ field :picker_icon, 'string'
49
+ field :product_ar_link, 'object'
50
+ field :state, 'string'
51
+ field :surfaces, { list: { enum: -> { SURFACES }} }
37
52
  has_no_id
38
53
  has_no_get
39
54
  has_no_post
@@ -35,6 +35,7 @@ module FacebookAds
35
35
  field :name, 'string'
36
36
  field :product_catalog, 'ProductCatalog'
37
37
  field :product_count, 'int'
38
+ field :retailer_id, 'string'
38
39
  field :metadata, 'hash'
39
40
 
40
41
  has_edge :automotive_models do |edge|
@@ -29,6 +29,7 @@ module FacebookAds
29
29
 
30
30
  field :cover_image_url, 'string'
31
31
  field :description, 'string'
32
+ field :external_url, 'string'
32
33
  field :integrity_review_status, 'string'
33
34
  has_no_id
34
35
  has_no_get
@@ -38,6 +38,12 @@ module FacebookAds
38
38
  field :owner_ad_account_id, 'string'
39
39
  field :web_publishers, { list: 'object' }
40
40
 
41
+ has_edge :append_publisher_urls do |edge|
42
+ edge.post do |api|
43
+ api.has_param :publisher_urls, { list: 'string' }
44
+ end
45
+ end
46
+
41
47
  has_edge :paged_web_publishers do |edge|
42
48
  edge.get do |api|
43
49
  api.has_param :draft_id, 'string'
@@ -34,10 +34,12 @@ module FacebookAds
34
34
  field :namespace, 'string'
35
35
  field :need_promo_code, 'bool'
36
36
  field :offer_origin, 'string'
37
+ field :privacy_policy_link, 'string'
37
38
  field :promotion_text, 'string'
38
39
  field :receiver_benefits_text, 'string'
39
40
  field :referral_link_uri, 'string'
40
41
  field :sender_benefits_text, 'string'
42
+ field :terms_and_condition_link, 'string'
41
43
 
42
44
  end
43
45
  end
@@ -27,7 +27,6 @@ module FacebookAds
27
27
 
28
28
  class SecuritySettings < AdObject
29
29
 
30
- field :secure_browsing, 'object'
31
30
  has_no_id
32
31
  has_no_get
33
32
  has_no_post
@@ -0,0 +1,48 @@
1
+ # Copyright (c) 2017-present, Facebook, Inc. All rights reserved.
2
+ #
3
+ # You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
4
+ # copy, modify, and distribute this software in source code or binary form for use
5
+ # in connection with the web services and APIs provided by Facebook.
6
+ #
7
+ # As with any software that integrates with the Facebook platform, your use of
8
+ # this software is subject to the Facebook Platform Policy
9
+ # [http://developers.facebook.com/policy/]. This copyright notice shall be
10
+ # included in all copies or substantial portions of the software.
11
+ #
12
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
13
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
14
+ # FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
15
+ # COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
16
+ # IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
17
+ # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
18
+
19
+ module FacebookAds
20
+ module ServerSide
21
+ ActionSource = Set[
22
+
23
+ # Conversion happened over email.
24
+ 'email',
25
+
26
+ # Conversion was made on your website.
27
+ 'website',
28
+
29
+ # Conversion was made using your app.
30
+ 'app',
31
+
32
+ # Conversion was made over the phone.
33
+ 'phone_call',
34
+
35
+ # Conversion was made via a messaging app, SMS, or online messaging feature.
36
+ 'chat',
37
+
38
+ # Conversion was made in person at your physical store.
39
+ 'physical_store',
40
+
41
+ # Conversion happened automatically, for example, a subscription renewal that's set on auto-pay each month.
42
+ 'system_generated',
43
+
44
+ # Conversion happened in a way that is not listed.
45
+ 'other'
46
+ ]
47
+ end
48
+ end
@@ -0,0 +1,73 @@
1
+ # Copyright (c) 2017-present, Facebook, Inc. All rights reserved.
2
+ #
3
+ # You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
4
+ # copy, modify, and distribute this software in source code or binary form for use
5
+ # in connection with the web services and APIs provided by Facebook.
6
+ #
7
+ # As with any software that integrates with the Facebook platform, your use of
8
+ # this software is subject to the Facebook Platform Policy
9
+ # [http://developers.facebook.com/policy/]. This copyright notice shall be
10
+ # included in all copies or substantial portions of the software.
11
+ #
12
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
13
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
14
+ # FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
15
+ # COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
16
+ # IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
17
+ # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
18
+
19
+ module FacebookAds::ServerSide
20
+ class BatchProcessor
21
+ attr_accessor :batch_size
22
+ attr_accessor :concurrent_requests
23
+
24
+ # Initializes the object
25
+ # @param [Integer] batch_size The number of events to send in each request
26
+ # @param [Integer] concurrent_requests The number of threads to use when making requests concurrently
27
+ def initialize(batch_size=50, concurrent_requests=4)
28
+ self.batch_size = batch_size
29
+ self.concurrent_requests = concurrent_requests
30
+ end
31
+
32
+ def process_event_requests(event_requests_async)
33
+ generator = self.process_event_requests_generator(event_requests_async)
34
+ generator.each do |batch|
35
+ Concurrent::Promise.zip(*batch).execute.value!
36
+ end
37
+ end
38
+
39
+ def process_events(event_request_async_to_clone, events)
40
+ generator = self.process_events_generator(event_request_async_to_clone, events)
41
+ generator.each do |batch|
42
+ Concurrent::Promise.zip(*batch).execute.value!
43
+ end
44
+ end
45
+
46
+ def process_event_requests_generator(event_requests_async)
47
+ index = 0
48
+ Enumerator.new do |generator|
49
+ while index < event_requests_async.size do
50
+ batch = event_requests_async[index, concurrent_requests].map(&:execute)
51
+ generator.yield *[batch]
52
+ index += concurrent_requests
53
+ end
54
+ end
55
+ end
56
+
57
+ def process_events_generator(event_request_async_to_clone, events)
58
+ index = 0
59
+ Enumerator.new do |generator|
60
+ while index < events.size do
61
+ batch = []
62
+ while index < events.size && batch.size < concurrent_requests do
63
+ event_request_async = event_request_async_to_clone.clone_without_events
64
+ event_request_async.events = events[index, batch_size]
65
+ batch << event_request_async
66
+ index += batch_size
67
+ end
68
+ generator.yield *[batch.map(&:execute)]
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -28,7 +28,8 @@ module FacebookAds
28
28
  :title,
29
29
  :description,
30
30
  :brand,
31
- :category
31
+ :category,
32
+ :delivery_category
32
33
 
33
34
  # Initializes the object
34
35
  # @param [String] product_id
@@ -38,7 +39,8 @@ module FacebookAds
38
39
  # @param [String] description
39
40
  # @param [String] brand
40
41
  # @param [String] category
41
- def initialize(product_id: nil, quantity: nil, item_price: nil, title: nil, description: nil, brand: nil, category: nil)
42
+ # @param [String] delivery_category
43
+ def initialize(product_id: nil, quantity: nil, item_price: nil, title: nil, description: nil, brand: nil, category: nil, delivery_category: nil)
42
44
  unless product_id.nil?
43
45
  self.product_id = String(product_id)
44
46
  end
@@ -60,6 +62,9 @@ module FacebookAds
60
62
  unless category.nil?
61
63
  self.category = String(category)
62
64
  end
65
+ unless delivery_category.nil?
66
+ self.delivery_category = String(delivery_category)
67
+ end
63
68
  end
64
69
 
65
70
  # build the object using the input hash
@@ -97,6 +102,10 @@ module FacebookAds
97
102
  if attributes.has_key?(:'category')
98
103
  self.category = attributes[:'category']
99
104
  end
105
+
106
+ if attributes.has_key?(:'delivery_category')
107
+ self.delivery_category = attributes[:'delivery_category']
108
+ end
100
109
  end
101
110
 
102
111
  # Checks equality by comparing each attribute.
@@ -108,7 +117,8 @@ module FacebookAds
108
117
  title == o.title &&
109
118
  description == o.description &&
110
119
  brand == o.brand &&
111
- category == o.category
120
+ category == o.category &&
121
+ delivery_category == o.delivery_category
112
122
  end
113
123
 
114
124
  # @see the `==` method
@@ -126,7 +136,8 @@ module FacebookAds
126
136
  title,
127
137
  description,
128
138
  brand,
129
- category
139
+ category,
140
+ delivery_category
130
141
  ].hash
131
142
  end
132
143
 
@@ -156,6 +167,9 @@ module FacebookAds
156
167
  unless category.nil?
157
168
  hash['category'] = category
158
169
  end
170
+ unless delivery_category.nil?
171
+ hash['delivery_category'] = delivery_category
172
+ end
159
173
  hash.to_s
160
174
  end
161
175
 
@@ -183,6 +197,11 @@ module FacebookAds
183
197
  unless category.nil?
184
198
  hash['category'] = category
185
199
  end
200
+ unless delivery_category.nil?
201
+ hash['delivery_category'] = FacebookAds::ServerSide::Util.normalize_delivery_category(
202
+ delivery_category
203
+ )
204
+ end
186
205
  hash
187
206
  end
188
207
  end
@@ -70,6 +70,10 @@ module FacebookAds
70
70
  # Example: 'lettuce'.
71
71
  attr_accessor :search_string
72
72
 
73
+ # Type of delivery for a purchase event
74
+ # Example: 'home_delivery'.
75
+ attr_accessor :delivery_category
76
+
73
77
  # The item number.
74
78
  # Example: 'item1234'.
75
79
  attr_accessor :item_number
@@ -90,6 +94,7 @@ module FacebookAds
90
94
  # @param [Integer] num_items
91
95
  # @param [String] status
92
96
  # @param [String] search_string
97
+ # @param [String] delivery_category
93
98
  # @param [String] item_number
94
99
  # @param [String] custom_properties
95
100
  def initialize(value: nil,
@@ -104,6 +109,7 @@ module FacebookAds
104
109
  num_items: nil,
105
110
  status: nil,
106
111
  search_string: nil,
112
+ delivery_category: nil,
107
113
  item_number: nil,
108
114
  custom_properties: {})
109
115
 
@@ -143,6 +149,9 @@ module FacebookAds
143
149
  unless search_string.nil?
144
150
  self.search_string = search_string
145
151
  end
152
+ unless delivery_category.nil?
153
+ self.delivery_category = delivery_category
154
+ end
146
155
  unless item_number.nil?
147
156
  self.item_number = item_number
148
157
  end
@@ -212,6 +221,10 @@ module FacebookAds
212
221
  self.search_string = attributes[:'search_string']
213
222
  end
214
223
 
224
+ if attributes.has_key?(:'delivery_category')
225
+ self.delivery_category = attributes[:'delivery_category']
226
+ end
227
+
215
228
  if attributes.has_key?(:'item_number')
216
229
  self.item_number = attributes[:'item_number']
217
230
  end
@@ -237,6 +250,7 @@ module FacebookAds
237
250
  num_items == o.num_items &&
238
251
  status == o.status &&
239
252
  search_string == o.search_string &&
253
+ delivery_category == o.delivery_category &&
240
254
  item_number == o.item_number &&
241
255
  custom_properties == o.custom_properties
242
256
  end
@@ -262,6 +276,7 @@ module FacebookAds
262
276
  num_items,
263
277
  status,
264
278
  search_string,
279
+ delivery_category,
265
280
  item_number,
266
281
  custom_properties
267
282
  ].hash
@@ -307,6 +322,9 @@ module FacebookAds
307
322
  unless search_string.nil?
308
323
  hash['search_string'] = search_string
309
324
  end
325
+ unless delivery_category.nil?
326
+ hash['delivery_category'] = delivery_category
327
+ end
310
328
  unless custom_properties.nil?
311
329
  hash['custom_properties'] = custom_properties
312
330
  end
@@ -354,6 +372,9 @@ module FacebookAds
354
372
  unless search_string.nil?
355
373
  hash['search_string'] = search_string
356
374
  end
375
+ unless delivery_category.nil?
376
+ hash['delivery_category'] = FacebookAds::ServerSide::Util.normalize(delivery_category, 'delivery_category')
377
+ end
357
378
  unless item_number.nil?
358
379
  hash['item_number'] = item_number
359
380
  end