Module: FacebookAds::ServerSide
- Defined in:
- lib/facebook_ads.rb,
lib/facebook_ads/ad_objects/server_side/util.rb,
lib/facebook_ads/ad_objects/server_side/event.rb,
lib/facebook_ads/ad_objects/server_side/content.rb,
lib/facebook_ads/ad_objects/server_side/user_data.rb,
lib/facebook_ads/ad_objects/server_side/custom_data.rb,
lib/facebook_ads/ad_objects/server_side/event_request.rb,
lib/facebook_ads/ad_objects/server_side/event_response.rb
Defined Under Namespace
Classes: Content, CustomData, Event, EventRequest, EventResponse, UserData
Constant Summary collapse
- PHONE_NUMBER_IGNORE_CHAR_SET =
/[\-\s\(\)]+/
- PHONE_NUMBER_DROP_PREFIX_ZEROS =
/^\+?0{0,2}/
- US_PHONE_NUMBER_REGEX =
/^1\(?\d{3}\)?\d{7}$/
- INTL_PHONE_NUMBER_REGEX =
/^\d{1,4}\(?\d{2,3}\)?\d{4,}$/
- EMAIL_REGEX =
RFC 2822 for email format
/\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
Class Method Summary collapse
-
.is_already_hashed?(input) ⇒ TrueClass|FalseClass
Representing whether the value is hashed.
-
.is_international_number?(phone_number) ⇒ TrueClass | FalseClass
Boolean value representing if a number is international.
-
.normalize(input, field_type) ⇒ String
Normalizes the input string given the field_type.
-
.normalize_city(city) ⇒ Object
Normalizes the given city and returns acceptable hashed city value.
-
.normalize_country(country) ⇒ Object
Normalizes the given country code and returns acceptable hashed country ISO code.
-
.normalize_currency(currency) ⇒ Object
Normalizes the given currency code and returns acceptable hashed currency ISO code.
-
.normalize_email(email) ⇒ Object
Normalizes the given email and returns acceptable hashed email value.
-
.normalize_gender(gender) ⇒ Object
Normalizes the given gender and returns acceptable hashed gender value.
-
.normalize_phone(phone) ⇒ Object
Normalizes the given phone and returns acceptable hashed phone value.
-
.normalize_state(state) ⇒ Object
Normalizes the given city and returns acceptable hashed city value.
-
.normalize_zip(zip) ⇒ Object
Normalizes the given zip and returns acceptable hashed zip code value.
-
.sha256Hash(input) ⇒ String
SHA 256 hash of input string.
Class Method Details
.is_already_hashed?(input) ⇒ TrueClass|FalseClass
Returns representing whether the value is hashed.
87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/facebook_ads/ad_objects/server_side/util.rb', line 87 def self.is_already_hashed?(input) # We support Md5 and SHA256, and highly recommend users to use SHA256 for hashing PII keys. md5_match = /^[a-f0-9]{32}$/.match(input) sha256_match = /^[a-f0-9]{64}$/.match(input) if md5_match != nil or sha256_match != nil return true end return false end |
.is_international_number?(phone_number) ⇒ TrueClass | FalseClass
Returns boolean value representing if a number is international.
207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 |
# File 'lib/facebook_ads/ad_objects/server_side/util.rb', line 207 def self.is_international_number?(phone_number) # Drop upto 2 leading 0s from the number phone_number = phone_number.gsub(PHONE_NUMBER_DROP_PREFIX_ZEROS, '') if phone_number.start_with?('0') return false; end if phone_number.start_with?('1') && US_PHONE_NUMBER_REGEX.match(phone_number) != nil return false; end if INTL_PHONE_NUMBER_REGEX.match(phone_number) != nil return true; end return false; end |
.normalize(input, field_type) ⇒ String
Normalizes the input string given the field_type
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/facebook_ads/ad_objects/server_side/util.rb', line 45 def self.normalize(input, field_type) if input.nil? or field_type.nil? return nil; end input = input.strip.downcase # If the data is already hashed, we by-pass input normalization if FacebookAds::ServerSide::is_already_hashed?(input) == true return input end normalized_input = input; case field_type when 'country' normalized_input = FacebookAds::ServerSide::normalize_country input when 'ct' normalized_input = FacebookAds::ServerSide::normalize_city input when 'currency' return FacebookAds::ServerSide::normalize_currency input when 'em' normalized_input = FacebookAds::ServerSide::normalize_email input when 'ge' normalized_input = FacebookAds::ServerSide::normalize_gender input when 'ph' normalized_input = FacebookAds::ServerSide::normalize_phone input when 'st' normalized_input = FacebookAds::ServerSide::normalize_state input when 'zp' normalized_input = FacebookAds::ServerSide::normalize_zip input end normalized_input = FacebookAds::ServerSide::sha256Hash normalized_input return normalized_input end |
.normalize_city(city) ⇒ Object
Normalizes the given city and returns acceptable hashed city value
114 115 116 117 118 119 120 |
# File 'lib/facebook_ads/ad_objects/server_side/util.rb', line 114 def self.normalize_city(city) # Remove commonly occuring characters from city name. city = city.gsub(/[0-9.\s\-()]/,'') return city end |
.normalize_country(country) ⇒ Object
Normalizes the given country code and returns acceptable hashed country ISO code
101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/facebook_ads/ad_objects/server_side/util.rb', line 101 def self.normalize_country(country) # Replace unwanted characters and retain only alpha characters bounded for ISO code. country = country.gsub(/[^a-z]/,'') iso_country = ISO3166::Country.search(country) if iso_country == nil raise ArgumentError, "Invalid format for country:'" + country + "'.Please follow ISO 2-letter ISO 3166-1 standard for representing country. eg: us" end return country end |
.normalize_currency(currency) ⇒ Object
Normalizes the given currency code and returns acceptable hashed currency ISO code
123 124 125 126 127 128 129 130 131 132 133 134 |
# File 'lib/facebook_ads/ad_objects/server_side/util.rb', line 123 def self.normalize_currency(currency) # Retain only alpha characters bounded for ISO code. currency = currency.gsub(/[^a-z]/,'') iso_currency = Money::Currency.find(currency) if iso_currency == nil raise ArgumentError, "Invalid format for currency:'" + currency + "'.Please follow ISO 3-letter ISO 4217 standard for representing currency. Eg: usd" end return currency; end |
.normalize_email(email) ⇒ Object
Normalizes the given email and returns acceptable hashed email value
137 138 139 140 141 142 143 144 |
# File 'lib/facebook_ads/ad_objects/server_side/util.rb', line 137 def self.normalize_email(email) if EMAIL_REGEX.match(email) == nil return ArgumentError, "Invalid email format for the passed email:' + email + '.Please check the passed email format." end return email end |
.normalize_gender(gender) ⇒ Object
Normalizes the given gender and returns acceptable hashed gender value
147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 |
# File 'lib/facebook_ads/ad_objects/server_side/util.rb', line 147 def self.normalize_gender(gender) # Replace extra characters with space, to bound under alpha characters set. gender = gender.gsub(/[^a-z]/,'') case gender when 'female' , 'f' gender = 'f' when 'male' , 'm' gender = 'm' else return nil end return gender end |
.normalize_phone(phone) ⇒ Object
Normalizes the given phone and returns acceptable hashed phone value
165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 |
# File 'lib/facebook_ads/ad_objects/server_side/util.rb', line 165 def self.normalize_phone(phone) # Drop the spaces, hyphen and parenthesis from the Phone Number normalized_phone = phone.gsub(PHONE_NUMBER_IGNORE_CHAR_SET, '') if(FacebookAds::ServerSide::is_international_number?(normalized_phone)) normalized_phone = normalized_phone.gsub(PHONE_NUMBER_DROP_PREFIX_ZEROS, '') end if normalized_phone.length < 7 || normalized_phone.length > 15 return nil; end return normalized_phone end |
.normalize_state(state) ⇒ Object
Normalizes the given city and returns acceptable hashed city value
182 183 184 185 186 |
# File 'lib/facebook_ads/ad_objects/server_side/util.rb', line 182 def self.normalize_state(state) state = state.gsub(/[0-9.\s\-()]/,'') return state end |
.normalize_zip(zip) ⇒ Object
Normalizes the given zip and returns acceptable hashed zip code value
189 190 191 192 193 194 195 196 197 198 199 200 201 202 |
# File 'lib/facebook_ads/ad_objects/server_side/util.rb', line 189 def self.normalize_zip(zip) # Remove spaces from the Postal code zip = zip.gsub(/[\s]/,'') # If the zip code '-', we retain just the first part alone. zip = zip.split('-')[0] if zip.length < 2 return nil end return zip end |
.sha256Hash(input) ⇒ String
Returns SHA 256 hash of input string.
35 36 37 38 39 |
# File 'lib/facebook_ads/ad_objects/server_side/util.rb', line 35 def self.sha256Hash(input) unless input.nil? Digest::SHA256.hexdigest input end end |