facebookbusiness 0.8.0.2 → 0.9.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/lib/facebook_ads/ad_objects/ad.rb +3 -0
  3. data/lib/facebook_ads/ad_objects/ad_account.rb +21 -13
  4. data/lib/facebook_ads/ad_objects/ad_account_ad_volume.rb +1 -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 +23 -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 +5 -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 +6 -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 +7 -0
  14. data/lib/facebook_ads/ad_objects/ad_creative_link_data_call_to_action.rb +5 -0
  15. data/lib/facebook_ads/ad_objects/{ad_creative_instagram_branded_content.rb → ad_creative_omnichannel_link_spec.rb} +3 -1
  16. data/lib/facebook_ads/ad_objects/ad_preview.rb +1 -0
  17. data/lib/facebook_ads/ad_objects/ad_report_run.rb +1 -0
  18. data/lib/facebook_ads/ad_objects/ad_rule_execution_spec.rb +4 -0
  19. data/lib/facebook_ads/ad_objects/ad_set.rb +3 -1
  20. data/lib/facebook_ads/ad_objects/ad_study.rb +0 -1
  21. data/lib/facebook_ads/ad_objects/ad_study_objective.rb +0 -4
  22. data/lib/facebook_ads/ad_objects/ad_video.rb +5 -10
  23. data/lib/facebook_ads/ad_objects/adgroup_activity.rb +2 -0
  24. data/lib/facebook_ads/ad_objects/adoptable_pet.rb +7 -0
  25. data/lib/facebook_ads/ad_objects/ads_insights.rb +1 -0
  26. data/lib/facebook_ads/ad_objects/ads_pixel.rb +1 -0
  27. data/lib/facebook_ads/ad_objects/album.rb +0 -10
  28. data/lib/facebook_ads/ad_objects/application.rb +2 -10
  29. data/lib/facebook_ads/ad_objects/business.rb +15 -12
  30. data/lib/facebook_ads/ad_objects/business_asset_group.rb +1 -1
  31. data/lib/facebook_ads/ad_objects/business_role_request.rb +4 -4
  32. data/lib/facebook_ads/ad_objects/business_unit.rb +0 -1
  33. data/lib/facebook_ads/ad_objects/business_user.rb +4 -4
  34. data/lib/facebook_ads/ad_objects/campaign.rb +11 -1
  35. data/lib/facebook_ads/ad_objects/{friend_list.rb → catalog_item_channels_to_integrity_status.rb} +5 -5
  36. data/lib/facebook_ads/ad_objects/commerce_merchant_settings.rb +2 -24
  37. data/lib/facebook_ads/ad_objects/commerce_merchant_settings_setup_status.rb +1 -0
  38. data/lib/facebook_ads/ad_objects/custom_audience.rb +8 -0
  39. data/lib/facebook_ads/ad_objects/extended_credit.rb +0 -1
  40. data/lib/facebook_ads/ad_objects/group.rb +26 -10
  41. data/lib/facebook_ads/ad_objects/hotel_room.rb +1 -0
  42. data/lib/facebook_ads/ad_objects/ig_media.rb +0 -1
  43. data/lib/facebook_ads/ad_objects/ig_user.rb +0 -1
  44. data/lib/facebook_ads/ad_objects/link.rb +0 -4
  45. data/lib/facebook_ads/ad_objects/live_video.rb +12 -12
  46. data/lib/facebook_ads/ad_objects/messenger_profile.rb +1 -0
  47. data/lib/facebook_ads/ad_objects/page.rb +23 -15
  48. data/lib/facebook_ads/ad_objects/page_post.rb +0 -10
  49. data/lib/facebook_ads/ad_objects/{event_tour.rb → payment_engine_payment.rb} +35 -18
  50. data/lib/facebook_ads/ad_objects/payment_subscription.rb +3 -3
  51. data/lib/facebook_ads/ad_objects/photo.rb +0 -10
  52. data/lib/facebook_ads/ad_objects/playable_content.rb +1 -0
  53. data/lib/facebook_ads/ad_objects/post.rb +46 -29
  54. data/lib/facebook_ads/ad_objects/product_catalog.rb +3 -7
  55. data/lib/facebook_ads/ad_objects/product_feed.rb +1 -0
  56. data/lib/facebook_ads/ad_objects/product_feed_schedule.rb +2 -0
  57. data/lib/facebook_ads/ad_objects/product_group.rb +8 -0
  58. data/lib/facebook_ads/ad_objects/product_item.rb +15 -0
  59. data/lib/facebook_ads/ad_objects/referral.rb +2 -0
  60. data/lib/facebook_ads/ad_objects/server_side/action_source.rb +48 -0
  61. data/lib/facebook_ads/ad_objects/server_side/batch_processor.rb +73 -0
  62. data/lib/facebook_ads/ad_objects/server_side/content.rb +23 -4
  63. data/lib/facebook_ads/ad_objects/server_side/event.rb +32 -6
  64. data/lib/facebook_ads/ad_objects/server_side/event_request.rb +60 -13
  65. data/lib/facebook_ads/ad_objects/server_side/event_request_async.rb +12 -0
  66. data/lib/facebook_ads/ad_objects/{user_payment_modules_options.rb → server_side/http_method.rb} +7 -19
  67. data/lib/facebook_ads/ad_objects/server_side/http_service_interface.rb +33 -0
  68. data/lib/facebook_ads/ad_objects/server_side/http_util.rb +31 -0
  69. data/lib/facebook_ads/ad_objects/server_side/util.rb +13 -0
  70. data/lib/facebook_ads/ad_objects/system_user.rb +0 -20
  71. data/lib/facebook_ads/ad_objects/targeting.rb +0 -2
  72. data/lib/facebook_ads/ad_objects/third_party_measurement_report_dataset.rb +0 -1
  73. data/lib/facebook_ads/ad_objects/unified_thread.rb +0 -1
  74. data/lib/facebook_ads/ad_objects/user.rb +31 -26
  75. data/lib/facebook_ads/ad_objects/vehicle.rb +1 -0
  76. data/lib/facebook_ads/ad_objects/whats_app_business_account.rb +3 -0
  77. data/lib/facebook_ads/ad_objects/{offline_terms_of_service.rb → whats_app_business_profile.rb} +2 -4
  78. data/lib/facebook_ads/session.rb +1 -1
  79. data/lib/facebook_ads/version.rb +2 -2
  80. metadata +13 -10
  81. data/lib/facebook_ads/ad_objects/ad_account_creation_request.rb +0 -71
  82. data/lib/facebook_ads/ad_objects/user_payment_methods_info.rb +0 -43
@@ -25,31 +25,48 @@ 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 EventTour < AdObject
28
+ class PaymentEnginePayment < AdObject
29
+ REASON = [
30
+ "BANNED_USER",
31
+ "DENIED_REFUND",
32
+ "GRANTED_REPLACEMENT_ITEM",
33
+ ]
29
34
 
30
- field :description, 'string'
31
- field :dominant_color, 'string'
32
- field :end_time, 'string'
35
+
36
+ field :actions, { list: 'object' }
37
+ field :application, 'Application'
38
+ field :country, 'string'
39
+ field :created_time, 'datetime'
40
+ field :disputes, { list: 'object' }
41
+ field :fraud_status, 'string'
42
+ field :fulfillment_status, 'string'
33
43
  field :id, 'string'
34
- field :is_past, 'bool'
35
- field :last_event_timestamp, 'int'
36
- field :name, 'string'
37
- field :num_events, 'int'
38
- field :photo, 'Photo'
39
- field :publishing_state, 'string'
40
- field :scheduled_publish_timestamp, 'int'
41
- field :start_time, 'string'
42
- field :ticketing_uri, 'string'
43
- field :video, 'AdVideo'
44
+ field :is_from_ad, 'bool'
45
+ field :is_from_page_post, 'bool'
46
+ field :items, { list: 'object' }
47
+ field :payout_foreign_exchange_rate, 'double'
48
+ field :phone_support_eligible, 'bool'
49
+ field :refundable_amount, 'CurrencyAmount'
50
+ field :request_id, 'string'
51
+ field :tax, 'string'
52
+ field :tax_country, 'string'
53
+ field :test, 'int'
54
+ field :user, 'User'
44
55
  has_no_post
45
56
  has_no_delete
46
57
 
47
- has_edge :events do |edge|
48
- edge.get 'Event'
58
+ has_edge :dispute do |edge|
59
+ edge.post 'PaymentEnginePayment' do |api|
60
+ api.has_param :reason, { enum: -> { PaymentEnginePayment::REASON }}
61
+ end
49
62
  end
50
63
 
51
- has_edge :pages do |edge|
52
- edge.get 'Page'
64
+ has_edge :refunds do |edge|
65
+ edge.post 'PaymentEnginePayment' do |api|
66
+ api.has_param :amount, 'double'
67
+ api.has_param :currency, 'string'
68
+ api.has_param :reason, { enum: -> { PaymentEnginePayment::REASON }}
69
+ end
53
70
  end
54
71
 
55
72
  end
@@ -29,13 +29,13 @@ module FacebookAds
29
29
 
30
30
  field :amount, 'string'
31
31
  field :app_param_data, 'string'
32
- field :application, 'Profile'
32
+ field :application, 'Application'
33
33
  field :billing_period, 'string'
34
34
  field :canceled_reason, 'string'
35
35
  field :created_time, 'datetime'
36
36
  field :currency, 'string'
37
37
  field :id, 'string'
38
- field :last_payment, 'string'
38
+ field :last_payment, 'PaymentEnginePayment'
39
39
  field :next_bill_time, 'datetime'
40
40
  field :next_period_amount, 'string'
41
41
  field :next_period_currency, 'string'
@@ -50,7 +50,7 @@ module FacebookAds
50
50
  field :trial_currency, 'string'
51
51
  field :trial_expiry_time, 'datetime'
52
52
  field :updated_time, 'datetime'
53
- field :user, 'Profile'
53
+ field :user, 'User'
54
54
  has_no_post
55
55
  has_no_delete
56
56
 
@@ -125,16 +125,6 @@ module FacebookAds
125
125
  end
126
126
  end
127
127
 
128
- has_edge :reactions do |edge|
129
- edge.get 'Profile' do |api|
130
- api.has_param :type, { enum: -> { Profile::TYPE }}
131
- end
132
- end
133
-
134
- has_edge :sharedposts do |edge|
135
- edge.get 'Post'
136
- end
137
-
138
128
  has_edge :sponsor_tags do |edge|
139
129
  edge.get 'Page'
140
130
  end
@@ -31,6 +31,7 @@ module FacebookAds
31
31
  field :name, 'string'
32
32
  field :owner, 'Profile'
33
33
  field :app_id, 'string'
34
+ field :session_id, 'string'
34
35
  field :source, 'file'
35
36
  field :source_url, 'string'
36
37
  field :source_zip, 'file'
@@ -35,6 +35,51 @@ module FacebookAds
35
35
  "year",
36
36
  ]
37
37
 
38
+ CHECKIN_ENTRY_POINT = [
39
+ "BRANDING_CHECKIN",
40
+ "BRANDING_OTHER",
41
+ "BRANDING_PHOTO",
42
+ "BRANDING_STATUS",
43
+ ]
44
+
45
+ FORMATTING = [
46
+ "MARKDOWN",
47
+ "PLAINTEXT",
48
+ ]
49
+
50
+ PLACE_ATTACHMENT_SETTING = [
51
+ "1",
52
+ "2",
53
+ ]
54
+
55
+ POST_SURFACES_BLACKLIST = [
56
+ "1",
57
+ "2",
58
+ "3",
59
+ "4",
60
+ "5",
61
+ ]
62
+
63
+ POSTING_TO_REDSPACE = [
64
+ "disabled",
65
+ "enabled",
66
+ ]
67
+
68
+ TARGET_SURFACE = [
69
+ "STORY",
70
+ "TIMELINE",
71
+ ]
72
+
73
+ UNPUBLISHED_CONTENT_TYPE = [
74
+ "ADS_POST",
75
+ "DRAFT",
76
+ "INLINE_CREATED",
77
+ "PUBLISHED",
78
+ "REVIEWABLE_BRANDED_CONTENT",
79
+ "SCHEDULED",
80
+ "SCHEDULED_RECURRING",
81
+ ]
82
+
38
83
  FEED_STORY_VISIBILITY = [
39
84
  "hidden",
40
85
  "visible",
@@ -59,22 +104,17 @@ module FacebookAds
59
104
  field :comments_mirroring_domain, 'string'
60
105
  field :coordinates, 'object'
61
106
  field :created_time, 'datetime'
62
- field :delivery_growth_optimizations, { list: 'string' }
63
107
  field :description, 'string'
64
- field :entities, 'object'
65
108
  field :event, 'Event'
66
109
  field :expanded_height, 'int'
67
110
  field :expanded_width, 'int'
68
111
  field :feed_targeting, 'object'
69
- field :formatting, 'string'
70
112
  field :from, 'object'
71
113
  field :full_picture, 'string'
72
114
  field :height, 'int'
73
115
  field :icon, 'string'
74
116
  field :id, 'string'
75
- field :implicit_place, 'Place'
76
117
  field :instagram_eligibility, 'string'
77
- field :instream_eligibility, 'string'
78
118
  field :is_app_share, 'bool'
79
119
  field :is_eligible_for_promotion, 'bool'
80
120
  field :is_expired, 'bool'
@@ -84,8 +124,7 @@ module FacebookAds
84
124
  field :is_popular, 'bool'
85
125
  field :is_published, 'bool'
86
126
  field :is_spherical, 'bool'
87
- field :link, 'string'
88
- field :live_video_eligibility, { list: 'string' }
127
+ field :link, 'object'
89
128
  field :message, 'string'
90
129
  field :message_tags, { list: 'string' }
91
130
  field :multi_share_end_card, 'bool'
@@ -96,12 +135,10 @@ module FacebookAds
96
135
  field :permalink_url, 'object'
97
136
  field :picture, 'string'
98
137
  field :place, 'Place'
99
- field :poll, 'object'
100
138
  field :privacy, 'Privacy'
101
139
  field :promotable_id, 'string'
102
140
  field :promotion_status, 'string'
103
141
  field :properties, { list: 'string' }
104
- field :publishing_stats, 'int'
105
142
  field :scheduled_publish_time, 'double'
106
143
  field :shares, 'object'
107
144
  field :source, 'string'
@@ -112,13 +149,11 @@ module FacebookAds
112
149
  field :target, 'Profile'
113
150
  field :targeting, 'object'
114
151
  field :timeline_visibility, 'string'
115
- field :translations, 'hash'
116
152
  field :type, 'string'
117
153
  field :updated_time, 'datetime'
118
154
  field :via, 'object'
119
155
  field :video_buying_eligibility, { list: 'string' }
120
156
  field :width, 'int'
121
- field :will_be_autocropped_when_deliver_to_instagram, 'bool'
122
157
 
123
158
  has_edge :attachments do |edge|
124
159
  edge.get
@@ -172,24 +207,6 @@ module FacebookAds
172
207
  end
173
208
  end
174
209
 
175
- has_edge :promotions do |edge|
176
- edge.post do |api|
177
- api.has_param :ad_account_id, 'string'
178
- api.has_param :ad_conversion_pixel_id, 'int'
179
- api.has_param :audience, { enum: %w{AUTO_LOOKALIKE AUTO_PAGE_LOOKALIKE AUTO_TARGETING COUNTRY_AND_INTEREST CREATE_NEW CUSTOM_AUDIENCE DISTRICT EVENT_CUSTOM_AUDIENCES EVENT_ENGAGEMENT FANS GROUPER HEC_AUDIENCE IG_PROMOTED_POST_AUTO LOCAL LOOKALIKE MARKETPLACE_DEFAULT MARKETPLACE_NATIONWIDE_AUDIENCE MARKETPLACE_SAVED_AUDIENCE MULT_CUSTOM_AUDIENCES NCPP SAVED_AUDIENCE SMART_AUDIENCE }}
180
- api.has_param :audience_id, 'string'
181
- api.has_param :bid_amount, 'int'
182
- api.has_param :budget, 'int'
183
- api.has_param :cta_type, { enum: %w{ADD_TO_CART APPLY_NOW BOOK_TRAVEL BUY BUY_NOW BUY_TICKETS CALL CALL_ME CONTACT CONTACT_US DONATE DONATE_NOW DOWNLOAD EVENT_RSVP FIND_A_GROUP FIND_YOUR_GROUPS FOLLOW_NEWS_STORYLINE FOLLOW_PAGE FOLLOW_USER GET_DIRECTIONS GET_OFFER GET_OFFER_VIEW GET_QUOTE GET_SHOWTIMES INSTALL_APP INSTALL_MOBILE_APP LEARN_MORE LIKE_PAGE LISTEN_MUSIC LISTEN_NOW MESSAGE_PAGE MOBILE_DOWNLOAD MOMENTS NO_BUTTON OPEN_LINK ORDER_NOW PAY_TO_ACCESS PLAY_GAME PURCHASE_GIFT_CARDS RECORD_NOW REQUEST_TIME SAY_THANKS SEE_MORE SELL_NOW SEND_A_GIFT SHARE SHOP_NOW SIGN_UP SOTTO_SUBSCRIBE SUBSCRIBE UPDATE_APP USE_APP USE_MOBILE_APP VIDEO_ANNOTATION VISIT_PAGES_FEED WATCH_MORE WATCH_VIDEO WHATSAPP_MESSAGE WOODHENGE_SUPPORT }}
184
- api.has_param :currency, 'string'
185
- api.has_param :flow_id, 'string'
186
- api.has_param :placement, 'string'
187
- api.has_param :start_time, 'int'
188
- api.has_param :stop_time, 'int'
189
- api.has_param :targeting, 'Targeting'
190
- end
191
- end
192
-
193
210
  has_edge :reactions do |edge|
194
211
  edge.get 'Profile' do |api|
195
212
  api.has_param :type, { enum: -> { Profile::TYPE }}
@@ -35,6 +35,7 @@ module FacebookAds
35
35
  "home_listings",
36
36
  "hotels",
37
37
  "jobs",
38
+ "local_delivery_shipping_profiles",
38
39
  "local_service_businesses",
39
40
  "offer_items",
40
41
  "offline_commerce",
@@ -110,7 +111,6 @@ module FacebookAds
110
111
  field :catalog_segment_product_set_id, 'string'
111
112
  field :destination_catalog_settings, 'hash'
112
113
  field :flight_catalog_settings, 'hash'
113
- field :onsite_commerce_merchant, 'object'
114
114
  field :parent_catalog_id, 'string'
115
115
 
116
116
  has_edge :agencies do |edge|
@@ -274,12 +274,6 @@ module FacebookAds
274
274
  end
275
275
  end
276
276
 
277
- has_edge :onsite_commerce_merchant do |edge|
278
- edge.post 'ProductCatalog' do |api|
279
- api.has_param :onsite_commerce_merchant, 'object'
280
- end
281
- end
282
-
283
277
  has_edge :pricing_variables_batch do |edge|
284
278
  edge.get 'ProductCatalogPricingVariablesBatch' do |api|
285
279
  api.has_param :handle, 'string'
@@ -305,6 +299,7 @@ module FacebookAds
305
299
  api.has_param :feed_type, { enum: -> { ProductFeed::FEED_TYPE }}
306
300
  api.has_param :file_name, 'string'
307
301
  api.has_param :item_sub_type, { enum: -> { ProductFeed::ITEM_SUB_TYPE }}
302
+ api.has_param :migrated_from_feed_id, 'string'
308
303
  api.has_param :name, 'string'
309
304
  api.has_param :override_type, { enum: -> { ProductFeed::OVERRIDE_TYPE }}
310
305
  api.has_param :override_value, 'string'
@@ -354,6 +349,7 @@ module FacebookAds
354
349
  edge.post 'ProductItem' do |api|
355
350
  api.has_param :additional_image_files, { list: 'file' }
356
351
  api.has_param :additional_image_urls, { list: 'string' }
352
+ api.has_param :additional_uploaded_image_ids, { list: 'string' }
357
353
  api.has_param :additional_variant_attributes, 'hash'
358
354
  api.has_param :android_app_name, 'string'
359
355
  api.has_param :android_class, 'string'
@@ -116,6 +116,7 @@ module FacebookAds
116
116
  field :id, 'string'
117
117
  field :item_sub_type, 'string'
118
118
  field :latest_upload, 'ProductFeedUpload'
119
+ field :migrated_from_feed_id, 'string'
119
120
  field :name, 'string'
120
121
  field :override_type, 'string'
121
122
  field :product_count, 'int'
@@ -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
@@ -32,6 +32,14 @@ module FacebookAds
32
32
  field :retailer_id, 'string'
33
33
  field :variants, { list: 'ProductVariant' }
34
34
 
35
+ has_edge :ar_data do |edge|
36
+ edge.post do |api|
37
+ api.has_param :effect_icon, 'file'
38
+ api.has_param :state, { enum: %w{DISABLED ENABLED TEST }}
39
+ api.has_param :surfaces, { list: { enum: %w{SHOPS TEST_CAPABILITY UNIVERSAL_CHECKOUT US_MARKETPLACE }} }
40
+ end
41
+ end
42
+
35
43
  has_edge :products do |edge|
36
44
  edge.get 'ProductItem'
37
45
  edge.post 'ProductItem' do |api|
@@ -316,12 +316,14 @@ module FacebookAds
316
316
  field :id, 'string'
317
317
  field :image_cdn_urls, 'hash'
318
318
  field :image_url, 'string'
319
+ field :images, { list: 'string' }
319
320
  field :inventory, 'int'
320
321
  field :manufacturer_part_number, 'string'
321
322
  field :material, 'string'
322
323
  field :mobile_link, 'string'
323
324
  field :name, 'string'
324
325
  field :ordering_index, 'int'
326
+ field :parent_product_id, 'string'
325
327
  field :pattern, 'string'
326
328
  field :price, 'string'
327
329
  field :product_catalog, 'ProductCatalog'
@@ -343,6 +345,7 @@ module FacebookAds
343
345
  field :url, 'string'
344
346
  field :visibility, { enum: -> { VISIBILITY }}
345
347
  field :additional_image_files, { list: 'file' }
348
+ field :additional_uploaded_image_ids, { list: 'string' }
346
349
  field :android_app_name, 'string'
347
350
  field :android_class, 'string'
348
351
  field :android_package, 'string'
@@ -367,6 +370,18 @@ module FacebookAds
367
370
  field :windows_phone_app_name, 'string'
368
371
  field :windows_phone_url, 'string'
369
372
 
373
+ has_edge :ar_data do |edge|
374
+ edge.post do |api|
375
+ api.has_param :container_effect, { enum: %w{MAKEUP }}
376
+ api.has_param :effect_parameters, 'hash'
377
+ api.has_param :picker_icon, 'file'
378
+ end
379
+ end
380
+
381
+ has_edge :channels_to_integrity_status do |edge|
382
+ edge.get 'CatalogItemChannelsToIntegrityStatus'
383
+ end
384
+
370
385
  has_edge :product_sets do |edge|
371
386
  edge.get 'ProductSet'
372
387
  end
@@ -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
@@ -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