facebookbusiness 0.7.0.1 → 0.8.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. checksums.yaml +4 -4
  2. data/lib/facebook_ads/ad_objects/ad_account.rb +16 -19
  3. data/lib/facebook_ads/ad_objects/ad_account_ad_volume.rb +23 -0
  4. data/lib/facebook_ads/ad_objects/ad_account_delivery_estimate.rb +1 -0
  5. data/lib/facebook_ads/ad_objects/ad_account_matched_search_applications_edge_data.rb +1 -0
  6. data/lib/facebook_ads/ad_objects/ad_account_targeting_unified.rb +1 -0
  7. data/lib/facebook_ads/ad_objects/ad_activity.rb +7 -0
  8. data/lib/facebook_ads/ad_objects/ad_asset_feed_spec.rb +2 -0
  9. data/lib/facebook_ads/ad_objects/ad_campaign_activity.rb +2 -2
  10. data/lib/facebook_ads/ad_objects/ad_campaign_delivery_estimate.rb +1 -0
  11. data/lib/facebook_ads/ad_objects/ad_creative.rb +1 -0
  12. data/lib/facebook_ads/ad_objects/{atlas_url.rb → ad_creative_instagram_branded_content.rb} +1 -2
  13. data/lib/facebook_ads/ad_objects/ad_creative_interactive_components_spec.rb +1 -0
  14. data/lib/facebook_ads/ad_objects/ad_creative_link_data_call_to_action.rb +1 -0
  15. data/lib/facebook_ads/ad_objects/ad_network_analytics_sync_query_result.rb +1 -0
  16. data/lib/facebook_ads/ad_objects/ad_place_page_set.rb +6 -0
  17. data/lib/facebook_ads/ad_objects/ad_preview.rb +0 -1
  18. data/lib/facebook_ads/ad_objects/ad_report_spec.rb +0 -1
  19. data/lib/facebook_ads/ad_objects/ad_set.rb +2 -0
  20. data/lib/facebook_ads/ad_objects/ad_study.rb +2 -0
  21. data/lib/facebook_ads/ad_objects/ad_video.rb +12 -27
  22. data/lib/facebook_ads/ad_objects/adgroup_placement_specific_review_feedback.rb +4 -0
  23. data/lib/facebook_ads/ad_objects/{ads_interest.rb → adoptable_pet.rb} +19 -5
  24. data/lib/facebook_ads/ad_objects/ads_insights.rb +4 -0
  25. data/lib/facebook_ads/ad_objects/ads_pixel.rb +3 -0
  26. data/lib/facebook_ads/ad_objects/application.rb +26 -0
  27. data/lib/facebook_ads/ad_objects/atlas_campaign.rb +3 -3
  28. data/lib/facebook_ads/ad_objects/automotive_model.rb +1 -0
  29. data/lib/facebook_ads/ad_objects/business.rb +46 -117
  30. data/lib/facebook_ads/ad_objects/business_asset_group.rb +2 -3
  31. data/lib/facebook_ads/ad_objects/business_role_request.rb +9 -0
  32. data/lib/facebook_ads/ad_objects/business_unit.rb +1 -1
  33. data/lib/facebook_ads/ad_objects/business_user.rb +9 -0
  34. data/lib/facebook_ads/ad_objects/campaign.rb +257 -0
  35. data/lib/facebook_ads/ad_objects/catalog_sub_vertical_list.rb +88 -0
  36. data/lib/facebook_ads/ad_objects/commerce_merchant_settings.rb +27 -0
  37. data/lib/facebook_ads/ad_objects/commerce_order.rb +6 -0
  38. data/lib/facebook_ads/ad_objects/commerce_order_transaction_detail.rb +4 -0
  39. data/lib/facebook_ads/ad_objects/{creative_asset_tag.rb → connections_targeting.rb} +2 -2
  40. data/lib/facebook_ads/ad_objects/{business_creative_folder_sharing_agreement.rb → cpas_advertiser_partnership_recommendation.rb} +8 -11
  41. data/lib/facebook_ads/ad_objects/{brand_audience.rb → cpas_collaboration_request.rb} +15 -9
  42. data/lib/facebook_ads/ad_objects/custom_audience_data_source.rb +1 -0
  43. data/lib/facebook_ads/ad_objects/da_check.rb +7 -0
  44. data/lib/facebook_ads/ad_objects/destination.rb +1 -0
  45. data/lib/facebook_ads/ad_objects/event.rb +12 -1
  46. data/lib/facebook_ads/ad_objects/extended_credit.rb +7 -0
  47. data/lib/facebook_ads/ad_objects/external_event_source.rb +1 -0
  48. data/lib/facebook_ads/ad_objects/flight.rb +1 -0
  49. data/lib/facebook_ads/ad_objects/group.rb +10 -1
  50. data/lib/facebook_ads/ad_objects/home_listing.rb +1 -0
  51. data/lib/facebook_ads/ad_objects/hotel.rb +1 -0
  52. data/lib/facebook_ads/ad_objects/ig_media.rb +1 -0
  53. data/lib/facebook_ads/ad_objects/life_event.rb +0 -4
  54. data/lib/facebook_ads/ad_objects/link.rb +0 -6
  55. data/lib/facebook_ads/ad_objects/live_video.rb +12 -16
  56. data/lib/facebook_ads/ad_objects/media_fingerprint.rb +0 -1
  57. data/lib/facebook_ads/ad_objects/native_offer_view.rb +0 -1
  58. data/lib/facebook_ads/ad_objects/oracle_transaction.rb +0 -7
  59. data/lib/facebook_ads/ad_objects/page.rb +34 -65
  60. data/lib/facebook_ads/ad_objects/page_admin_note.rb +1 -0
  61. data/lib/facebook_ads/ad_objects/page_call_to_action.rb +3 -0
  62. data/lib/facebook_ads/ad_objects/page_change_proposal.rb +2 -0
  63. data/lib/facebook_ads/ad_objects/page_post.rb +2 -0
  64. data/lib/facebook_ads/ad_objects/{business_creative.rb → payment_subscription.rb} +24 -16
  65. data/lib/facebook_ads/ad_objects/photo.rb +6 -0
  66. data/lib/facebook_ads/ad_objects/post.rb +4 -2
  67. data/lib/facebook_ads/ad_objects/product_catalog.rb +42 -0
  68. data/lib/facebook_ads/ad_objects/product_feed.rb +31 -0
  69. data/lib/facebook_ads/ad_objects/product_group.rb +1 -0
  70. data/lib/facebook_ads/ad_objects/product_item.rb +2 -0
  71. data/lib/facebook_ads/ad_objects/product_set.rb +4 -0
  72. data/lib/facebook_ads/ad_objects/{client_transparency_status.rb → product_set_metadata.rb} +5 -5
  73. data/lib/facebook_ads/ad_objects/profile.rb +1 -0
  74. data/lib/facebook_ads/ad_objects/profile_picture_source.rb +4 -0
  75. data/lib/facebook_ads/ad_objects/publisher_block_list.rb +6 -0
  76. data/lib/facebook_ads/ad_objects/saved_audience.rb +1 -0
  77. data/lib/facebook_ads/ad_objects/security_settings.rb +0 -1
  78. data/lib/facebook_ads/ad_objects/server_side/batch_processor.rb +73 -0
  79. data/lib/facebook_ads/ad_objects/server_side/content.rb +75 -13
  80. data/lib/facebook_ads/ad_objects/server_side/custom_data.rb +45 -6
  81. data/lib/facebook_ads/ad_objects/server_side/delivery_category.rb +33 -0
  82. data/lib/facebook_ads/ad_objects/server_side/event.rb +62 -3
  83. data/lib/facebook_ads/ad_objects/server_side/event_request.rb +134 -13
  84. data/lib/facebook_ads/ad_objects/server_side/event_request_async.rb +43 -0
  85. data/lib/facebook_ads/ad_objects/{whats_app_business_profile.rb → server_side/http_method.rb} +7 -15
  86. data/lib/facebook_ads/ad_objects/server_side/http_service_interface.rb +33 -0
  87. data/lib/facebook_ads/ad_objects/server_side/http_util.rb +31 -0
  88. data/lib/facebook_ads/ad_objects/server_side/user_data.rb +145 -17
  89. data/lib/facebook_ads/ad_objects/server_side/util.rb +216 -149
  90. data/lib/facebook_ads/ad_objects/system_user.rb +9 -4
  91. data/lib/facebook_ads/ad_objects/targeting.rb +4 -3
  92. data/lib/facebook_ads/ad_objects/{user_influence.rb → targeting_relaxation.rb} +2 -4
  93. data/lib/facebook_ads/ad_objects/third_party_measurement_report_dataset.rb +1 -0
  94. data/lib/facebook_ads/ad_objects/unified_thread.rb +1 -0
  95. data/lib/facebook_ads/ad_objects/user.rb +9 -15
  96. data/lib/facebook_ads/ad_objects/vehicle.rb +1 -0
  97. data/lib/facebook_ads/ad_objects/vehicle_offer.rb +1 -0
  98. data/lib/facebook_ads/ad_objects/whats_app_business_account.rb +22 -0
  99. data/lib/facebook_ads/errors.rb +1 -1
  100. data/lib/facebook_ads/version.rb +2 -2
  101. metadata +64 -25
  102. data/lib/facebook_ads/ad_objects/business_creative_folder.rb +0 -79
  103. data/lib/facebook_ads/ad_objects/business_image.rb +0 -95
  104. data/lib/facebook_ads/ad_objects/iterative_split_test_config.rb +0 -43
  105. data/lib/facebook_ads/ad_objects/messenger_platform_referral.rb +0 -39
  106. data/lib/facebook_ads/ad_objects/page_about_story.rb +0 -39
  107. data/lib/facebook_ads/ad_objects/split_test_config.rb +0 -41
  108. data/lib/facebook_ads/ad_objects/streaming_reaction.rb +0 -51
  109. data/lib/facebook_ads/ad_objects/user_taggable_friend.rb +0 -49
@@ -22,20 +22,23 @@ module FacebookAds
22
22
  # Content object contains information about the products.
23
23
  class Content
24
24
 
25
- # Product Id
26
- attr_accessor :product_id
27
-
28
- # number of product
29
- attr_accessor :quantity
30
-
31
- # Item Price.
32
- attr_accessor :item_price
25
+ attr_accessor :product_id,
26
+ :quantity,
27
+ :item_price,
28
+ :title,
29
+ :description,
30
+ :brand,
31
+ :category
33
32
 
34
33
  # Initializes the object
35
34
  # @param [String] product_id
36
35
  # @param [Integer] quantity
37
36
  # @param [Float] item_price
38
- def initialize(product_id: nil, quantity: nil, item_price: nil)
37
+ # @param [String] title
38
+ # @param [String] description
39
+ # @param [String] brand
40
+ # @param [String] category
41
+ def initialize(product_id: nil, quantity: nil, item_price: nil, title: nil, description: nil, brand: nil, category: nil)
39
42
  unless product_id.nil?
40
43
  self.product_id = String(product_id)
41
44
  end
@@ -45,6 +48,18 @@ module FacebookAds
45
48
  unless item_price.nil?
46
49
  self.item_price = Float(item_price)
47
50
  end
51
+ unless title.nil?
52
+ self.title = String(title)
53
+ end
54
+ unless description.nil?
55
+ self.description = String(description)
56
+ end
57
+ unless brand.nil?
58
+ self.brand = String(brand)
59
+ end
60
+ unless category.nil?
61
+ self.category = String(category)
62
+ end
48
63
  end
49
64
 
50
65
  # build the object using the input hash
@@ -66,15 +81,34 @@ module FacebookAds
66
81
  if attributes.has_key?(:'item_price')
67
82
  self.item_price = attributes[:'item_price']
68
83
  end
84
+
85
+ if attributes.has_key?(:'title')
86
+ self.title = attributes[:'title']
87
+ end
88
+
89
+ if attributes.has_key?(:'description')
90
+ self.description = attributes[:'description']
91
+ end
92
+
93
+ if attributes.has_key?(:'brand')
94
+ self.brand = attributes[:'brand']
95
+ end
96
+
97
+ if attributes.has_key?(:'category')
98
+ self.category = attributes[:'category']
99
+ end
69
100
  end
70
101
 
71
102
  # Checks equality by comparing each attribute.
72
103
  def ==(o)
73
- return true if self.equal?(o)
74
- self.class == o.class &&
104
+ return self.class == o.class &&
75
105
  product_id == o.product_id &&
76
106
  quantity == o.quantity &&
77
- item_price == o.item_price
107
+ item_price == o.item_price &&
108
+ title == o.title &&
109
+ description == o.description &&
110
+ brand == o.brand &&
111
+ category == o.category
78
112
  end
79
113
 
80
114
  # @see the `==` method
@@ -88,7 +122,11 @@ module FacebookAds
88
122
  [
89
123
  product_id,
90
124
  quantity,
91
- item_price
125
+ item_price,
126
+ title,
127
+ description,
128
+ brand,
129
+ category
92
130
  ].hash
93
131
  end
94
132
 
@@ -106,6 +144,18 @@ module FacebookAds
106
144
  unless item_price.nil?
107
145
  hash['item_price'] = item_price
108
146
  end
147
+ unless title.nil?
148
+ hash['title'] = title
149
+ end
150
+ unless description.nil?
151
+ hash['description'] = description
152
+ end
153
+ unless brand.nil?
154
+ hash['brand'] = brand
155
+ end
156
+ unless category.nil?
157
+ hash['category'] = category
158
+ end
109
159
  hash.to_s
110
160
  end
111
161
 
@@ -121,6 +171,18 @@ module FacebookAds
121
171
  unless item_price.nil?
122
172
  hash['item_price'] = item_price
123
173
  end
174
+ unless title.nil?
175
+ hash['title'] = title
176
+ end
177
+ unless description.nil?
178
+ hash['description'] = description
179
+ end
180
+ unless brand.nil?
181
+ hash['brand'] = brand
182
+ end
183
+ unless category.nil?
184
+ hash['category'] = category
185
+ end
124
186
  hash
125
187
  end
126
188
  end
@@ -69,7 +69,15 @@ module FacebookAds
69
69
  # Use only with Search events. A search query made by a user.
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
+
77
+ # The item number.
78
+ # Example: 'item1234'.
79
+ attr_accessor :item_number
80
+
73
81
  # Custom Properties bag for storing other custom fields
74
82
  attr_accessor :custom_properties
75
83
 
@@ -86,6 +94,8 @@ module FacebookAds
86
94
  # @param [Integer] num_items
87
95
  # @param [String] status
88
96
  # @param [String] search_string
97
+ # @param [String] delivery_category
98
+ # @param [String] item_number
89
99
  # @param [String] custom_properties
90
100
  def initialize(value: nil,
91
101
  currency: nil,
@@ -99,6 +109,8 @@ module FacebookAds
99
109
  num_items: nil,
100
110
  status: nil,
101
111
  search_string: nil,
112
+ delivery_category: nil,
113
+ item_number: nil,
102
114
  custom_properties: {})
103
115
 
104
116
  unless value.nil?
@@ -137,6 +149,12 @@ module FacebookAds
137
149
  unless search_string.nil?
138
150
  self.search_string = search_string
139
151
  end
152
+ unless delivery_category.nil?
153
+ self.delivery_category = delivery_category
154
+ end
155
+ unless item_number.nil?
156
+ self.item_number = item_number
157
+ end
140
158
  unless custom_properties.nil?
141
159
  self.custom_properties = custom_properties
142
160
  end
@@ -203,6 +221,14 @@ module FacebookAds
203
221
  self.search_string = attributes[:'search_string']
204
222
  end
205
223
 
224
+ if attributes.has_key?(:'delivery_category')
225
+ self.delivery_category = attributes[:'delivery_category']
226
+ end
227
+
228
+ if attributes.has_key?(:'item_number')
229
+ self.item_number = attributes[:'item_number']
230
+ end
231
+
206
232
  if attributes.has_key?(:'custom_properties')
207
233
  self.custom_properties = attributes[:'custom_properties']
208
234
  end
@@ -224,6 +250,8 @@ module FacebookAds
224
250
  num_items == o.num_items &&
225
251
  status == o.status &&
226
252
  search_string == o.search_string &&
253
+ delivery_category == o.delivery_category &&
254
+ item_number == o.item_number &&
227
255
  custom_properties == o.custom_properties
228
256
  end
229
257
 
@@ -248,6 +276,8 @@ module FacebookAds
248
276
  num_items,
249
277
  status,
250
278
  search_string,
279
+ delivery_category,
280
+ item_number,
251
281
  custom_properties
252
282
  ].hash
253
283
  end
@@ -292,25 +322,28 @@ module FacebookAds
292
322
  unless search_string.nil?
293
323
  hash['search_string'] = search_string
294
324
  end
325
+ unless delivery_category.nil?
326
+ hash['delivery_category'] = delivery_category
327
+ end
295
328
  unless custom_properties.nil?
296
329
  hash['custom_properties'] = custom_properties
297
- end
330
+ end
298
331
  hash.to_s
299
332
  end
300
333
 
301
334
  # Add other custom fields to custom properties.
302
335
  def add_custom_property(key, value)
303
- custom_properties[key] = value;
336
+ custom_properties[key] = value;
304
337
  end
305
338
 
306
339
  # Normalize input fields to server request format.
307
- def normalize
340
+ def normalize
308
341
  hash = {}
309
342
  unless value.nil?
310
343
  hash['value'] = value
311
344
  end
312
345
  unless currency.nil?
313
- hash['currency'] = FacebookAds::ServerSide::normalize(currency, 'currency')
346
+ hash['currency'] = FacebookAds::ServerSide::Util.normalize(currency, 'currency')
314
347
  end
315
348
  unless content_name.nil?
316
349
  hash['content_name'] = content_name
@@ -339,6 +372,12 @@ module FacebookAds
339
372
  unless search_string.nil?
340
373
  hash['search_string'] = search_string
341
374
  end
375
+ unless delivery_category.nil?
376
+ hash['delivery_category'] = FacebookAds::ServerSide::Util.normalize(delivery_category, 'delivery_category')
377
+ end
378
+ unless item_number.nil?
379
+ hash['item_number'] = item_number
380
+ end
342
381
 
343
382
  unless contents.nil?
344
383
  content_array = []
@@ -348,7 +387,7 @@ module FacebookAds
348
387
  hash['contents'] = content_array
349
388
  end
350
389
 
351
- hash.merge!(custom_properties) unless custom_properties.nil?
390
+ hash.merge!(custom_properties) unless custom_properties.nil?
352
391
  hash
353
392
  end
354
393
  end
@@ -0,0 +1,33 @@
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
+ DeliveryCategory = Set[
22
+
23
+ # Customer needs to enter the store to get the purchased product.
24
+ 'in_store',
25
+
26
+ # Customer picks up their order by driving to a store and waiting inside their vehicle.
27
+ 'curbside',
28
+
29
+ # Purchase is delivered to the customer's home.
30
+ 'home_delivery'
31
+ ]
32
+ end
33
+ end
@@ -52,6 +52,17 @@ module FacebookAds
52
52
  # An Object that includes additional business data about the event.
53
53
  attr_accessor :custom_data
54
54
 
55
+ # Processing options you would like to enable for a specific event.
56
+ # For more details see https://developers.facebook.com/docs/marketing-apis/data-processing-options
57
+ attr_accessor :data_processing_options
58
+
59
+ # A country that you want to associate to this data processing option
60
+ # For more details see https://developers.facebook.com/docs/marketing-apis/data-processing-options
61
+ attr_accessor :data_processing_options_country
62
+
63
+ # A state that you want to associate with this data processing option.
64
+ # For more details see https://developers.facebook.com/docs/marketing-apis/data-processing-options
65
+ attr_accessor :data_processing_options_state
55
66
 
56
67
  # @param [String] event_name
57
68
  # @param [int] event_time
@@ -60,13 +71,19 @@ module FacebookAds
60
71
  # @param [String] event_id
61
72
  # @param [FacebookAds::ServerSide::UserData] user_data
62
73
  # @param [FacebookAds::ServerSide::CustomData] custom_data
74
+ # @param [Array<String>] data_processing_options
75
+ # @param [int] data_processing_options_country
76
+ # @param [int] data_processing_options_state
63
77
  def initialize(event_name: nil,
64
78
  event_time: nil,
65
79
  event_source_url: nil,
66
80
  opt_out: nil,
67
81
  event_id: nil,
68
82
  user_data: nil,
69
- custom_data: nil)
83
+ custom_data: nil,
84
+ data_processing_options: nil,
85
+ data_processing_options_country: nil,
86
+ data_processing_options_state: nil)
70
87
 
71
88
  unless event_name.nil?
72
89
  self.event_name = event_name
@@ -89,6 +106,15 @@ module FacebookAds
89
106
  unless custom_data.nil?
90
107
  self.custom_data = custom_data
91
108
  end
109
+ unless data_processing_options.nil?
110
+ self.data_processing_options = data_processing_options
111
+ end
112
+ unless data_processing_options_country.nil?
113
+ self.data_processing_options_country = data_processing_options_country
114
+ end
115
+ unless data_processing_options_state.nil?
116
+ self.data_processing_options_state = data_processing_options_state
117
+ end
92
118
  end
93
119
 
94
120
  # build the object using the input hash
@@ -126,6 +152,18 @@ module FacebookAds
126
152
  if attributes.has_key?(:'custom_data')
127
153
  self.custom_data = attributes[:'custom_data']
128
154
  end
155
+
156
+ if attributes.has_key?(:'data_processing_options')
157
+ self.custom_data = attributes[:'data_processing_options']
158
+ end
159
+
160
+ if attributes.has_key?(:'data_processing_options_country')
161
+ self.custom_data = attributes[:'data_processing_options_country']
162
+ end
163
+
164
+ if attributes.has_key?(:'data_processing_options_state')
165
+ self.custom_data = attributes[:'data_processing_options_state']
166
+ end
129
167
  end
130
168
 
131
169
  # Show invalid properties with the reasons. Usually used together with valid?
@@ -166,7 +204,10 @@ module FacebookAds
166
204
  opt_out == o.opt_out &&
167
205
  event_id == o.event_id &&
168
206
  user_data == o.user_data &&
169
- custom_data == o.custom_data
207
+ custom_data == o.custom_data &&
208
+ data_processing_options == o.data_processing_options &&
209
+ data_processing_options_country == o.data_processing_options_country &&
210
+ data_processing_options_state == o.data_processing_options_state
170
211
  end
171
212
 
172
213
  # @see the `==` method
@@ -177,7 +218,7 @@ module FacebookAds
177
218
  # Calculates hash code according to all attributes.
178
219
  # @return [Fixnum] Hash code
179
220
  def hash
180
- [event_name, event_time, event_source_url, opt_out, event_id, user_data, custom_data].hash
221
+ [event_name, event_time, event_source_url, opt_out, event_id, user_data, custom_data, data_processing_options, data_processing_options_country, data_processing_options_state].hash
181
222
  end
182
223
 
183
224
  def to_s
@@ -203,6 +244,15 @@ module FacebookAds
203
244
  unless custom_data.nil?
204
245
  hash['custom_data'] = custom_data.to_s
205
246
  end
247
+ unless data_processing_options.nil?
248
+ hash['data_processing_options'] = data_processing_options.to_s
249
+ end
250
+ unless data_processing_options_country.nil?
251
+ hash['data_processing_options_country'] = data_processing_options_country.to_s
252
+ end
253
+ unless data_processing_options_state.nil?
254
+ hash['data_processing_options_state'] = data_processing_options_state.to_s
255
+ end
206
256
  hash.to_s
207
257
  end
208
258
 
@@ -231,6 +281,15 @@ module FacebookAds
231
281
  unless custom_data.nil?
232
282
  hash['custom_data'] = custom_data.normalize
233
283
  end
284
+ unless data_processing_options.nil?
285
+ hash['data_processing_options'] = data_processing_options
286
+ end
287
+ unless data_processing_options_country.nil?
288
+ hash['data_processing_options_country'] = data_processing_options_country
289
+ end
290
+ unless data_processing_options_state.nil?
291
+ hash['data_processing_options_state'] = data_processing_options_state
292
+ end
234
293
  hash
235
294
  end
236
295
 
@@ -39,11 +39,33 @@ module FacebookAds
39
39
  # Platform from which the event is sent e.g. wordpress
40
40
  attr_accessor :partner_agent
41
41
 
42
+ # Scope used to resolve extern_id or Third-party ID. Can be another data set or data partner ID.
43
+ attr_accessor :namespace_id
44
+
45
+ # Unique id used to denote the current set being uploaded.
46
+ attr_accessor :upload_id
47
+
48
+ # Tag string added to track your Offline event uploads.
49
+ attr_accessor :upload_tag
50
+
51
+ # The origin/source of data for the dataset to be uploaded.
52
+ attr_accessor :upload_source
53
+
54
+ # The HttpServiceInterface client to use for executing the request.
55
+ attr_accessor :http_service_client
56
+
42
57
  # @param [String] pixel_id
43
58
  # @param [Array(FacebookAds::ServerSide::Event)] events
44
59
  # @param [String] test_event_code
45
60
  # @param [String] partner_agent
46
- def initialize(pixel_id: nil, events: nil, test_event_code: nil, partner_agent: nil)
61
+ # @param [String] namespace_id
62
+ # @param [String] upload_id
63
+ # @param [String] upload_tag
64
+ # @param [String] upload_source
65
+ # @param [HttpServiceInterface] http_service_client
66
+ def initialize(pixel_id: nil, events: nil, test_event_code: nil, partner_agent: nil,
67
+ namespace_id: nil, upload_id: nil, upload_tag: nil, upload_source: nil,
68
+ http_service_client: nil)
47
69
  unless pixel_id.nil?
48
70
  self.pixel_id = pixel_id
49
71
  end
@@ -56,6 +78,21 @@ module FacebookAds
56
78
  unless partner_agent.nil?
57
79
  self.partner_agent = partner_agent
58
80
  end
81
+ unless namespace_id.nil?
82
+ self.namespace_id = namespace_id
83
+ end
84
+ unless upload_id.nil?
85
+ self.upload_id = upload_id
86
+ end
87
+ unless upload_tag.nil?
88
+ self.upload_tag = upload_tag
89
+ end
90
+ unless upload_source.nil?
91
+ self.upload_source = upload_source
92
+ end
93
+ unless http_service_client.nil?
94
+ self.http_service_client = http_service_client
95
+ end
59
96
  end
60
97
 
61
98
  # build the object using the input hash
@@ -83,6 +120,26 @@ module FacebookAds
83
120
  if attributes.has_key?(:'partner_agent')
84
121
  self.partner_agent = attributes[:'partner_agent']
85
122
  end
123
+
124
+ if attributes.has_key?(:'namespace_id')
125
+ self.namespace_id = attributes[:'namespace_id']
126
+ end
127
+
128
+ if attributes.has_key?(:'upload_id')
129
+ self.upload_id = attributes[:'upload_id']
130
+ end
131
+
132
+ if attributes.has_key?(:'upload_tag')
133
+ self.upload_tag = attributes[:'upload_tag']
134
+ end
135
+
136
+ if attributes.has_key?(:'upload_source')
137
+ self.upload_source = attributes[:'upload_source']
138
+ end
139
+
140
+ if attributes.has_key?(:'http_service_client')
141
+ self.http_service_client = attributes[:'http_service_client']
142
+ end
86
143
  end
87
144
 
88
145
  # Execute request
@@ -90,15 +147,14 @@ module FacebookAds
90
147
  unless valid?
91
148
  raise list_invalid_properties
92
149
  end
93
- normalized_events = normalize
150
+
151
+ if http_service_client
152
+ return execute_with_client(http_service_client)
153
+ end
154
+ params = get_params()
155
+ params[:data] = normalize
94
156
  ads_pixel = FacebookAds::AdsPixel.get(pixel_id)
95
- response = ads_pixel.events.create(
96
- {
97
- data: normalized_events,
98
- test_event_code: test_event_code,
99
- partner_agent: partner_agent
100
- }
101
- )
157
+ response = ads_pixel.events.create(params)
102
158
  json_response_object = JSON.parse(JSON.generate(response), object_class: OpenStruct)
103
159
  FacebookAds::ServerSide::EventResponse.new(
104
160
  events_received: json_response_object.events_received,
@@ -115,6 +171,44 @@ module FacebookAds
115
171
  normalized_events
116
172
  end
117
173
 
174
+ def get_params
175
+ params = {}
176
+ params[:test_event_code] = test_event_code unless test_event_code.nil?
177
+ params[:partner_agent] = partner_agent unless partner_agent.nil?
178
+ params[:namespace_id] = namespace_id unless namespace_id.nil?
179
+ params[:upload_id] = upload_id unless upload_id.nil?
180
+ params[:upload_tag] = upload_tag unless upload_tag.nil?
181
+ params[:upload_source] = upload_source unless upload_source.nil?
182
+ params
183
+ end
184
+
185
+ def execute_with_client http_client
186
+ url = [
187
+ "https://#{FacebookAds::DEFAULT_HOST}",
188
+ FacebookAds::DEFAULT_API_VERSION,
189
+ pixel_id,
190
+ 'events',
191
+ ].join('/')
192
+ headers = {
193
+ 'User-Agent' => "fbbizsdk-ruby-v#{FacebookAds::API_VERSION}"
194
+ }
195
+ params = get_params
196
+ params[:data] = events.map(&:normalize)
197
+ appsecret = FacebookAds.config.app_secret
198
+ access_token = FacebookAds.config.access_token
199
+ params[:access_token] = access_token
200
+ if appsecret
201
+ params[:appsecret_proof] = FacebookAds::ServerSide::HttpUtil.appsecret_proof(appsecret, access_token)
202
+ end
203
+
204
+ http_client.execute(
205
+ url,
206
+ FacebookAds::ServerSide::HttpMethod::POST,
207
+ headers,
208
+ params
209
+ )
210
+ end
211
+
118
212
  # Show invalid properties with the reasons. Usually used together with valid?
119
213
  # @return Array for valid properties with the reasons
120
214
  def list_invalid_properties
@@ -137,9 +231,15 @@ module FacebookAds
137
231
  def ==(o)
138
232
  return true if self.equal?(o)
139
233
  self.class == o.class &&
234
+ pixel_id == o.pixel_id &&
140
235
  events == o.events &&
141
- test_event_code == o.test_event_code
142
- partner_agent == o.partner_agent
236
+ test_event_code == o.test_event_code &&
237
+ partner_agent == o.partner_agent &&
238
+ namespace_id == o.namespace_id &&
239
+ upload_id == o.upload_id &&
240
+ upload_tag == o.upload_tag &&
241
+ upload_source == o.upload_source &&
242
+ http_service_client == o.http_service_client
143
243
  end
144
244
 
145
245
  # @see the `==` method
@@ -150,7 +250,17 @@ module FacebookAds
150
250
  # Calculates hash code according to all attributes.
151
251
  # @return [Fixnum] Hash code
152
252
  def hash
153
- [events, test_event_code, partner_agent].hash
253
+ [
254
+ pixel_id,
255
+ events,
256
+ test_event_code,
257
+ partner_agent,
258
+ namespace_id,
259
+ upload_id,
260
+ upload_tag,
261
+ upload_source,
262
+ http_service_client,
263
+ ].hash
154
264
  end
155
265
 
156
266
  def to_s
@@ -167,9 +277,20 @@ module FacebookAds
167
277
  unless partner_agent.nil?
168
278
  hash['partner_agent'] = partner_agent
169
279
  end
280
+ unless namespace_id.nil?
281
+ hash['namespace_id'] = namespace_id
282
+ end
283
+ unless upload_id.nil?
284
+ hash['upload_id'] = upload_id
285
+ end
286
+ unless upload_tag.nil?
287
+ hash['upload_tag'] = upload_tag
288
+ end
289
+ unless upload_source.nil?
290
+ hash['upload_source'] = upload_source
291
+ end
170
292
  hash.to_s
171
293
  end
172
294
  end
173
295
  end
174
296
  end
175
-