facebookbusiness 0.9.0.1 → 0.11.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (99) 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 +26 -55
  4. data/lib/facebook_ads/ad_objects/ad_account_delivery_estimate.rb +1 -0
  5. data/lib/facebook_ads/ad_objects/{user_payment_modules_options.rb → ad_account_ios_fourteen_campaign_limits.rb} +4 -5
  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 +3 -1
  8. data/lib/facebook_ads/ad_objects/ad_asset_feed_spec.rb +3 -0
  9. data/lib/facebook_ads/ad_objects/ad_campaign_activity.rb +6 -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 +9 -7
  12. data/lib/facebook_ads/ad_objects/ad_creative_link_data.rb +1 -0
  13. data/lib/facebook_ads/ad_objects/ad_creative_link_data_call_to_action.rb +2 -0
  14. data/lib/facebook_ads/ad_objects/{read_only_analytics_user_property_config.rb → ad_creative_omnichannel_link_spec.rb} +5 -3
  15. data/lib/facebook_ads/ad_objects/ad_creative_portrait_customizations.rb +1 -0
  16. data/lib/facebook_ads/ad_objects/ad_preview.rb +5 -0
  17. data/lib/facebook_ads/ad_objects/ad_report_run.rb +1 -0
  18. data/lib/facebook_ads/ad_objects/ad_rule.rb +1 -0
  19. data/lib/facebook_ads/ad_objects/ad_rule_evaluation_spec.rb +1 -2
  20. data/lib/facebook_ads/ad_objects/ad_rule_execution_spec.rb +1 -2
  21. data/lib/facebook_ads/ad_objects/ad_set.rb +6 -2
  22. data/lib/facebook_ads/ad_objects/ad_study.rb +7 -11
  23. data/lib/facebook_ads/ad_objects/ad_study_objective.rb +3 -4
  24. data/lib/facebook_ads/ad_objects/ad_video.rb +26 -18
  25. data/lib/facebook_ads/ad_objects/adgroup_activity.rb +0 -2
  26. data/lib/facebook_ads/ad_objects/adgroup_placement_specific_review_feedback.rb +2 -0
  27. data/lib/facebook_ads/ad_objects/adoptable_pet.rb +22 -0
  28. data/lib/facebook_ads/ad_objects/ads_action_stats.rb +2 -0
  29. data/lib/facebook_ads/ad_objects/ads_insights.rb +5 -4
  30. data/lib/facebook_ads/ad_objects/ads_pixel.rb +5 -0
  31. data/lib/facebook_ads/ad_objects/album.rb +0 -10
  32. data/lib/facebook_ads/ad_objects/application.rb +29 -14
  33. data/lib/facebook_ads/ad_objects/atlas_campaign.rb +0 -8
  34. data/lib/facebook_ads/ad_objects/audio_copyright.rb +4 -0
  35. data/lib/facebook_ads/ad_objects/automotive_model.rb +47 -0
  36. data/lib/facebook_ads/ad_objects/business.rb +46 -7
  37. data/lib/facebook_ads/ad_objects/business_asset_group.rb +3 -0
  38. data/lib/facebook_ads/ad_objects/campaign.rb +5 -4
  39. data/lib/facebook_ads/ad_objects/canvas.rb +2 -0
  40. data/lib/facebook_ads/ad_objects/{event_tour.rb → canvas_template.rb} +12 -20
  41. data/lib/facebook_ads/ad_objects/catalog_item_channels_to_integrity_status.rb +38 -0
  42. data/lib/facebook_ads/ad_objects/catalog_sub_vertical_list.rb +3 -1
  43. data/lib/facebook_ads/ad_objects/comment.rb +3 -1
  44. data/lib/facebook_ads/ad_objects/commerce_merchant_settings.rb +33 -0
  45. data/lib/facebook_ads/ad_objects/commerce_order.rb +14 -13
  46. data/lib/facebook_ads/ad_objects/content_delivery_report.rb +4 -0
  47. data/lib/facebook_ads/ad_objects/{offline_terms_of_service.rb → contextual_bundling_spec.rb} +4 -4
  48. data/lib/facebook_ads/ad_objects/custom_audience.rb +9 -12
  49. data/lib/facebook_ads/ad_objects/custom_audience_data_source.rb +1 -0
  50. data/lib/facebook_ads/ad_objects/delivery_window.rb +287 -0
  51. data/lib/facebook_ads/ad_objects/destination.rb +22 -0
  52. data/lib/facebook_ads/ad_objects/event.rb +4 -0
  53. data/lib/facebook_ads/ad_objects/flight.rb +22 -0
  54. data/lib/facebook_ads/ad_objects/group.rb +21 -22
  55. data/lib/facebook_ads/ad_objects/home_listing.rb +22 -0
  56. data/lib/facebook_ads/ad_objects/hotel.rb +22 -0
  57. data/lib/facebook_ads/ad_objects/ig_media.rb +2 -1
  58. data/lib/facebook_ads/ad_objects/ig_user.rb +10 -2
  59. data/lib/facebook_ads/ad_objects/image_copyright.rb +302 -0
  60. data/lib/facebook_ads/ad_objects/insights_result.rb +1 -1
  61. data/lib/facebook_ads/ad_objects/instagram_user.rb +0 -3
  62. data/lib/facebook_ads/ad_objects/link.rb +0 -10
  63. data/lib/facebook_ads/ad_objects/live_video.rb +20 -13
  64. data/lib/facebook_ads/ad_objects/messenger_profile.rb +1 -0
  65. data/lib/facebook_ads/ad_objects/omega_customer_trx.rb +64 -0
  66. data/lib/facebook_ads/ad_objects/oracle_transaction.rb +0 -5
  67. data/lib/facebook_ads/ad_objects/page.rb +85 -13
  68. data/lib/facebook_ads/ad_objects/page_call_to_action.rb +6 -0
  69. data/lib/facebook_ads/ad_objects/page_commerce_eligibility.rb +38 -0
  70. data/lib/facebook_ads/ad_objects/page_post.rb +0 -10
  71. data/lib/facebook_ads/ad_objects/payment_engine_payment.rb +73 -0
  72. data/lib/facebook_ads/ad_objects/payment_subscription.rb +3 -3
  73. data/lib/facebook_ads/ad_objects/photo.rb +0 -10
  74. data/lib/facebook_ads/ad_objects/post.rb +12 -40
  75. data/lib/facebook_ads/ad_objects/{cpas_parent_catalog_settings.rb → private_lift_study_instance.rb} +11 -12
  76. data/lib/facebook_ads/ad_objects/product_catalog.rb +51 -4
  77. data/lib/facebook_ads/ad_objects/{ad_account_roas.rb → product_catalog_diagnostic_group.rb} +55 -30
  78. data/lib/facebook_ads/ad_objects/product_feed.rb +17 -1
  79. data/lib/facebook_ads/ad_objects/product_feed_schedule.rb +2 -0
  80. data/lib/facebook_ads/ad_objects/product_group.rb +8 -6
  81. data/lib/facebook_ads/ad_objects/product_item.rb +25 -1
  82. data/lib/facebook_ads/ad_objects/{user_payment_methods_info.rb → product_item_ar_data.rb} +24 -8
  83. data/lib/facebook_ads/ad_objects/product_set.rb +7 -0
  84. data/lib/facebook_ads/ad_objects/saved_audience.rb +3 -0
  85. data/lib/facebook_ads/ad_objects/server_side/user_data.rb +290 -96
  86. data/lib/facebook_ads/ad_objects/server_side/util.rb +16 -1
  87. data/lib/facebook_ads/ad_objects/system_user.rb +20 -0
  88. data/lib/facebook_ads/ad_objects/targeting.rb +0 -2
  89. data/lib/facebook_ads/ad_objects/unified_thread.rb +5 -1
  90. data/lib/facebook_ads/ad_objects/user.rb +18 -13
  91. data/lib/facebook_ads/ad_objects/vehicle.rb +22 -0
  92. data/lib/facebook_ads/ad_objects/vehicle_offer.rb +22 -0
  93. data/lib/facebook_ads/ad_objects/video_copyright.rb +4 -0
  94. data/lib/facebook_ads/ad_objects/whats_app_business_account.rb +3 -0
  95. data/lib/facebook_ads/ad_objects/{friend_list.rb → whats_app_business_profile.rb} +3 -5
  96. data/lib/facebook_ads/edge.rb +2 -1
  97. data/lib/facebook_ads/version.rb +2 -2
  98. metadata +21 -17
  99. data/lib/facebook_ads/ad_objects/ad_account_creation_request.rb +0 -71
@@ -25,37 +25,62 @@ 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 AdAccountRoas < AdObject
28
+ class ProductCatalogDiagnosticGroup < AdObject
29
+ AFFECTED_CHANNELS = [
30
+ "business_inbox_in_messenger",
31
+ "shops",
32
+ "test_capability",
33
+ "universal_checkout",
34
+ "us_marketplace",
35
+ ]
29
36
 
30
- field :adgroup_id, 'string'
31
- field :arpu_180d, 'double'
32
- field :arpu_1d, 'double'
33
- field :arpu_30d, 'double'
34
- field :arpu_365d, 'double'
35
- field :arpu_3d, 'double'
36
- field :arpu_7d, 'double'
37
- field :arpu_90d, 'double'
38
- field :campaign_group_id, 'string'
39
- field :campaign_id, 'string'
40
- field :date_start, 'string'
41
- field :date_stop, 'string'
42
- field :installs, 'int'
43
- field :revenue, 'double'
44
- field :revenue_180d, 'double'
45
- field :revenue_1d, 'double'
46
- field :revenue_30d, 'double'
47
- field :revenue_365d, 'double'
48
- field :revenue_3d, 'double'
49
- field :revenue_7d, 'double'
50
- field :revenue_90d, 'double'
51
- field :spend, 'double'
52
- field :yield_180d, 'double'
53
- field :yield_1d, 'double'
54
- field :yield_30d, 'double'
55
- field :yield_365d, 'double'
56
- field :yield_3d, 'double'
57
- field :yield_7d, 'double'
58
- field :yield_90d, 'double'
37
+ AFFECTED_FEATURES = [
38
+ "augmented_reality",
39
+ "checkout",
40
+ ]
41
+
42
+ SEVERITY = [
43
+ "MUST_FIX",
44
+ "OPPORTUNITY",
45
+ ]
46
+
47
+ TYPE = [
48
+ "ATTRIBUTES_INVALID",
49
+ "ATTRIBUTES_MISSING",
50
+ "CATEGORY",
51
+ "CHECKOUT",
52
+ "IMAGE_QUALITY",
53
+ "LOW_QUALITY_TITLE_AND_DESCRIPTION",
54
+ "POLICY_VIOLATION",
55
+ "SHOPS_VISIBILITY_ISSUES",
56
+ ]
57
+
58
+ SEVERITIES = [
59
+ "MUST_FIX",
60
+ "OPPORTUNITY",
61
+ ]
62
+
63
+ TYPES = [
64
+ "ATTRIBUTES_INVALID",
65
+ "ATTRIBUTES_MISSING",
66
+ "CATEGORY",
67
+ "CHECKOUT",
68
+ "IMAGE_QUALITY",
69
+ "LOW_QUALITY_TITLE_AND_DESCRIPTION",
70
+ "POLICY_VIOLATION",
71
+ "SHOPS_VISIBILITY_ISSUES",
72
+ ]
73
+
74
+
75
+ field :affected_channels, { list: { enum: -> { AFFECTED_CHANNELS }} }
76
+ field :affected_features, { list: { enum: -> { AFFECTED_FEATURES }} }
77
+ field :diagnostics, { list: 'object' }
78
+ field :error_code, 'int'
79
+ field :number_of_affected_items, 'int'
80
+ field :severity, { enum: -> { SEVERITY }}
81
+ field :subtitle, 'string'
82
+ field :title, 'string'
83
+ field :type, { enum: -> { TYPE }}
59
84
  has_no_id
60
85
  has_no_get
61
86
  has_no_post
@@ -53,6 +53,7 @@ module FacebookAds
53
53
 
54
54
  FEED_TYPE = [
55
55
  "AUTO",
56
+ "AUTOMOTIVE_MODEL",
56
57
  "DESTINATION",
57
58
  "FLIGHT",
58
59
  "HOME_LISTING",
@@ -126,7 +127,11 @@ module FacebookAds
126
127
  field :feed_type, { enum: -> { FEED_TYPE }}
127
128
  field :override_value, 'string'
128
129
  field :rules, { list: 'string' }
129
- field :whitelisted_properties, { list: 'string' }
130
+ field :selected_override_fields, { list: 'string' }
131
+
132
+ has_edge :auto_markets do |edge|
133
+ edge.get
134
+ end
130
135
 
131
136
  has_edge :automotive_models do |edge|
132
137
  edge.get 'AutomotiveModel' do |api|
@@ -135,6 +140,10 @@ module FacebookAds
135
140
  end
136
141
  end
137
142
 
143
+ has_edge :autos do |edge|
144
+ edge.get
145
+ end
146
+
138
147
  has_edge :destinations do |edge|
139
148
  edge.get 'Destination' do |api|
140
149
  api.has_param :bulk_pagination, 'bool'
@@ -163,6 +172,13 @@ module FacebookAds
163
172
  end
164
173
  end
165
174
 
175
+ has_edge :media_titles do |edge|
176
+ edge.get do |api|
177
+ api.has_param :bulk_pagination, 'bool'
178
+ api.has_param :filter, 'object'
179
+ end
180
+ end
181
+
166
182
  has_edge :products do |edge|
167
183
  edge.get 'ProductItem' do |api|
168
184
  api.has_param :bulk_pagination, 'bool'
@@ -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
@@ -34,20 +34,20 @@ module FacebookAds
34
34
 
35
35
  has_edge :products do |edge|
36
36
  edge.get 'ProductItem'
37
- edge.post 'ProductItem' do |api|
37
+ edge.post do |api|
38
38
  api.has_param :additional_image_urls, { list: 'string' }
39
39
  api.has_param :additional_variant_attributes, 'hash'
40
40
  api.has_param :android_app_name, 'string'
41
41
  api.has_param :android_class, 'string'
42
42
  api.has_param :android_package, 'string'
43
43
  api.has_param :android_url, 'string'
44
- api.has_param :availability, { enum: -> { ProductItem::AVAILABILITY }}
44
+ api.has_param :availability, { enum: %w{available for order discontinued in stock out of stock pending preorder }}
45
45
  api.has_param :brand, 'string'
46
46
  api.has_param :category, 'string'
47
47
  api.has_param :checkout_url, 'string'
48
48
  api.has_param :color, 'string'
49
- api.has_param :commerce_tax_category, { enum: -> { ProductItem::COMMERCE_TAX_CATEGORY }}
50
- api.has_param :condition, { enum: -> { ProductItem::CONDITION }}
49
+ api.has_param :commerce_tax_category, { enum: %w{FB_ANIMAL FB_ANIMAL_SUPP FB_APRL FB_APRL_ACCESSORIES FB_APRL_ATHL_UNIF FB_APRL_CASES FB_APRL_CLOTHING FB_APRL_COSTUME FB_APRL_CSTM FB_APRL_FORMAL FB_APRL_HANDBAG FB_APRL_JEWELRY FB_APRL_SHOE FB_APRL_SHOE_ACC FB_APRL_SWIM FB_APRL_SWIM_CHIL FB_APRL_SWIM_CVR FB_ARTS FB_ARTS_HOBBY FB_ARTS_PARTY FB_ARTS_PARTY_GIFT_CARD FB_ARTS_TICKET FB_BABY FB_BABY_BATH FB_BABY_BLANKET FB_BABY_DIAPER FB_BABY_GIFT_SET FB_BABY_HEALTH FB_BABY_NURSING FB_BABY_POTTY_TRN FB_BABY_SAFE FB_BABY_TOYS FB_BABY_TRANSPORT FB_BABY_TRANSPORT_ACC FB_BAGS FB_BAGS_BKPK FB_BAGS_BOXES FB_BAGS_BRFCS FB_BAGS_CSMT_BAG FB_BAGS_DFFL FB_BAGS_DIPR FB_BAGS_FNNY FB_BAGS_GRMT FB_BAGS_LUGG FB_BAGS_LUG_ACC FB_BAGS_MSGR FB_BAGS_TOTE FB_BAGS_TRN_CAS FB_BLDG FB_BLDG_ACC FB_BLDG_CNSMB FB_BLDG_FENCE FB_BLDG_FUEL_TNK FB_BLDG_HT_VNT FB_BLDG_LOCK FB_BLDG_MATRL FB_BLDG_PLMB FB_BLDG_PUMP FB_BLDG_PWRS FB_BLDG_STR_TANK FB_BLDG_S_ENG FB_BLDG_TL_ACC FB_BLDG_TOOL FB_BUSIND FB_BUSIND_ADVERTISING FB_BUSIND_AGRICULTURE FB_BUSIND_AUTOMATION FB_BUSIND_HEAVY_MACH FB_BUSIND_LAB FB_BUSIND_MEDICAL FB_BUSIND_RETAIL FB_BUSIND_SANITARY_CT FB_BUSIND_SIGN FB_BUSIND_STORAGE FB_BUSIND_STORAGE_ACC FB_BUSIND_WORK_GEAR FB_CAMERA_ACC FB_CAMERA_CAMERA FB_CAMERA_OPTIC FB_CAMERA_OPTICS FB_CAMERA_PHOTO FB_ELEC FB_ELEC_ACC FB_ELEC_ARCDADE FB_ELEC_AUDIO FB_ELEC_CIRCUIT FB_ELEC_COMM FB_ELEC_COMPUTER FB_ELEC_GPS_ACC FB_ELEC_GPS_NAV FB_ELEC_GPS_TRK FB_ELEC_MARINE FB_ELEC_NETWORK FB_ELEC_PART FB_ELEC_PRINT FB_ELEC_RADAR FB_ELEC_SPEED_RDR FB_ELEC_TOLL FB_ELEC_VIDEO FB_ELEC_VID_GM_ACC FB_ELEC_VID_GM_CNSL FB_FOOD FB_FURN FB_FURN_BABY FB_FURN_BENCH FB_FURN_CART FB_FURN_CHAIR FB_FURN_CHAIR_ACC FB_FURN_DIVIDE FB_FURN_DIVIDE_ACC FB_FURN_ENT_CTR FB_FURN_FUTN FB_FURN_FUTN_PAD FB_FURN_OFFICE FB_FURN_OFFICE_ACC FB_FURN_OTTO FB_FURN_OUTDOOR FB_FURN_OUTDOOR_ACC FB_FURN_SETS FB_FURN_SHELVE_ACC FB_FURN_SHLF FB_FURN_SOFA FB_FURN_SOFA_ACC FB_FURN_STORAGE FB_FURN_TABL FB_FURN_TABL_ACC FB_GENERIC_TAXABLE FB_HLTH FB_HLTH_HLTH FB_HLTH_JWL_CR FB_HLTH_LILP_BLM FB_HLTH_LTN_SPF FB_HLTH_PRSL_CR FB_HLTH_SKN_CR FB_HMGN FB_HMGN_BATH FB_HMGN_DCOR FB_HMGN_EMGY FB_HMGN_FPLC FB_HMGN_FPLC_ACC FB_HMGN_GS_SFT FB_HMGN_HS_ACC FB_HMGN_HS_APP FB_HMGN_HS_SPL FB_HMGN_KTCN FB_HMGN_LAWN FB_HMGN_LGHT FB_HMGN_LINN FB_HMGN_LT_ACC FB_HMGN_OTDR FB_HMGN_POOL FB_HMGN_SCTY FB_HMGN_SMK_ACC FB_HMGN_UMBR FB_HMGN_UMBR_ACC FB_MDIA FB_MDIA_BOOK FB_MDIA_DVDS FB_MDIA_MAG FB_MDIA_MANL FB_MDIA_MUSC FB_MDIA_PRJ_PLN FB_MDIA_SHT_MUS FB_OFFC FB_OFFC_BKAC FB_OFFC_CRTS FB_OFFC_DSKP FB_OFFC_EQIP FB_OFFC_FLNG FB_OFFC_GNRL FB_OFFC_INSTM FB_OFFC_LP_DSK FB_OFFC_MATS FB_OFFC_NM_PLT FB_OFFC_PPR_HNDL FB_OFFC_PRSNT_SPL FB_OFFC_SEALR FB_OFFC_SHIP_SPL FB_RLGN FB_RLGN_CMNY FB_RLGN_ITEM FB_RLGN_WEDD FB_SFTWR FB_SFWR_CMPTR FB_SFWR_DGTL_GD FB_SFWR_GAME FB_SHIPPING FB_SPOR FB_SPORT_ATHL FB_SPORT_ATHL_CLTH FB_SPORT_ATHL_SHOE FB_SPORT_ATHL_SPRT FB_SPORT_EXRCS FB_SPORT_INDR_GM FB_SPORT_OTDR_GM FB_TOYS FB_TOYS_EQIP FB_TOYS_GAME FB_TOYS_PZZL FB_TOYS_TMRS FB_TOYS_TOYS FB_VEHI FB_VEHI_PART }}
50
+ api.has_param :condition, { enum: %w{cpo new open_box_new refurbished used used_fair used_good used_like_new }}
51
51
  api.has_param :currency, 'string'
52
52
  api.has_param :custom_data, 'hash'
53
53
  api.has_param :custom_label_0, 'string'
@@ -58,7 +58,7 @@ module FacebookAds
58
58
  api.has_param :description, 'string'
59
59
  api.has_param :expiration_date, 'string'
60
60
  api.has_param :fb_product_category, 'string'
61
- api.has_param :gender, { enum: -> { ProductItem::GENDER }}
61
+ api.has_param :gender, { enum: %w{female male unisex }}
62
62
  api.has_param :gtin, 'string'
63
63
  api.has_param :image_url, 'string'
64
64
  api.has_param :inventory, 'int'
@@ -73,6 +73,7 @@ module FacebookAds
73
73
  api.has_param :iphone_url, 'string'
74
74
  api.has_param :launch_date, 'string'
75
75
  api.has_param :manufacturer_part_number, 'string'
76
+ api.has_param :marked_for_product_launch, { enum: %w{default marked not_marked }}
76
77
  api.has_param :material, 'string'
77
78
  api.has_param :mobile_link, 'string'
78
79
  api.has_param :name, 'string'
@@ -83,6 +84,7 @@ module FacebookAds
83
84
  api.has_param :pattern, 'string'
84
85
  api.has_param :price, 'int'
85
86
  api.has_param :product_type, 'string'
87
+ api.has_param :quantity_to_sell_on_facebook, 'int'
86
88
  api.has_param :retailer_id, 'string'
87
89
  api.has_param :return_policy_days, 'int'
88
90
  api.has_param :sale_price, 'int'
@@ -92,7 +94,7 @@ module FacebookAds
92
94
  api.has_param :size, 'string'
93
95
  api.has_param :start_date, 'string'
94
96
  api.has_param :url, 'string'
95
- api.has_param :visibility, { enum: -> { ProductItem::VISIBILITY }}
97
+ api.has_param :visibility, { enum: %w{published staging }}
96
98
  api.has_param :windows_phone_app_id, 'string'
97
99
  api.has_param :windows_phone_app_name, 'string'
98
100
  api.has_param :windows_phone_url, 'string'
@@ -62,6 +62,15 @@ module FacebookAds
62
62
  "unisex",
63
63
  ]
64
64
 
65
+ IMAGE_FETCH_STATUS = [
66
+ "DIRECT_UPLOAD",
67
+ "FETCHED",
68
+ "FETCH_FAILED",
69
+ "NO_STATUS",
70
+ "OUTDATED",
71
+ "PARTIAL_FETCH",
72
+ ]
73
+
65
74
  REVIEW_STATUS = [
66
75
  "",
67
76
  "approved",
@@ -92,6 +101,7 @@ module FacebookAds
92
101
  "FB_APRL_CLOTHING",
93
102
  "FB_APRL_COSTUME",
94
103
  "FB_APRL_CSTM",
104
+ "FB_APRL_FORMAL",
95
105
  "FB_APRL_HANDBAG",
96
106
  "FB_APRL_JEWELRY",
97
107
  "FB_APRL_SHOE",
@@ -287,12 +297,19 @@ module FacebookAds
287
297
  "FB_VEHI_PART",
288
298
  ]
289
299
 
300
+ MARKED_FOR_PRODUCT_LAUNCH = [
301
+ "default",
302
+ "marked",
303
+ "not_marked",
304
+ ]
305
+
290
306
 
291
307
  field :additional_image_cdn_urls, { list: 'hash' }
292
308
  field :additional_image_urls, { list: 'string' }
293
309
  field :additional_variant_attributes, 'hash'
294
310
  field :age_group, { enum: -> { AGE_GROUP }}
295
311
  field :applinks, 'CatalogItemAppLinks'
312
+ field :ar_data, 'ProductItemArData'
296
313
  field :availability, { enum: -> { AVAILABILITY }}
297
314
  field :brand, 'string'
298
315
  field :capability_to_review_status, 'hash'
@@ -315,20 +332,24 @@ module FacebookAds
315
332
  field :gtin, 'string'
316
333
  field :id, 'string'
317
334
  field :image_cdn_urls, 'hash'
335
+ field :image_fetch_status, { enum: -> { IMAGE_FETCH_STATUS }}
318
336
  field :image_url, 'string'
319
337
  field :images, { list: 'string' }
320
338
  field :inventory, 'int'
321
339
  field :manufacturer_part_number, 'string'
340
+ field :marked_for_product_launch, 'string'
322
341
  field :material, 'string'
323
342
  field :mobile_link, 'string'
324
343
  field :name, 'string'
325
344
  field :ordering_index, 'int'
345
+ field :parent_product_id, 'string'
326
346
  field :pattern, 'string'
327
347
  field :price, 'string'
328
348
  field :product_catalog, 'ProductCatalog'
329
349
  field :product_feed, 'ProductFeed'
330
350
  field :product_group, 'ProductGroup'
331
351
  field :product_type, 'string'
352
+ field :quantity_to_sell_on_facebook, 'int'
332
353
  field :retailer_id, 'string'
333
354
  field :retailer_product_group_id, 'string'
334
355
  field :review_rejection_reasons, { list: 'string' }
@@ -343,7 +364,6 @@ module FacebookAds
343
364
  field :start_date, 'string'
344
365
  field :url, 'string'
345
366
  field :visibility, { enum: -> { VISIBILITY }}
346
- field :additional_image_files, { list: 'file' }
347
367
  field :additional_uploaded_image_ids, { list: 'string' }
348
368
  field :android_app_name, 'string'
349
369
  field :android_class, 'string'
@@ -369,6 +389,10 @@ module FacebookAds
369
389
  field :windows_phone_app_name, 'string'
370
390
  field :windows_phone_url, 'string'
371
391
 
392
+ has_edge :channels_to_integrity_status do |edge|
393
+ edge.get 'CatalogItemChannelsToIntegrityStatus'
394
+ end
395
+
372
396
  has_edge :product_sets do |edge|
373
397
  edge.get 'ProductSet'
374
398
  end
@@ -25,15 +25,31 @@ 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
+ "WHATSAPP",
43
+ ]
29
44
 
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' }
45
+
46
+ field :container_effect, 'string'
47
+ field :effect_icon, 'string'
48
+ field :effect_parameters, 'object'
49
+ field :picker_icon, 'string'
50
+ field :product_ar_link, 'object'
51
+ field :state, 'string'
52
+ field :surfaces, { list: { enum: -> { SURFACES }} }
37
53
  has_no_id
38
54
  has_no_get
39
55
  has_no_post
@@ -73,6 +73,13 @@ module FacebookAds
73
73
  end
74
74
  end
75
75
 
76
+ has_edge :media_titles do |edge|
77
+ edge.get do |api|
78
+ api.has_param :bulk_pagination, 'bool'
79
+ api.has_param :filter, 'object'
80
+ end
81
+ end
82
+
76
83
  has_edge :products do |edge|
77
84
  edge.get 'ProductItem' do |api|
78
85
  api.has_param :bulk_pagination, 'bool'
@@ -29,10 +29,13 @@ module FacebookAds
29
29
 
30
30
  field :account, 'AdAccount'
31
31
  field :approximate_count, 'int'
32
+ field :approximate_count_64bit, 'int'
33
+ field :delete_time, 'int'
32
34
  field :description, 'string'
33
35
  field :extra_info, 'string'
34
36
  field :id, 'string'
35
37
  field :name, 'string'
38
+ field :operation_status, 'CustomAudienceStatus'
36
39
  field :permission_for_actions, 'AudiencePermissionForActions'
37
40
  field :run_status, 'string'
38
41
  field :sentence_lines, { list: 'string' }
@@ -22,53 +22,157 @@ module FacebookAds
22
22
  # UserData is a set of identifiers Facebook can use for targeted attribution
23
23
  class UserData
24
24
 
25
+ # A list of email addresses, in lowercase.
26
+ # Example: ['joe@eg.com']
27
+ attr_accessor :emails
28
+
25
29
  # An email address, in lowercase.
26
30
  # Example: joe@eg.com
27
- attr_accessor :email
31
+ def email
32
+ @emails ? @emails[0] : nil
33
+ end
34
+ def email=(email)
35
+ @emails = [email]
36
+ end
37
+
38
+ # A list of phone numbers. Include only digits with country code, area code, and number.
39
+ # Example: ['16505551212']
40
+ attr_accessor :phones
28
41
 
29
42
  # A phone number. Include only digits with country code, area code, and number.
30
43
  # Example: 16505551212
31
- attr_accessor :phone
44
+ def phone
45
+ @phones ? @phones[0] : nil
46
+ end
47
+ def phone=(phone)
48
+ @phones = [phone]
49
+ end
50
+
51
+ # A list of genders, in lowercase.
52
+ # Example: ['f']
53
+ attr_accessor :genders
32
54
 
33
55
  # Gender, in lowercase. Either f or m.
34
- attr_accessor :gender
56
+ def gender
57
+ @genders ? @genders[0] : nil
58
+ end
59
+ def gender=(gender)
60
+ @genders = [gender]
61
+ end
62
+
63
+ # A list of dates of birth given as year, month, and day.
64
+ # Format should be 'YYYYMMDD'
65
+ # Example: ['19971226'] for December 26, 1997.
66
+ attr_accessor :dates_of_birth
35
67
 
36
68
  # A date of birth given as year, month, and day.
37
69
  # Format should be 'YYYYMMDD'
38
70
  # Example: 19971226 for December 26, 1997.
39
- attr_accessor :date_of_birth
71
+ def date_of_birth
72
+ @dates_of_birth ? @dates_of_birth[0] : nil
73
+ end
74
+ def date_of_birth=(date_of_birth)
75
+ @dates_of_birth = [date_of_birth]
76
+ end
77
+
78
+ # A list of last names in lowercase.
79
+ # Example: ['smith']
80
+ attr_accessor :last_names
40
81
 
41
82
  # A last name in lowercase.
42
83
  # Example: smith
43
- attr_accessor :last_name
84
+ def last_name
85
+ @last_names ? @last_names[0] : nil
86
+ end
87
+ def last_name=(last_name)
88
+ @last_names = [last_name]
89
+ end
90
+
91
+ # A list of first names in lowercase.
92
+ # Example: ['joe']
93
+ attr_accessor :first_names
44
94
 
45
95
  # A first name in lowercase.
46
96
  # Example: joe
47
- attr_accessor :first_name
97
+ def first_name
98
+ @first_names ? @first_names[0] : nil
99
+ end
100
+ def first_name=(first_name)
101
+ @first_names = [first_name]
102
+ end
103
+
104
+ # A list of cities in lower-case without spaces or punctuation.
105
+ # Example: ['menlopark']
106
+ attr_accessor :cities
48
107
 
49
108
  # A city in lower-case without spaces or punctuation.
50
109
  # Example: menlopark
51
- attr_accessor :city
110
+ def city
111
+ @cities ? @cities[0] : nil
112
+ end
113
+ def city=(city)
114
+ @cities = [city]
115
+ end
116
+
117
+ # A list of two-letter country codes in lowercase.
118
+ # Example: ['us']
119
+ attr_accessor :country_codes
52
120
 
53
121
  # A two-letter country code in lowercase.
54
122
  # Example: us
55
- attr_accessor :country_code
123
+ def country_code
124
+ @country_codes ? @country_codes[0] : nil
125
+ end
126
+ def country_code=(country_code)
127
+ @country_codes = [country_code]
128
+ end
129
+
130
+ # A list of two-letter state codes in lowercase.
131
+ # Example: ['ca']
132
+ attr_accessor :states
56
133
 
57
134
  # A two-letter state code in lowercase.
58
135
  # Example: ca
59
- attr_accessor :state
136
+ def state
137
+ @states ? @states[0] : nil
138
+ end
139
+ def state=(state)
140
+ @states = [state]
141
+ end
142
+
143
+ # A list of five-digit zip codes for United States.
144
+ # For other locations, follow each country's standards.
145
+ # Example: ['94035'] (for United States)
146
+ attr_accessor :zip_codes
60
147
 
61
148
  # A five-digit zip code for United States.
62
149
  # For other locations, follow each country's standards.
63
150
  # Example: 94035 (for United States)
64
- attr_accessor :zip_code
151
+ def zip_code
152
+ @zip_codes ? @zip_codes[0] : nil
153
+ end
154
+ def zip_code=(zip_code)
155
+ @zip_codes = [zip_code]
156
+ end
157
+
158
+ # A list of unique IDs from the advertiser, such as loyalty membership IDs, user IDs, and external cookie IDs.
159
+ # In the Offline Conversions API (https://www.facebook.com/business/help/104039186799009),
160
+ # this is known as extern_id. For more information, see Offline Conversions, Providing External IDs.
161
+ # If External ID is being sent via other channels, then it should be sent in the same format
162
+ # via the Conversions API.
163
+ attr_accessor :external_ids
65
164
 
66
165
  # Any unique ID from the advertiser, such as loyalty membership IDs, user IDs, and external cookie IDs.
67
166
  # In the Offline Conversions API (https://www.facebook.com/business/help/104039186799009),
68
167
  # this is known as extern_id. For more information, see Offline Conversions, Providing External IDs.
69
168
  # If External ID is being sent via other channels, then it should be sent in the same format
70
- # via the server-side API.
71
- attr_accessor :external_id
169
+ # via the Conversions API.
170
+ def external_id
171
+ @external_ids ? @external_ids[0] : nil
172
+ end
173
+ def external_id=(external_id)
174
+ @external_ids = [external_id]
175
+ end
72
176
 
73
177
  # The IP address of the browser corresponding to the event.
74
178
  attr_accessor :client_ip_address
@@ -78,13 +182,13 @@ module FacebookAds
78
182
 
79
183
  # The Facebook click ID value stored in the _fbc browser cookie under your domain.
80
184
  # See Managing fbc and fbp Parameters for how to get this value
81
- # (https://developers.facebook.com/docs/marketing-api/facebook-pixel/server-side-api/parameters#fbc),
185
+ # (https://developers.facebook.com/docs/marketing-api/facebook-pixel/conversions-api/parameters#fbc),
82
186
  # or generate this value from a fbclid query parameter.
83
187
  attr_accessor :fbc
84
188
 
85
189
  # The Facebook browser ID value stored in the _fbp browser cookie under your domain.
86
190
  # See Managing fbc and fbp Parameters for how to get this value
87
- # (https://developers.facebook.com/docs/marketing-api/facebook-pixel/server-side-api/parameters#fbc),
191
+ # (https://developers.facebook.com/docs/marketing-api/facebook-pixel/conversions-api/parameters#fbc),
88
192
  # or generate this value from a fbclid query parameter.
89
193
  attr_accessor :fbp
90
194
 
@@ -109,21 +213,32 @@ module FacebookAds
109
213
  # The date of birth month.
110
214
  attr_accessor :dobm
111
215
 
112
- # THe date of birth year.
216
+ # The date of birth year.
113
217
  attr_accessor :doby
114
218
 
115
219
  #UserData is a set of identifiers Facebook can use for targeted attribution
116
220
  # @param [String] email
221
+ # @param [Array<String>] emails
117
222
  # @param [String] phone
223
+ # @param [Array<String>] phones
118
224
  # @param [String] gender
225
+ # @param [Array<String>] genders
119
226
  # @param [String] date_of_birth
227
+ # @param [Array<String>] dates_of_births
120
228
  # @param [String] last_name
229
+ # @param [Array<String>] last_names
121
230
  # @param [String] first_name
231
+ # @param [Array<String>] first_names
122
232
  # @param [String] city
233
+ # @param [Array<String>] cities
123
234
  # @param [String] state
235
+ # @param [Array<String>] states
124
236
  # @param [String] country_code
237
+ # @param [Array<String>] country_codes
125
238
  # @param [String] zip_code
239
+ # @param [Array<String>] zip_codes
126
240
  # @param [String] external_id
241
+ # @param [Array<String>] external_ids
127
242
  # @param [String] client_ip_address
128
243
  # @param [String] client_user_agent
129
244
  # @param [String] fbc
@@ -136,44 +251,91 @@ module FacebookAds
136
251
  # @param [String] dobd
137
252
  # @param [String] dobm
138
253
  # @param [String] doby
139
- def initialize(email: nil, phone: nil, gender: nil, date_of_birth: nil,
140
- last_name: nil, first_name: nil, city: nil, state: nil,
141
- country_code: nil, zip_code: nil, external_id: nil, client_ip_address: nil,
254
+ def initialize(email: nil, emails: nil, phone: nil, phones: nil, gender: nil, genders: nil,
255
+ date_of_birth: nil, dates_of_birth: nil, last_name: nil, last_names: nil,
256
+ first_name: nil, first_names: nil, city: nil, cities: nil, state: nil, states: nil,
257
+ country_code: nil, country_codes: nil, zip_code: nil, zip_codes: nil,
258
+ external_id: nil, external_ids: nil, client_ip_address: nil,
142
259
  client_user_agent: nil, fbc: nil, fbp: nil, subscription_id: nil, lead_id: nil,
143
260
  f5first: nil, f5last: nil, fi: nil, dobd: nil, dobm: nil, doby: nil)
261
+ validate_constructor_values(emails, email, 'emails', 'email')
262
+ validate_constructor_values(phones, phone, 'phones', 'phone')
263
+ validate_constructor_values(genders, gender, 'genders', 'gender')
264
+ validate_constructor_values(dates_of_birth, date_of_birth, 'dates_of_birth', 'date_of_birth')
265
+ validate_constructor_values(first_names, first_name, 'first_names', 'first_name')
266
+ validate_constructor_values(last_names, last_name, 'last_names', 'last_name')
267
+ validate_constructor_values(cities, city, 'cities', 'city')
268
+ validate_constructor_values(country_codes, country_code, 'country_codes', 'country_code')
269
+ validate_constructor_values(states, state, 'states', 'state')
270
+ validate_constructor_values(zip_codes, zip_code, 'zip_codes', 'zip_code')
271
+ validate_constructor_values(external_ids, external_id, 'external_ids', 'external_id')
272
+
144
273
  unless email.nil?
145
274
  self.email = email
146
275
  end
276
+ unless emails.nil?
277
+ self.emails = emails
278
+ end
147
279
  unless phone.nil?
148
280
  self.phone = phone
149
281
  end
282
+ unless phones.nil?
283
+ self.phones = phones
284
+ end
150
285
  unless gender.nil?
151
286
  self.gender = gender
152
287
  end
288
+ unless genders.nil?
289
+ self.genders = genders
290
+ end
153
291
  unless date_of_birth.nil?
154
292
  self.date_of_birth = date_of_birth
155
293
  end
294
+ unless dates_of_birth.nil?
295
+ self.dates_of_birth = dates_of_birth
296
+ end
156
297
  unless last_name.nil?
157
298
  self.last_name = last_name
158
299
  end
300
+ unless last_names.nil?
301
+ self.last_names = last_names
302
+ end
159
303
  unless first_name.nil?
160
304
  self.first_name = first_name
161
305
  end
306
+ unless first_names.nil?
307
+ self.first_names = first_names
308
+ end
162
309
  unless city.nil?
163
310
  self.city = city
164
311
  end
312
+ unless cities.nil?
313
+ self.cities = cities
314
+ end
165
315
  unless state.nil?
166
316
  self.state = state
167
317
  end
318
+ unless states.nil?
319
+ self.states = states
320
+ end
168
321
  unless country_code.nil?
169
322
  self.country_code = country_code
170
323
  end
324
+ unless country_codes.nil?
325
+ self.country_codes = country_codes
326
+ end
171
327
  unless zip_code.nil?
172
328
  self.zip_code = zip_code
173
329
  end
330
+ unless zip_codes.nil?
331
+ self.zip_codes = zip_codes
332
+ end
174
333
  unless external_id.nil?
175
334
  self.external_id = external_id
176
335
  end
336
+ unless external_ids.nil?
337
+ self.external_ids = external_ids
338
+ end
177
339
  unless client_ip_address.nil?
178
340
  self.client_ip_address = client_ip_address
179
341
  end
@@ -220,48 +382,70 @@ module FacebookAds
220
382
  # convert string to symbol for hash key
221
383
  attributes = attributes.each_with_object({}) { |(k, v), h| h[k.to_sym] = v }
222
384
 
223
- if attributes.has_key?(:'email')
224
- self.email = attributes[:'email']
385
+ if attributes.has_key?(:'emails')
386
+ self.emails = attributes[:'emails']
387
+ elsif attributes.has_key?(:'email')
388
+ self.emails = [attributes[:'email']]
225
389
  end
226
390
 
227
- if attributes.has_key?(:'phone')
228
- self.phone = attributes[:'phone']
391
+ if attributes.has_key?(:'phones')
392
+ self.phones = attributes[:'phones']
393
+ elsif attributes.has_key?(:'phone')
394
+ self.phones = [attributes[:'phone']]
229
395
  end
230
396
 
231
- if attributes.has_key?(:'gender')
232
- self.gender = attributes[:'gender']
397
+ if attributes.has_key?(:'genders')
398
+ self.genders = attributes[:'genders']
399
+ elsif attributes.has_key?(:'gender')
400
+ self.genders = [attributes[:'gender']]
233
401
  end
234
402
 
235
- if attributes.has_key?(:'date_of_birth')
236
- self.date_of_birth = attributes[:'date_of_birth']
403
+ if attributes.has_key?(:'dates_of_birth')
404
+ self.dates_of_birth = attributes[:'dates_of_birth']
405
+ elsif attributes.has_key?(:'date_of_birth')
406
+ self.dates_of_birth = [attributes[:'date_of_birth']]
237
407
  end
238
408
 
239
- if attributes.has_key?(:'last_name')
240
- self.last_name = attributes[:'last_name']
409
+ if attributes.has_key?(:'last_names')
410
+ self.last_names = attributes[:'last_names']
411
+ elsif attributes.has_key?(:'last_name')
412
+ self.last_names = [attributes[:'last_name']]
241
413
  end
242
414
 
243
- if attributes.has_key?(:'first_name')
244
- self.first_name = attributes[:'first_name']
415
+ if attributes.has_key?(:'first_names')
416
+ self.first_names = attributes[:'first_names']
417
+ elsif attributes.has_key?(:'first_name')
418
+ self.first_names = [attributes[:'first_name']]
245
419
  end
246
420
 
247
- if attributes.has_key?(:'city')
248
- self.city = attributes[:'city']
421
+ if attributes.has_key?(:'cities')
422
+ self.cities = attributes[:'cities']
423
+ elsif attributes.has_key?(:'city')
424
+ self.cities = [attributes[:'city']]
249
425
  end
250
426
 
251
- if attributes.has_key?(:'country_code')
252
- self.country_code = attributes[:'country_code']
427
+ if attributes.has_key?(:'country_codes')
428
+ self.country_codes = attributes[:'country_codes']
429
+ elsif attributes.has_key?(:'country_code')
430
+ self.country_codes = [attributes[:'country_code']]
253
431
  end
254
432
 
255
- if attributes.has_key?(:'state')
256
- self.state = attributes[:'state']
433
+ if attributes.has_key?(:'states')
434
+ self.states = attributes[:'states']
435
+ elsif attributes.has_key?(:'state')
436
+ self.states = [attributes[:'state']]
257
437
  end
258
438
 
259
- if attributes.has_key?(:'zip_code')
260
- self.zip_code = attributes[:'zip_code']
439
+ if attributes.has_key?(:'zip_codes')
440
+ self.zip_codes = attributes[:'zip_codes']
441
+ elsif attributes.has_key?(:'zip_code')
442
+ self.zip_codes = [attributes[:'zip_code']]
261
443
  end
262
444
 
263
- if attributes.has_key?(:'external_id')
264
- self.external_id = attributes[:'external_id']
445
+ if attributes.has_key?(:'external_ids')
446
+ self.external_ids = attributes[:'external_ids']
447
+ elsif attributes.has_key?(:'external_id')
448
+ self.external_ids = [attributes[:'external_id']]
265
449
  end
266
450
 
267
451
  if attributes.has_key?(:'client_ip_address')
@@ -313,17 +497,17 @@ module FacebookAds
313
497
  def ==(o)
314
498
  return true if self.equal?(o)
315
499
  self.class == o.class &&
316
- email == o.email &&
317
- phone == o.phone &&
318
- gender == o.gender &&
319
- date_of_birth == o.date_of_birth &&
320
- last_name == o.last_name &&
321
- first_name == o.first_name &&
322
- city == o.city &&
323
- country_code == o.country_code &&
324
- state == o.state &&
325
- zip_code == o.zip_code &&
326
- external_id == o.external_id &&
500
+ emails == o.emails &&
501
+ phones == o.phones &&
502
+ genders == o.genders &&
503
+ dates_of_birth == o.dates_of_birth &&
504
+ last_names == o.last_names &&
505
+ first_names == o.first_names &&
506
+ cities == o.cities &&
507
+ country_codes == o.country_codes &&
508
+ states == o.states &&
509
+ zip_codes == o.zip_codes &&
510
+ external_ids == o.external_ids &&
327
511
  client_ip_address == o.client_ip_address &&
328
512
  client_user_agent == o.client_user_agent &&
329
513
  fbc == o.fbc &&
@@ -347,17 +531,17 @@ module FacebookAds
347
531
  # @return [Fixnum] Hash code
348
532
  def hash
349
533
  [
350
- email,
351
- phone,
352
- gender,
353
- date_of_birth,
354
- last_name,
355
- first_name,
356
- city,
357
- country_code,
358
- state,
359
- zip_code,
360
- external_id,
534
+ emails,
535
+ phones,
536
+ genders,
537
+ dates_of_birth,
538
+ last_names,
539
+ first_names,
540
+ cities,
541
+ country_codes,
542
+ states,
543
+ zip_codes,
544
+ external_ids,
361
545
  client_ip_address,
362
546
  client_user_agent,
363
547
  fbc,
@@ -378,38 +562,38 @@ module FacebookAds
378
562
  # @return [String] String presentation of the object
379
563
  def to_s
380
564
  hash = {}
381
- unless email.nil?
382
- hash['email'] = email
565
+ unless emails.nil?
566
+ hash['emails'] = emails
383
567
  end
384
- unless phone.nil?
385
- hash['phone'] = phone
568
+ unless phones.nil?
569
+ hash['phones'] = phones
386
570
  end
387
- unless gender.nil?
388
- hash['gender'] = gender
571
+ unless genders.nil?
572
+ hash['genders'] = genders
389
573
  end
390
- unless date_of_birth.nil?
391
- hash['date_of_birth'] = date_of_birth
574
+ unless dates_of_birth.nil?
575
+ hash['dates_of_birth'] = dates_of_birth
392
576
  end
393
- unless last_name.nil?
394
- hash['last_name'] = last_name
577
+ unless last_names.nil?
578
+ hash['last_names'] = last_names
395
579
  end
396
- unless first_name.nil?
397
- hash['first_name'] = first_name
580
+ unless first_names.nil?
581
+ hash['first_names'] = first_names
398
582
  end
399
- unless city.nil?
400
- hash['city'] = city
583
+ unless cities.nil?
584
+ hash['cities'] = cities
401
585
  end
402
- unless country_code.nil?
403
- hash['country_code'] = country_code
586
+ unless country_codes.nil?
587
+ hash['country_codes'] = country_codes
404
588
  end
405
- unless state.nil?
406
- hash['state'] = state
589
+ unless states.nil?
590
+ hash['states'] = states
407
591
  end
408
- unless zip_code.nil?
409
- hash['zip_code'] = zip_code
592
+ unless zip_codes.nil?
593
+ hash['zip_codes'] = zip_codes
410
594
  end
411
- unless external_id.nil?
412
- hash['external_id'] = external_id
595
+ unless external_ids.nil?
596
+ hash['external_ids'] = external_ids
413
597
  end
414
598
  unless client_ip_address.nil?
415
599
  hash['client_ip_address'] = client_ip_address
@@ -455,37 +639,37 @@ module FacebookAds
455
639
  def normalize
456
640
  hash = {}
457
641
  unless email.nil?
458
- hash['em'] = FacebookAds::ServerSide::Util.normalize(email, 'em')
642
+ hash['em'] = FacebookAds::ServerSide::Util.normalize_array(emails, 'em')
459
643
  end
460
644
  unless phone.nil?
461
- hash['ph'] = FacebookAds::ServerSide::Util.normalize(phone, 'ph')
645
+ hash['ph'] = FacebookAds::ServerSide::Util.normalize_array(phones, 'ph')
462
646
  end
463
647
  unless gender.nil?
464
- hash['ge'] = FacebookAds::ServerSide::Util.normalize(gender, 'ge')
648
+ hash['ge'] = FacebookAds::ServerSide::Util.normalize_array(genders, 'ge')
465
649
  end
466
650
  unless date_of_birth.nil?
467
- hash['db'] = FacebookAds::ServerSide::Util.normalize(date_of_birth, 'db')
651
+ hash['db'] = FacebookAds::ServerSide::Util.normalize_array(dates_of_birth, 'db')
468
652
  end
469
653
  unless last_name.nil?
470
- hash['ln'] = FacebookAds::ServerSide::Util.normalize(last_name, 'ln')
654
+ hash['ln'] = FacebookAds::ServerSide::Util.normalize_array(last_names, 'ln')
471
655
  end
472
656
  unless first_name.nil?
473
- hash['fn'] = FacebookAds::ServerSide::Util.normalize(first_name, 'fn')
657
+ hash['fn'] = FacebookAds::ServerSide::Util.normalize_array(first_names, 'fn')
474
658
  end
475
659
  unless city.nil?
476
- hash['ct'] = FacebookAds::ServerSide::Util.normalize(city, 'ct')
660
+ hash['ct'] = FacebookAds::ServerSide::Util.normalize_array(cities, 'ct')
477
661
  end
478
662
  unless country_code.nil?
479
- hash['country'] = FacebookAds::ServerSide::Util.normalize(country_code, 'country')
663
+ hash['country'] = FacebookAds::ServerSide::Util.normalize_array(country_codes, 'country')
480
664
  end
481
665
  unless state.nil?
482
- hash['st'] = FacebookAds::ServerSide::Util.normalize(state, 'st')
666
+ hash['st'] = FacebookAds::ServerSide::Util.normalize_array(states, 'st')
483
667
  end
484
668
  unless zip_code.nil?
485
- hash['zp'] = FacebookAds::ServerSide::Util.normalize(zip_code, 'zp')
669
+ hash['zp'] = FacebookAds::ServerSide::Util.normalize_array(zip_codes, 'zp')
486
670
  end
487
671
  unless external_id.nil?
488
- hash['external_id'] = external_id
672
+ hash['external_id'] = external_ids
489
673
  end
490
674
  unless client_ip_address.nil?
491
675
  hash['client_ip_address'] = client_ip_address
@@ -523,7 +707,17 @@ module FacebookAds
523
707
  unless doby.nil?
524
708
  hash['doby'] = FacebookAds::ServerSide::Util.normalize(doby, 'doby')
525
709
  end
526
- hash
710
+ hash.select{|k, v| !v.nil?}
711
+ end
712
+
713
+ def validate_constructor_values(multi_value, single_value, multi_string, single_string)
714
+ if !multi_value.nil? && !single_value.nil?
715
+ raise ArgumentError.new(
716
+ 'Cannot set both %s and %s parameters via constructor. ' % [
717
+ multi_string, single_string
718
+ ] + 'Please set either the multi or single parameter, not both.'
719
+ )
720
+ end
527
721
  end
528
722
  end
529
723
  end