facebookbusiness 0.7.0.2 → 0.7.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/lib/facebook_ads/ad_objects/ad_account.rb +5 -6
  3. data/lib/facebook_ads/ad_objects/ad_account_delivery_estimate.rb +1 -0
  4. data/lib/facebook_ads/ad_objects/ad_account_matched_search_applications_edge_data.rb +1 -0
  5. data/lib/facebook_ads/ad_objects/ad_account_targeting_unified.rb +1 -0
  6. data/lib/facebook_ads/ad_objects/ad_activity.rb +7 -0
  7. data/lib/facebook_ads/ad_objects/ad_asset_feed_spec.rb +1 -0
  8. data/lib/facebook_ads/ad_objects/ad_campaign_activity.rb +2 -2
  9. data/lib/facebook_ads/ad_objects/ad_campaign_delivery_estimate.rb +1 -0
  10. data/lib/facebook_ads/ad_objects/ad_creative.rb +1 -0
  11. data/lib/facebook_ads/ad_objects/ad_creative_link_data_call_to_action.rb +1 -0
  12. data/lib/facebook_ads/ad_objects/ad_preview.rb +0 -1
  13. data/lib/facebook_ads/ad_objects/ad_set.rb +2 -0
  14. data/lib/facebook_ads/ad_objects/ad_study.rb +1 -0
  15. data/lib/facebook_ads/ad_objects/ad_video.rb +5 -27
  16. data/lib/facebook_ads/ad_objects/adgroup_placement_specific_review_feedback.rb +4 -0
  17. data/lib/facebook_ads/ad_objects/{ads_interest.rb → adoptable_pet.rb} +18 -5
  18. data/lib/facebook_ads/ad_objects/ads_insights.rb +4 -0
  19. data/lib/facebook_ads/ad_objects/application.rb +4 -0
  20. data/lib/facebook_ads/ad_objects/atlas_campaign.rb +2 -2
  21. data/lib/facebook_ads/ad_objects/business.rb +1 -121
  22. data/lib/facebook_ads/ad_objects/business_asset_group.rb +0 -3
  23. data/lib/facebook_ads/ad_objects/business_role_request.rb +5 -0
  24. data/lib/facebook_ads/ad_objects/business_user.rb +5 -0
  25. data/lib/facebook_ads/ad_objects/campaign.rb +257 -0
  26. data/lib/facebook_ads/ad_objects/commerce_merchant_settings.rb +8 -0
  27. data/lib/facebook_ads/ad_objects/event.rb +11 -0
  28. data/lib/facebook_ads/ad_objects/external_event_source.rb +1 -0
  29. data/lib/facebook_ads/ad_objects/group.rb +5 -0
  30. data/lib/facebook_ads/ad_objects/ig_media.rb +1 -0
  31. data/lib/facebook_ads/ad_objects/media_fingerprint.rb +0 -1
  32. data/lib/facebook_ads/ad_objects/page.rb +5 -2
  33. data/lib/facebook_ads/ad_objects/page_admin_note.rb +1 -0
  34. data/lib/facebook_ads/ad_objects/page_call_to_action.rb +3 -0
  35. data/lib/facebook_ads/ad_objects/page_change_proposal.rb +2 -0
  36. data/lib/facebook_ads/ad_objects/{brand_audience.rb → payment_subscription.rb} +23 -9
  37. data/lib/facebook_ads/ad_objects/post.rb +1 -1
  38. data/lib/facebook_ads/ad_objects/product_catalog.rb +2 -0
  39. data/lib/facebook_ads/ad_objects/product_feed.rb +1 -0
  40. data/lib/facebook_ads/ad_objects/product_set.rb +3 -0
  41. data/lib/facebook_ads/ad_objects/{user_influence.rb → product_set_metadata.rb} +4 -4
  42. data/lib/facebook_ads/ad_objects/profile.rb +1 -0
  43. data/lib/facebook_ads/ad_objects/profile_picture_source.rb +4 -0
  44. data/lib/facebook_ads/ad_objects/saved_audience.rb +1 -0
  45. data/lib/facebook_ads/ad_objects/server_side/content.rb +75 -13
  46. data/lib/facebook_ads/ad_objects/server_side/custom_data.rb +24 -6
  47. data/lib/facebook_ads/ad_objects/server_side/event_request.rb +80 -6
  48. data/lib/facebook_ads/ad_objects/server_side/user_data.rb +126 -17
  49. data/lib/facebook_ads/ad_objects/server_side/util.rb +204 -150
  50. data/lib/facebook_ads/ad_objects/system_user.rb +5 -0
  51. data/lib/facebook_ads/ad_objects/targeting.rb +1 -0
  52. data/lib/facebook_ads/ad_objects/{creative_asset_tag.rb → targeting_relaxation.rb} +2 -2
  53. data/lib/facebook_ads/ad_objects/third_party_measurement_report_dataset.rb +1 -0
  54. data/lib/facebook_ads/ad_objects/user.rb +8 -4
  55. data/lib/facebook_ads/ad_objects/user_taggable_friend.rb +1 -0
  56. data/lib/facebook_ads/ad_objects/{whats_app_business_profile.rb → work_meeting_link.rb} +3 -3
  57. data/lib/facebook_ads/version.rb +1 -1
  58. metadata +36 -16
  59. data/lib/facebook_ads/ad_objects/business_creative.rb +0 -50
  60. data/lib/facebook_ads/ad_objects/business_creative_folder.rb +0 -79
  61. data/lib/facebook_ads/ad_objects/business_creative_folder_sharing_agreement.rb +0 -46
  62. data/lib/facebook_ads/ad_objects/business_image.rb +0 -95
  63. data/lib/facebook_ads/ad_objects/client_transparency_status.rb +0 -40
  64. data/lib/facebook_ads/ad_objects/messenger_platform_referral.rb +0 -39
  65. data/lib/facebook_ads/ad_objects/streaming_reaction.rb +0 -51
@@ -16,8 +16,6 @@
16
16
  # IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
17
17
  # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
18
18
 
19
- require_relative 'util'
20
-
21
19
  module FacebookAds
22
20
  module ServerSide
23
21
 
@@ -93,6 +91,24 @@ module FacebookAds
93
91
  # The subscription ID for the user in this transaction. This is similar to the order ID for an individual product.
94
92
  attr_accessor :subscription_id
95
93
 
94
+ # The first 5 letters of the first name.
95
+ attr_accessor :f5first
96
+
97
+ # The first 5 letters of the last name.
98
+ attr_accessor :f5last
99
+
100
+ # The first initial.
101
+ attr_accessor :fi
102
+
103
+ # The date of birth day.
104
+ attr_accessor :dobd
105
+
106
+ # The date of birth month.
107
+ attr_accessor :dobm
108
+
109
+ # THe date of birth year.
110
+ attr_accessor :doby
111
+
96
112
  #UserData is a set of identifiers Facebook can use for targeted attribution
97
113
  # @param [String] email
98
114
  # @param [String] phone
@@ -110,10 +126,17 @@ module FacebookAds
110
126
  # @param [String] fbc
111
127
  # @param [String] fbp
112
128
  # @param [String] subscription_id
129
+ # @param [String] f5first
130
+ # @param [String] f5last
131
+ # @param [String] fi
132
+ # @param [String] dobd
133
+ # @param [String] dobm
134
+ # @param [String] doby
113
135
  def initialize(email: nil, phone: nil, gender: nil, date_of_birth: nil,
114
136
  last_name: nil, first_name: nil, city: nil, state: nil,
115
137
  country_code: nil, zip_code: nil, external_id: nil, client_ip_address: nil,
116
- client_user_agent: nil, fbc: nil, fbp: nil, subscription_id: nil)
138
+ client_user_agent: nil, fbc: nil, fbp: nil, subscription_id: nil,
139
+ f5first: nil, f5last: nil, fi: nil, dobd: nil, dobm: nil, doby: nil)
117
140
  unless email.nil?
118
141
  self.email = email
119
142
  end
@@ -162,6 +185,24 @@ module FacebookAds
162
185
  unless subscription_id.nil?
163
186
  self.subscription_id = subscription_id
164
187
  end
188
+ unless f5first.nil?
189
+ self.f5first = f5first
190
+ end
191
+ unless f5last.nil?
192
+ self.f5last = f5last
193
+ end
194
+ unless fi.nil?
195
+ self.fi = fi
196
+ end
197
+ unless dobd.nil?
198
+ self.dobd = dobd
199
+ end
200
+ unless dobm.nil?
201
+ self.dobm = dobm
202
+ end
203
+ unless doby.nil?
204
+ self.doby = doby
205
+ end
165
206
  end
166
207
 
167
208
  # build the object using the input hash
@@ -232,8 +273,28 @@ module FacebookAds
232
273
  self.fbp = attributes[:'fbp']
233
274
  end
234
275
 
235
- if attributes.has_key?(:'subscription_id')
236
- self.subscription_id = attributes[:'subscription_id']
276
+ if attributes.has_key?(:'f5first')
277
+ self.f5first = attributes[:'f5first']
278
+ end
279
+
280
+ if attributes.has_key?(:'f5last')
281
+ self.f5last = attributes[:'f5last']
282
+ end
283
+
284
+ if attributes.has_key?(:'fi')
285
+ self.fi = attributes[:'fi']
286
+ end
287
+
288
+ if attributes.has_key?(:'dobd')
289
+ self.dobd = attributes[:'dobd']
290
+ end
291
+
292
+ if attributes.has_key?(:'dobm')
293
+ self.dobm = attributes[:'dobm']
294
+ end
295
+
296
+ if attributes.has_key?(:'doby')
297
+ self.doby = attributes[:'doby']
237
298
  end
238
299
  end
239
300
 
@@ -256,7 +317,13 @@ module FacebookAds
256
317
  client_user_agent == o.client_user_agent &&
257
318
  fbc == o.fbc &&
258
319
  fbp == o.fbp &&
259
- subscription_id == o.subscription_id
320
+ subscription_id == o.subscription_id &&
321
+ f5first == o.f5first &&
322
+ f5last == o.f5last &&
323
+ fi == o.fi &&
324
+ dobd == o.dobd &&
325
+ dobm == o.dobm &&
326
+ doby == o.doby
260
327
  end
261
328
 
262
329
  # @see the `==` method
@@ -283,7 +350,13 @@ module FacebookAds
283
350
  client_user_agent,
284
351
  fbc,
285
352
  fbp,
286
- subscription_id
353
+ subscription_id,
354
+ f5first,
355
+ f5last,
356
+ fi,
357
+ dobd,
358
+ dobm,
359
+ doby,
287
360
  ].hash
288
361
 
289
362
  end
@@ -340,6 +413,24 @@ module FacebookAds
340
413
  unless subscription_id.nil?
341
414
  hash['subscription_id'] = subscription_id
342
415
  end
416
+ unless f5first.nil?
417
+ hash['f5first'] = f5first
418
+ end
419
+ unless f5last.nil?
420
+ hash['f5last'] = f5last
421
+ end
422
+ unless fi.nil?
423
+ hash['fi'] = fi
424
+ end
425
+ unless dobd.nil?
426
+ hash['dobd'] = dobd
427
+ end
428
+ unless dobm.nil?
429
+ hash['dobm'] = dobm
430
+ end
431
+ unless doby.nil?
432
+ hash['doby'] = doby
433
+ end
343
434
  hash.to_s
344
435
  end
345
436
 
@@ -348,34 +439,34 @@ module FacebookAds
348
439
  def normalize
349
440
  hash = {}
350
441
  unless email.nil?
351
- hash['em'] = FacebookAds::ServerSide::normalize(email, 'em')
442
+ hash['em'] = FacebookAds::ServerSide::Util.normalize(email, 'em')
352
443
  end
353
444
  unless phone.nil?
354
- hash['ph'] = FacebookAds::ServerSide::normalize(phone, 'ph')
445
+ hash['ph'] = FacebookAds::ServerSide::Util.normalize(phone, 'ph')
355
446
  end
356
447
  unless gender.nil?
357
- hash['ge'] = FacebookAds::ServerSide::normalize(gender, 'ge')
448
+ hash['ge'] = FacebookAds::ServerSide::Util.normalize(gender, 'ge')
358
449
  end
359
450
  unless date_of_birth.nil?
360
- hash['db'] = FacebookAds::ServerSide::normalize(date_of_birth, 'db')
451
+ hash['db'] = FacebookAds::ServerSide::Util.normalize(date_of_birth, 'db')
361
452
  end
362
453
  unless last_name.nil?
363
- hash['ln'] = FacebookAds::ServerSide::normalize(last_name, 'ln')
454
+ hash['ln'] = FacebookAds::ServerSide::Util.normalize(last_name, 'ln')
364
455
  end
365
456
  unless first_name.nil?
366
- hash['fn'] = FacebookAds::ServerSide::normalize(first_name, 'fn')
457
+ hash['fn'] = FacebookAds::ServerSide::Util.normalize(first_name, 'fn')
367
458
  end
368
459
  unless city.nil?
369
- hash['ct'] = FacebookAds::ServerSide::normalize(city, 'ct')
460
+ hash['ct'] = FacebookAds::ServerSide::Util.normalize(city, 'ct')
370
461
  end
371
462
  unless country_code.nil?
372
- hash['country'] = FacebookAds::ServerSide::normalize(country_code, 'country')
463
+ hash['country'] = FacebookAds::ServerSide::Util.normalize(country_code, 'country')
373
464
  end
374
465
  unless state.nil?
375
- hash['st'] = FacebookAds::ServerSide::normalize(state, 'st')
466
+ hash['st'] = FacebookAds::ServerSide::Util.normalize(state, 'st')
376
467
  end
377
468
  unless zip_code.nil?
378
- hash['zp'] = FacebookAds::ServerSide::normalize(zip_code, 'zp')
469
+ hash['zp'] = FacebookAds::ServerSide::Util.normalize(zip_code, 'zp')
379
470
  end
380
471
  unless external_id.nil?
381
472
  hash['external_id'] = external_id
@@ -395,6 +486,24 @@ module FacebookAds
395
486
  unless subscription_id.nil?
396
487
  hash['subscription_id'] = subscription_id
397
488
  end
489
+ unless f5first.nil?
490
+ hash['f5first'] = FacebookAds::ServerSide::Util.normalize(f5first, 'f5first')
491
+ end
492
+ unless f5last.nil?
493
+ hash['f5last'] = FacebookAds::ServerSide::Util.normalize(f5last, 'f5last')
494
+ end
495
+ unless fi.nil?
496
+ hash['fi'] = FacebookAds::ServerSide::Util.normalize(fi, 'fi')
497
+ end
498
+ unless dobd.nil?
499
+ hash['dobd'] = FacebookAds::ServerSide::Util.normalize(dobd, 'dobd')
500
+ end
501
+ unless dobm.nil?
502
+ hash['dobm'] = FacebookAds::ServerSide::Util.normalize(dobm, 'dobm')
503
+ end
504
+ unless doby.nil?
505
+ hash['doby'] = FacebookAds::ServerSide::Util.normalize(doby, 'doby')
506
+ end
398
507
  hash
399
508
  end
400
509
  end
@@ -19,210 +19,264 @@
19
19
  require 'digest'
20
20
  require 'countries'
21
21
  require 'money'
22
+ require 'time'
22
23
 
23
24
  module FacebookAds
24
25
  module ServerSide
26
+ class Util
27
+ PHONE_NUMBER_IGNORE_CHAR_SET = /[\-\s\(\)]+/
28
+ PHONE_NUMBER_DROP_PREFIX_ZEROS = /^\+?0{0,2}/
29
+ US_PHONE_NUMBER_REGEX = /^1\(?\d{3}\)?\d{7}$/
30
+ INTL_PHONE_NUMBER_REGEX = /^\d{1,4}\(?\d{2,3}\)?\d{4,}$/
31
+
32
+ # RFC 2822 for email format
33
+ EMAIL_REGEX = /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
34
+
35
+ # Normalizes the input string given the field_type
36
+ # @param [String] input Input string that needs to be normalized
37
+ # @param [String] field_type Type/Key for the value provided
38
+ # @return [String] Normalized value for the input and field_type.
39
+ def self.normalize(input, field_type)
40
+
41
+ if input.nil? or field_type.nil?
42
+ return nil;
43
+ end
44
+
45
+ input = input.strip.downcase
46
+
47
+ # If the data is already hashed, we by-pass input normalization
48
+ if is_already_hashed?(input) == true
49
+ return input
50
+ end
51
+
52
+ normalized_input = input;
53
+
54
+ case field_type
55
+ when 'country'
56
+ normalized_input = normalize_country input
57
+ when 'ct'
58
+ normalized_input = normalize_city input
59
+ when 'currency'
60
+ return normalize_currency input
61
+ when 'em'
62
+ normalized_input = normalize_email input
63
+ when 'ge'
64
+ normalized_input = normalize_gender input
65
+ when 'ph'
66
+ normalized_input = normalize_phone input
67
+ when 'st'
68
+ normalized_input = normalize_state input
69
+ when 'zp'
70
+ normalized_input = normalize_zip input
71
+ when 'f5first'
72
+ normalized_input = normalize_f5 input
73
+ when 'f5last'
74
+ normalized_input = normalize_f5 input
75
+ when 'fi'
76
+ normalized_input = normalize_fi input
77
+ when 'dobd'
78
+ normalized_input = normalize_dobd input
79
+ when 'dobm'
80
+ normalized_input = normalize_dobm input
81
+ when 'doby'
82
+ normalized_input = normalize_doby input
83
+ end
84
+
85
+ normalized_input = sha256Hash normalized_input
86
+
87
+ return normalized_input
88
+ end
25
89
 
26
- PHONE_NUMBER_IGNORE_CHAR_SET = /[\-\s\(\)]+/
27
- PHONE_NUMBER_DROP_PREFIX_ZEROS = /^\+?0{0,2}/
28
- US_PHONE_NUMBER_REGEX = /^1\(?\d{3}\)?\d{7}$/
29
- INTL_PHONE_NUMBER_REGEX = /^\d{1,4}\(?\d{2,3}\)?\d{4,}$/
30
-
31
- # RFC 2822 for email format
32
- EMAIL_REGEX = /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
33
-
34
- # @return [String] SHA 256 hash of input string
35
- def self.sha256Hash(input)
36
- unless input.nil?
37
- Digest::SHA256.hexdigest input
90
+ # @return [String] SHA 256 hash of input string
91
+ def self.sha256Hash(input)
92
+ unless input.nil?
93
+ Digest::SHA256.hexdigest input
94
+ end
38
95
  end
39
- end
40
96
 
41
- # Normalizes the input string given the field_type
42
- # @param [String] input Input string that needs to be normalized
43
- # @param [String] field_type Type/Key for the value provided
44
- # @return [String] Normalized value for the input and field_type.
45
- def self.normalize(input, field_type)
46
-
47
- if input.nil? or field_type.nil?
48
- return nil;
49
- end
50
-
51
- input = input.strip.downcase
52
-
53
- # If the data is already hashed, we by-pass input normalization
54
- if FacebookAds::ServerSide::is_already_hashed?(input) == true
55
- return input
56
- end
57
-
58
- normalized_input = input;
59
-
60
- case field_type
61
- when 'country'
62
- normalized_input = FacebookAds::ServerSide::normalize_country input
63
- when 'ct'
64
- normalized_input = FacebookAds::ServerSide::normalize_city input
65
- when 'currency'
66
- return FacebookAds::ServerSide::normalize_currency input
67
- when 'em'
68
- normalized_input = FacebookAds::ServerSide::normalize_email input
69
- when 'ge'
70
- normalized_input = FacebookAds::ServerSide::normalize_gender input
71
- when 'ph'
72
- normalized_input = FacebookAds::ServerSide::normalize_phone input
73
- when 'st'
74
- normalized_input = FacebookAds::ServerSide::normalize_state input
75
- when 'zp'
76
- normalized_input = FacebookAds::ServerSide::normalize_zip input
77
- end
78
-
79
- normalized_input = FacebookAds::ServerSide::sha256Hash normalized_input
80
-
81
- return normalized_input
82
- end
97
+ # Boolean method which checks if a input is already hashed with MD5 or SHA256
98
+ # @param [String] input Input string that is to be validated
99
+ # @return [TrueClass|FalseClass] representing whether the value is hashed
100
+ def self.is_already_hashed?(input)
83
101
 
84
- # Boolean method which checks if a input is already hashed with MD5 or SHA256
85
- # @param [String] input Input string that is to be validated
86
- # @return [TrueClass|FalseClass] representing whether the value is hashed
87
- def self.is_already_hashed?(input)
102
+ # We support Md5 and SHA256, and highly recommend users to use SHA256 for hashing PII keys.
103
+ md5_match = /^[a-f0-9]{32}$/.match(input)
104
+ sha256_match = /^[a-f0-9]{64}$/.match(input)
88
105
 
89
- # We support Md5 and SHA256, and highly recommend users to use SHA256 for hashing PII keys.
90
- md5_match = /^[a-f0-9]{32}$/.match(input)
91
- sha256_match = /^[a-f0-9]{64}$/.match(input)
106
+ if md5_match != nil or sha256_match != nil
107
+ return true
108
+ end
92
109
 
93
- if md5_match != nil or sha256_match != nil
94
- return true
110
+ return false
95
111
  end
96
112
 
97
- return false
98
- end
113
+ # Normalizes the given country code and returns acceptable hashed country ISO code
114
+ def self.normalize_country(country)
99
115
 
100
- # Normalizes the given country code and returns acceptable hashed country ISO code
101
- def self.normalize_country(country)
116
+ # Replace unwanted characters and retain only alpha characters bounded for ISO code.
117
+ country = country.gsub(/[^a-z]/,'')
118
+ iso_country = ISO3166::Country.search(country)
119
+ if iso_country == nil
120
+ raise ArgumentError, "Invalid format for country:'" + country + "'.Please follow ISO 2-letter ISO 3166-1 standard for representing country. eg: us"
121
+ end
102
122
 
103
- # Replace unwanted characters and retain only alpha characters bounded for ISO code.
104
- country = country.gsub(/[^a-z]/,'')
105
- iso_country = ISO3166::Country.search(country)
106
- if iso_country == nil
107
- raise ArgumentError, "Invalid format for country:'" + country + "'.Please follow ISO 2-letter ISO 3166-1 standard for representing country. eg: us"
123
+ return country
108
124
  end
109
125
 
110
- return country
111
- end
126
+ # Normalizes the given city and returns acceptable hashed city value
127
+ def self.normalize_city(city)
112
128
 
113
- # Normalizes the given city and returns acceptable hashed city value
114
- def self.normalize_city(city)
129
+ # Remove commonly occuring characters from city name.
130
+ city = city.gsub(/[0-9.\s\-()]/,'')
115
131
 
116
- # Remove commonly occuring characters from city name.
117
- city = city.gsub(/[0-9.\s\-()]/,'')
132
+ return city
133
+ end
118
134
 
119
- return city
120
- end
135
+ # Normalizes the given currency code and returns acceptable hashed currency ISO code
136
+ def self.normalize_currency(currency)
121
137
 
122
- # Normalizes the given currency code and returns acceptable hashed currency ISO code
123
- def self.normalize_currency(currency)
138
+ # Retain only alpha characters bounded for ISO code.
139
+ currency = currency.gsub(/[^a-z]/,'')
124
140
 
125
- # Retain only alpha characters bounded for ISO code.
126
- currency = currency.gsub(/[^a-z]/,'')
141
+ iso_currency = Money::Currency.find(currency)
142
+ if iso_currency == nil
143
+ raise ArgumentError, "Invalid format for currency:'" + currency + "'.Please follow ISO 3-letter ISO 4217 standard for representing currency. Eg: usd"
144
+ end
127
145
 
128
- iso_currency = Money::Currency.find(currency)
129
- if iso_currency == nil
130
- raise ArgumentError, "Invalid format for currency:'" + currency + "'.Please follow ISO 3-letter ISO 4217 standard for representing currency. Eg: usd"
131
- end
146
+ return currency;
147
+ end
132
148
 
133
- return currency;
134
- end
149
+ # Normalizes the given email and returns acceptable hashed email value
150
+ def self.normalize_email(email)
135
151
 
136
- # Normalizes the given email and returns acceptable hashed email value
137
- def self.normalize_email(email)
152
+ if EMAIL_REGEX.match(email) == nil
153
+ return ArgumentError, "Invalid email format for the passed email:' + email + '.Please check the passed email format."
154
+ end
138
155
 
139
- if EMAIL_REGEX.match(email) == nil
140
- return ArgumentError, "Invalid email format for the passed email:' + email + '.Please check the passed email format."
141
- end
156
+ return email
157
+ end
142
158
 
143
- return email
144
- end
159
+ # Normalizes the given gender and returns acceptable hashed gender value
160
+ def self.normalize_gender(gender)
145
161
 
146
- # Normalizes the given gender and returns acceptable hashed gender value
147
- def self.normalize_gender(gender)
162
+ # Replace extra characters with space, to bound under alpha characters set.
163
+ gender = gender.gsub(/[^a-z]/,'')
148
164
 
149
- # Replace extra characters with space, to bound under alpha characters set.
150
- gender = gender.gsub(/[^a-z]/,'')
165
+ case gender
166
+ when 'female' , 'f'
167
+ gender = 'f'
168
+ when 'male' , 'm'
169
+ gender = 'm'
170
+ else
171
+ return nil
172
+ end
151
173
 
152
- case gender
153
- when 'female' , 'f'
154
- gender = 'f'
155
- when 'male' , 'm'
156
- gender = 'm'
157
- else
158
- return nil
174
+ return gender
159
175
  end
160
176
 
161
- return gender
162
- end
177
+ # Normalizes the given phone and returns acceptable hashed phone value
178
+ def self.normalize_phone(phone)
163
179
 
164
- # Normalizes the given phone and returns acceptable hashed phone value
165
- def self.normalize_phone(phone)
180
+ # Drop the spaces, hyphen and parenthesis from the Phone Number
181
+ normalized_phone = phone.gsub(PHONE_NUMBER_IGNORE_CHAR_SET, '')
166
182
 
167
- # Drop the spaces, hyphen and parenthesis from the Phone Number
168
- normalized_phone = phone.gsub(PHONE_NUMBER_IGNORE_CHAR_SET, '')
183
+ if(is_international_number?(normalized_phone))
184
+ normalized_phone = normalized_phone.gsub(PHONE_NUMBER_DROP_PREFIX_ZEROS, '')
185
+ end
169
186
 
170
- if(FacebookAds::ServerSide::is_international_number?(normalized_phone))
171
- normalized_phone = normalized_phone.gsub(PHONE_NUMBER_DROP_PREFIX_ZEROS, '')
172
- end
187
+ if normalized_phone.length < 7 || normalized_phone.length > 15
188
+ return nil;
189
+ end
173
190
 
174
- if normalized_phone.length < 7 || normalized_phone.length > 15
175
- return nil;
191
+ return normalized_phone
176
192
  end
177
193
 
178
- return normalized_phone
179
- end
194
+ # Normalizes the given state and returns acceptable hashed state value
195
+ def self.normalize_state(state)
196
+ state = state.gsub(/[0-9.\s\-()]/,'')
180
197
 
181
- # Normalizes the given city and returns acceptable hashed city value
182
- def self.normalize_state(state)
183
- state = state.gsub(/[0-9.\s\-()]/,'')
198
+ return state
199
+ end
184
200
 
185
- return state
186
- end
201
+ # Normalizes the given zip and returns acceptable hashed zip code value
202
+ def self.normalize_zip(zip)
187
203
 
188
- # Normalizes the given zip and returns acceptable hashed zip code value
189
- def self.normalize_zip(zip)
204
+ # Remove spaces from the Postal code
205
+ zip = zip.gsub(/[\s]/,'')
190
206
 
191
- # Remove spaces from the Postal code
192
- zip = zip.gsub(/[\s]/,'')
207
+ # If the zip code '-', we retain just the first part alone.
208
+ zip = zip.split('-')[0]
193
209
 
194
- # If the zip code '-', we retain just the first part alone.
195
- zip = zip.split('-')[0]
210
+ if zip.length < 2
211
+ return nil
212
+ end
196
213
 
197
- if zip.length < 2
198
- return nil
214
+ return zip
199
215
  end
200
216
 
201
- return zip
202
- end
217
+ # Boolean method which checks if a given number is represented in international format
218
+ # @param [String] phone_number that has to be tested.
219
+ # @return [TrueClass | FalseClass] boolean value representing if a number is international
220
+ def self.is_international_number?(phone_number)
221
+
222
+ # Drop upto 2 leading 0s from the number
223
+ phone_number = phone_number.gsub(PHONE_NUMBER_DROP_PREFIX_ZEROS, '')
203
224
 
204
- # Boolean method which checks if a given number is represented in international format
205
- # @param [String] phone_number that has to be tested.
206
- # @return [TrueClass | FalseClass] boolean value representing if a number is international
207
- def self.is_international_number?(phone_number)
225
+ if phone_number.start_with?('0')
226
+ return false;
227
+ end
208
228
 
209
- # Drop upto 2 leading 0s from the number
210
- phone_number = phone_number.gsub(PHONE_NUMBER_DROP_PREFIX_ZEROS, '')
229
+ if phone_number.start_with?('1') && US_PHONE_NUMBER_REGEX.match(phone_number) != nil
230
+ return false;
231
+ end
232
+
233
+ if INTL_PHONE_NUMBER_REGEX.match(phone_number) != nil
234
+ return true;
235
+ end
211
236
 
212
- if phone_number.start_with?('0')
213
237
  return false;
214
238
  end
215
239
 
216
- if phone_number.start_with?('1') && US_PHONE_NUMBER_REGEX.match(phone_number) != nil
217
- return false;
240
+ def self.normalize_f5(input)
241
+ input[0, 5]
218
242
  end
219
243
 
220
- if INTL_PHONE_NUMBER_REGEX.match(phone_number) != nil
221
- return true;
244
+ def self.normalize_fi(fi)
245
+ fi[0, 1]
222
246
  end
223
247
 
224
- return false;
225
- end
248
+ def self.normalize_dobd(dobd)
249
+ if dobd.length == 1
250
+ dobd = '0' + dobd
251
+ end
252
+
253
+ dobd_int = dobd.to_i
254
+ if dobd.length > 2 or dobd_int < 1 or dobd_int > 31
255
+ raise ArgumentError.new("Invalid dobd format: '#{dobd}'. Please pass in a valid date of birth day in 'DD' format.")
256
+ end
226
257
 
258
+ return dobd
259
+ end
260
+
261
+ def self.normalize_dobm(dobm)
262
+ if dobm.length == 1
263
+ dobm = '0' + dobm
264
+ end
265
+
266
+ dobm_int = dobm.to_i
267
+ if dobm.length > 2 or dobm_int < 1 or dobm_int > 12
268
+ raise ArgumentError.new("Invalid dobm format: '#{dobm}'. Please pass in a valid date of birth month in 'MM' format.")
269
+ end
270
+
271
+ return dobm
272
+ end
273
+
274
+ def self.normalize_doby(doby)
275
+ unless doby.match("^[0-9]{4}$")
276
+ raise ArgumentError.new("Invalid doby format: '#{doby}'. Please pass in a valid birth year in 'YYYY' format.")
277
+ end
278
+ doby
279
+ end
280
+ end
227
281
  end
228
282
  end