facebookbusiness 0.5.0.2 → 0.5.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.
- checksums.yaml +4 -4
 - data/lib/facebook_ads.rb +7 -1
 - data/lib/facebook_ads/ad_objects/ad_account.rb +0 -6
 - data/lib/facebook_ads/ad_objects/ad_creative.rb +1 -0
 - data/lib/facebook_ads/ad_objects/ad_creative_link_data_image_overlay_spec.rb +2 -0
 - data/lib/facebook_ads/ad_objects/ad_preview.rb +2 -0
 - data/lib/facebook_ads/ad_objects/ad_set.rb +19 -19
 - data/lib/facebook_ads/ad_objects/ad_study.rb +0 -4
 - data/lib/facebook_ads/ad_objects/ads_insights.rb +0 -1
 - data/lib/facebook_ads/ad_objects/album.rb +1 -0
 - data/lib/facebook_ads/ad_objects/business.rb +3 -7
 - data/lib/facebook_ads/ad_objects/business_image.rb +1 -1
 - data/lib/facebook_ads/ad_objects/business_unit.rb +10 -1
 - data/lib/facebook_ads/ad_objects/event.rb +17 -6
 - data/lib/facebook_ads/ad_objects/group.rb +4 -3
 - data/lib/facebook_ads/ad_objects/live_video.rb +1 -0
 - data/lib/facebook_ads/ad_objects/null_node.rb +36 -0
 - data/lib/facebook_ads/ad_objects/page.rb +13 -6
 - data/lib/facebook_ads/ad_objects/product_catalog.rb +1 -0
 - data/lib/facebook_ads/ad_objects/product_feed.rb +8 -0
 - data/lib/facebook_ads/ad_objects/product_feed_schedule.rb +1 -3
 - data/lib/facebook_ads/ad_objects/reach_frequency_prediction.rb +0 -1
 - data/lib/facebook_ads/ad_objects/server_side/content.rb +128 -0
 - data/lib/facebook_ads/ad_objects/server_side/custom_data.rb +313 -0
 - data/lib/facebook_ads/ad_objects/server_side/event.rb +236 -0
 - data/lib/facebook_ads/ad_objects/server_side/event_request.rb +158 -0
 - data/lib/facebook_ads/ad_objects/server_side/event_response.rb +106 -0
 - data/lib/facebook_ads/ad_objects/server_side/user_data.rb +396 -0
 - data/lib/facebook_ads/ad_objects/server_side/util.rb +225 -0
 - data/lib/facebook_ads/ad_objects/user.rb +14 -0
 - data/lib/facebook_ads/api_response.rb +4 -0
 - data/lib/facebook_ads/errors.rb +6 -1
 - data/lib/facebook_ads/version.rb +1 -1
 - metadata +10 -3
 - data/lib/facebook_ads/ad_objects/business_project.rb +0 -86
 
| 
         @@ -0,0 +1,225 @@ 
     | 
|
| 
      
 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 
     | 
    
         
            +
            require 'digest'
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            module FacebookAds
         
     | 
| 
      
 22 
     | 
    
         
            +
            	module ServerSide
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            		PHONE_NUMBER_IGNORE_CHAR_SET = /[\-\s\(\)]+/
         
     | 
| 
      
 25 
     | 
    
         
            +
            		PHONE_NUMBER_DROP_PREFIX_ZEROS = /^\+?0{0,2}/
         
     | 
| 
      
 26 
     | 
    
         
            +
            		US_PHONE_NUMBER_REGEX = /^1\(?\d{3}\)?\d{7}$/
         
     | 
| 
      
 27 
     | 
    
         
            +
            		INTL_PHONE_NUMBER_REGEX = /^\d{1,4}\(?\d{2,3}\)?\d{4,}$/
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            		# RFC 2822 for email format
         
     | 
| 
      
 30 
     | 
    
         
            +
            		EMAIL_REGEX = /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
            		# @return [String] SHA 256 hash of input string
         
     | 
| 
      
 33 
     | 
    
         
            +
            		def self.sha256Hash(input)
         
     | 
| 
      
 34 
     | 
    
         
            +
            			unless input.nil?
         
     | 
| 
      
 35 
     | 
    
         
            +
            				Digest::SHA256.hexdigest input
         
     | 
| 
      
 36 
     | 
    
         
            +
            			end
         
     | 
| 
      
 37 
     | 
    
         
            +
            		end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
            		# Normalizes the input string given the field_type
         
     | 
| 
      
 40 
     | 
    
         
            +
            		# @param [String] input Input string that needs to be normalized
         
     | 
| 
      
 41 
     | 
    
         
            +
            		# @param [String] field_type Type/Key for the value provided
         
     | 
| 
      
 42 
     | 
    
         
            +
            		# @return [String] Normalized value for the input and field_type.
         
     | 
| 
      
 43 
     | 
    
         
            +
            		def self.normalize(input, field_type)
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
            			if input.nil? or field_type.nil?
         
     | 
| 
      
 46 
     | 
    
         
            +
            				return nil;
         
     | 
| 
      
 47 
     | 
    
         
            +
            			end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
            			input = input.strip.downcase
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
            			# If the data is already hashed, we by-pass input normalization
         
     | 
| 
      
 52 
     | 
    
         
            +
            			if FacebookAds::ServerSide::is_already_hashed?(input) == true
         
     | 
| 
      
 53 
     | 
    
         
            +
            				return input
         
     | 
| 
      
 54 
     | 
    
         
            +
                  end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
            			normalized_input = input;
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
            			case field_type
         
     | 
| 
      
 59 
     | 
    
         
            +
            			when 'country'
         
     | 
| 
      
 60 
     | 
    
         
            +
            				normalized_input = FacebookAds::ServerSide::normalize_country input
         
     | 
| 
      
 61 
     | 
    
         
            +
            			when 'ct'
         
     | 
| 
      
 62 
     | 
    
         
            +
                    normalized_input = FacebookAds::ServerSide::normalize_city input
         
     | 
| 
      
 63 
     | 
    
         
            +
                  when 'currency'
         
     | 
| 
      
 64 
     | 
    
         
            +
                    return FacebookAds::ServerSide::normalize_currency input
         
     | 
| 
      
 65 
     | 
    
         
            +
            			when 'em'
         
     | 
| 
      
 66 
     | 
    
         
            +
            				normalized_input = FacebookAds::ServerSide::normalize_email input
         
     | 
| 
      
 67 
     | 
    
         
            +
            			when 'ge'
         
     | 
| 
      
 68 
     | 
    
         
            +
            				normalized_input = FacebookAds::ServerSide::normalize_gender input
         
     | 
| 
      
 69 
     | 
    
         
            +
            			when 'ph'
         
     | 
| 
      
 70 
     | 
    
         
            +
            				normalized_input = FacebookAds::ServerSide::normalize_phone input
         
     | 
| 
      
 71 
     | 
    
         
            +
            			when 'st'
         
     | 
| 
      
 72 
     | 
    
         
            +
            				normalized_input = FacebookAds::ServerSide::normalize_state input
         
     | 
| 
      
 73 
     | 
    
         
            +
            			when 'zp'
         
     | 
| 
      
 74 
     | 
    
         
            +
            				normalized_input = FacebookAds::ServerSide::normalize_zip input
         
     | 
| 
      
 75 
     | 
    
         
            +
                  end
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
                  normalized_input = FacebookAds::ServerSide::sha256Hash normalized_input
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
            			return normalized_input
         
     | 
| 
      
 80 
     | 
    
         
            +
            		end
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
                # Boolean method which checks if a input is already hashed with MD5 or SHA256
         
     | 
| 
      
 83 
     | 
    
         
            +
            		# @param [String] input Input string that is to be validated
         
     | 
| 
      
 84 
     | 
    
         
            +
            		# @return [TrueClass|FalseClass] representing whether the value is hashed
         
     | 
| 
      
 85 
     | 
    
         
            +
                def self.is_already_hashed?(input)
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
            			# We support Md5 and SHA256, and highly recommend users to use SHA256 for hashing PII keys.
         
     | 
| 
      
 88 
     | 
    
         
            +
            			md5_match = /^[a-f0-9]{32}$/.match(input)
         
     | 
| 
      
 89 
     | 
    
         
            +
                  sha256_match = /^[a-f0-9]{64}$/.match(input)
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
      
 91 
     | 
    
         
            +
            			if md5_match != nil or sha256_match != nil
         
     | 
| 
      
 92 
     | 
    
         
            +
            				return true
         
     | 
| 
      
 93 
     | 
    
         
            +
            			end
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
            			return false
         
     | 
| 
      
 96 
     | 
    
         
            +
            		end
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
      
 98 
     | 
    
         
            +
            		# Normalizes the given country code and returns acceptable hashed country ISO code
         
     | 
| 
      
 99 
     | 
    
         
            +
            		def self.normalize_country(country)
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
            			# Replace unwanted characters and retain only alpha characters bounded for ISO code.
         
     | 
| 
      
 102 
     | 
    
         
            +
            			country = country.gsub(/[^a-z]/,'')
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
            			if country.length != 2
         
     | 
| 
      
 105 
     | 
    
         
            +
            				raise ArgumentError, "Invalid format for country:'" + country + "'.Please follow ISO 2-letter ISO 3166-1 standard for representing country. eg: us"
         
     | 
| 
      
 106 
     | 
    
         
            +
            			end
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
      
 108 
     | 
    
         
            +
            			return  country
         
     | 
| 
      
 109 
     | 
    
         
            +
            		end
         
     | 
| 
      
 110 
     | 
    
         
            +
             
     | 
| 
      
 111 
     | 
    
         
            +
            		# Normalizes the given city and returns acceptable hashed city value
         
     | 
| 
      
 112 
     | 
    
         
            +
                def self.normalize_city(city)
         
     | 
| 
      
 113 
     | 
    
         
            +
             
     | 
| 
      
 114 
     | 
    
         
            +
                  # Remove commonly occuring characters from city name.
         
     | 
| 
      
 115 
     | 
    
         
            +
            			city = city.gsub(/[0-9.\s\-()]/,'')
         
     | 
| 
      
 116 
     | 
    
         
            +
             
     | 
| 
      
 117 
     | 
    
         
            +
            			return city
         
     | 
| 
      
 118 
     | 
    
         
            +
            		end
         
     | 
| 
      
 119 
     | 
    
         
            +
             
     | 
| 
      
 120 
     | 
    
         
            +
            		# Normalizes the given currency code and returns acceptable hashed currency ISO code
         
     | 
| 
      
 121 
     | 
    
         
            +
            		def self.normalize_currency(currency)
         
     | 
| 
      
 122 
     | 
    
         
            +
             
     | 
| 
      
 123 
     | 
    
         
            +
            			# Retain only alpha characters bounded for ISO code.
         
     | 
| 
      
 124 
     | 
    
         
            +
            			currency = currency.gsub(/[^a-z]/,'')
         
     | 
| 
      
 125 
     | 
    
         
            +
             
     | 
| 
      
 126 
     | 
    
         
            +
            			if currency.length != 3
         
     | 
| 
      
 127 
     | 
    
         
            +
            				raise ArgumentError, "Invalid format for currency:'" + currency + "'.Please follow ISO 3-letter ISO 4217 standard for representing currency. Eg: usd"
         
     | 
| 
      
 128 
     | 
    
         
            +
            			end
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
      
 130 
     | 
    
         
            +
            			return currency;
         
     | 
| 
      
 131 
     | 
    
         
            +
            		end
         
     | 
| 
      
 132 
     | 
    
         
            +
             
     | 
| 
      
 133 
     | 
    
         
            +
            		# Normalizes the given email and returns acceptable hashed email value
         
     | 
| 
      
 134 
     | 
    
         
            +
            		def self.normalize_email(email)
         
     | 
| 
      
 135 
     | 
    
         
            +
             
     | 
| 
      
 136 
     | 
    
         
            +
            			if EMAIL_REGEX.match(email) == nil
         
     | 
| 
      
 137 
     | 
    
         
            +
            				return ArgumentError, "Invalid email format for the passed email:' + email + '.Please check the passed email format."
         
     | 
| 
      
 138 
     | 
    
         
            +
            			end
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
      
 140 
     | 
    
         
            +
            			return email
         
     | 
| 
      
 141 
     | 
    
         
            +
            		end
         
     | 
| 
      
 142 
     | 
    
         
            +
             
     | 
| 
      
 143 
     | 
    
         
            +
            		# Normalizes the given gender and returns acceptable hashed gender value
         
     | 
| 
      
 144 
     | 
    
         
            +
                def self.normalize_gender(gender)
         
     | 
| 
      
 145 
     | 
    
         
            +
             
     | 
| 
      
 146 
     | 
    
         
            +
                  # Replace extra characters with space, to bound under alpha characters set.
         
     | 
| 
      
 147 
     | 
    
         
            +
                  gender = gender.gsub(/[^a-z]/,'')
         
     | 
| 
      
 148 
     | 
    
         
            +
             
     | 
| 
      
 149 
     | 
    
         
            +
            			case gender
         
     | 
| 
      
 150 
     | 
    
         
            +
            			when 'female' , 'f'
         
     | 
| 
      
 151 
     | 
    
         
            +
            				gender = 'f'
         
     | 
| 
      
 152 
     | 
    
         
            +
            			when 'male' , 'm'
         
     | 
| 
      
 153 
     | 
    
         
            +
            				gender = 'm'
         
     | 
| 
      
 154 
     | 
    
         
            +
            			else
         
     | 
| 
      
 155 
     | 
    
         
            +
            				return nil
         
     | 
| 
      
 156 
     | 
    
         
            +
            			end
         
     | 
| 
      
 157 
     | 
    
         
            +
             
     | 
| 
      
 158 
     | 
    
         
            +
            			return gender
         
     | 
| 
      
 159 
     | 
    
         
            +
            		end
         
     | 
| 
      
 160 
     | 
    
         
            +
             
     | 
| 
      
 161 
     | 
    
         
            +
            		# Normalizes the given phone and returns acceptable hashed phone value
         
     | 
| 
      
 162 
     | 
    
         
            +
            		def self.normalize_phone(phone)
         
     | 
| 
      
 163 
     | 
    
         
            +
             
     | 
| 
      
 164 
     | 
    
         
            +
            			# Drop the spaces, hyphen and parenthesis from the Phone Number
         
     | 
| 
      
 165 
     | 
    
         
            +
            			normalized_phone = phone.gsub(PHONE_NUMBER_IGNORE_CHAR_SET, '')
         
     | 
| 
      
 166 
     | 
    
         
            +
             
     | 
| 
      
 167 
     | 
    
         
            +
            			if(FacebookAds::ServerSide::is_international_number?(normalized_phone))
         
     | 
| 
      
 168 
     | 
    
         
            +
            				normalized_phone = normalized_phone.gsub(PHONE_NUMBER_DROP_PREFIX_ZEROS, '')
         
     | 
| 
      
 169 
     | 
    
         
            +
            			end
         
     | 
| 
      
 170 
     | 
    
         
            +
             
     | 
| 
      
 171 
     | 
    
         
            +
            			if normalized_phone.length < 7 || normalized_phone.length > 15
         
     | 
| 
      
 172 
     | 
    
         
            +
            				return nil;
         
     | 
| 
      
 173 
     | 
    
         
            +
            			end
         
     | 
| 
      
 174 
     | 
    
         
            +
             
     | 
| 
      
 175 
     | 
    
         
            +
            			return normalized_phone
         
     | 
| 
      
 176 
     | 
    
         
            +
            		end
         
     | 
| 
      
 177 
     | 
    
         
            +
             
     | 
| 
      
 178 
     | 
    
         
            +
            		# Normalizes the given city and returns acceptable hashed city value
         
     | 
| 
      
 179 
     | 
    
         
            +
            		def self.normalize_state(state)
         
     | 
| 
      
 180 
     | 
    
         
            +
            			state = state.gsub(/[0-9.\s\-()]/,'')
         
     | 
| 
      
 181 
     | 
    
         
            +
             
     | 
| 
      
 182 
     | 
    
         
            +
            			return state
         
     | 
| 
      
 183 
     | 
    
         
            +
            		end
         
     | 
| 
      
 184 
     | 
    
         
            +
             
     | 
| 
      
 185 
     | 
    
         
            +
            		# Normalizes the given zip and returns acceptable hashed zip code value
         
     | 
| 
      
 186 
     | 
    
         
            +
            		def self.normalize_zip(zip)
         
     | 
| 
      
 187 
     | 
    
         
            +
             
     | 
| 
      
 188 
     | 
    
         
            +
            			# Remove spaces from the Postal code
         
     | 
| 
      
 189 
     | 
    
         
            +
            			zip = zip.gsub(/[\s]/,'')
         
     | 
| 
      
 190 
     | 
    
         
            +
             
     | 
| 
      
 191 
     | 
    
         
            +
                  # If the zip code '-', we retain just the first part alone.
         
     | 
| 
      
 192 
     | 
    
         
            +
            			zip = zip.split('-')[0]
         
     | 
| 
      
 193 
     | 
    
         
            +
             
     | 
| 
      
 194 
     | 
    
         
            +
            			if zip.length < 2
         
     | 
| 
      
 195 
     | 
    
         
            +
            				return nil
         
     | 
| 
      
 196 
     | 
    
         
            +
            			end
         
     | 
| 
      
 197 
     | 
    
         
            +
             
     | 
| 
      
 198 
     | 
    
         
            +
            			return zip
         
     | 
| 
      
 199 
     | 
    
         
            +
            		end
         
     | 
| 
      
 200 
     | 
    
         
            +
             
     | 
| 
      
 201 
     | 
    
         
            +
                # Boolean method which checks if a given number is represented in international format
         
     | 
| 
      
 202 
     | 
    
         
            +
                # @param [String] phone_number that has to be tested.
         
     | 
| 
      
 203 
     | 
    
         
            +
            		# @return [TrueClass | FalseClass] boolean value representing if a number is international
         
     | 
| 
      
 204 
     | 
    
         
            +
            		def self.is_international_number?(phone_number)
         
     | 
| 
      
 205 
     | 
    
         
            +
             
     | 
| 
      
 206 
     | 
    
         
            +
            			# Drop upto 2 leading 0s from the number
         
     | 
| 
      
 207 
     | 
    
         
            +
            			phone_number = phone_number.gsub(PHONE_NUMBER_DROP_PREFIX_ZEROS, '')
         
     | 
| 
      
 208 
     | 
    
         
            +
             
     | 
| 
      
 209 
     | 
    
         
            +
            			if phone_number.start_with?('0')
         
     | 
| 
      
 210 
     | 
    
         
            +
            				return false;
         
     | 
| 
      
 211 
     | 
    
         
            +
            			end
         
     | 
| 
      
 212 
     | 
    
         
            +
             
     | 
| 
      
 213 
     | 
    
         
            +
            			if phone_number.start_with?('1') && US_PHONE_NUMBER_REGEX.match(phone_number) != nil
         
     | 
| 
      
 214 
     | 
    
         
            +
            				return false;
         
     | 
| 
      
 215 
     | 
    
         
            +
            			end
         
     | 
| 
      
 216 
     | 
    
         
            +
             
     | 
| 
      
 217 
     | 
    
         
            +
            			if INTL_PHONE_NUMBER_REGEX.match(phone_number) != nil
         
     | 
| 
      
 218 
     | 
    
         
            +
            				return true;
         
     | 
| 
      
 219 
     | 
    
         
            +
            			end
         
     | 
| 
      
 220 
     | 
    
         
            +
             
     | 
| 
      
 221 
     | 
    
         
            +
            			return false;
         
     | 
| 
      
 222 
     | 
    
         
            +
            		end
         
     | 
| 
      
 223 
     | 
    
         
            +
             
     | 
| 
      
 224 
     | 
    
         
            +
            	end
         
     | 
| 
      
 225 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -79,6 +79,7 @@ module FacebookAds 
     | 
|
| 
       79 
79 
     | 
    
         
             
                  "MSN",
         
     | 
| 
       80 
80 
     | 
    
         
             
                  "MYSPACE",
         
     | 
| 
       81 
81 
     | 
    
         
             
                  "NATEON",
         
     | 
| 
      
 82 
     | 
    
         
            +
                  "OCULUS",
         
     | 
| 
       82 
83 
     | 
    
         
             
                  "OK",
         
     | 
| 
       83 
84 
     | 
    
         
             
                  "ORKUT",
         
     | 
| 
       84 
85 
     | 
    
         
             
                  "OTHERS",
         
     | 
| 
         @@ -126,6 +127,7 @@ module FacebookAds 
     | 
|
| 
       126 
127 
     | 
    
         
             
                field :installed, 'bool'
         
     | 
| 
       127 
128 
     | 
    
         
             
                field :interested_in, { list: 'string' }
         
     | 
| 
       128 
129 
     | 
    
         
             
                field :is_famedeeplinkinguser, 'bool'
         
     | 
| 
      
 130 
     | 
    
         
            +
                field :is_guest_user, 'bool'
         
     | 
| 
       129 
131 
     | 
    
         
             
                field :is_shared_login, 'bool'
         
     | 
| 
       130 
132 
     | 
    
         
             
                field :is_verified, 'bool'
         
     | 
| 
       131 
133 
     | 
    
         
             
                field :languages, { list: 'Experience' }
         
     | 
| 
         @@ -305,6 +307,17 @@ module FacebookAds 
     | 
|
| 
       305 
307 
     | 
    
         
             
                    api.has_param :business, 'string'
         
     | 
| 
       306 
308 
     | 
    
         
             
                  end
         
     | 
| 
       307 
309 
     | 
    
         
             
                  edge.get 'Business'
         
     | 
| 
      
 310 
     | 
    
         
            +
                  edge.post 'Business' do |api|
         
     | 
| 
      
 311 
     | 
    
         
            +
                    api.has_param :email, 'string'
         
     | 
| 
      
 312 
     | 
    
         
            +
                    api.has_param :name, 'string'
         
     | 
| 
      
 313 
     | 
    
         
            +
                    api.has_param :primary_page, 'string'
         
     | 
| 
      
 314 
     | 
    
         
            +
                    api.has_param :sales_rep_email, 'string'
         
     | 
| 
      
 315 
     | 
    
         
            +
                    api.has_param :survey_business_type, { enum: -> { Business::SURVEY_BUSINESS_TYPE }}
         
     | 
| 
      
 316 
     | 
    
         
            +
                    api.has_param :survey_num_assets, 'int'
         
     | 
| 
      
 317 
     | 
    
         
            +
                    api.has_param :survey_num_people, 'int'
         
     | 
| 
      
 318 
     | 
    
         
            +
                    api.has_param :timezone_id, 'int'
         
     | 
| 
      
 319 
     | 
    
         
            +
                    api.has_param :vertical, { enum: -> { Business::VERTICAL }}
         
     | 
| 
      
 320 
     | 
    
         
            +
                  end
         
     | 
| 
       308 
321 
     | 
    
         
             
                end
         
     | 
| 
       309 
322 
     | 
    
         | 
| 
       310 
323 
     | 
    
         
             
                has_edge :conversations do |edge|
         
     | 
| 
         @@ -722,6 +735,7 @@ module FacebookAds 
     | 
|
| 
       722 
735 
     | 
    
         
             
                    api.has_param :ios_bundle_id, 'string'
         
     | 
| 
       723 
736 
     | 
    
         
             
                    api.has_param :is_explicit_location, 'bool'
         
     | 
| 
       724 
737 
     | 
    
         
             
                    api.has_param :is_explicit_place, 'bool'
         
     | 
| 
      
 738 
     | 
    
         
            +
                    api.has_param :is_visual_search, 'bool'
         
     | 
| 
       725 
739 
     | 
    
         
             
                    api.has_param :manual_privacy, 'bool'
         
     | 
| 
       726 
740 
     | 
    
         
             
                    api.has_param :message, 'string'
         
     | 
| 
       727 
741 
     | 
    
         
             
                    api.has_param :name, 'string'
         
     | 
    
        data/lib/facebook_ads/errors.rb
    CHANGED
    
    | 
         @@ -24,7 +24,7 @@ module FacebookAds 
     | 
|
| 
       24 
24 
     | 
    
         | 
| 
       25 
25 
     | 
    
         
             
              class APIError < Error
         
     | 
| 
       26 
26 
     | 
    
         
             
                ERROR_ATTRS = [
         
     | 
| 
       27 
     | 
    
         
            -
                  :fb_message, :type, :code,
         
     | 
| 
      
 27 
     | 
    
         
            +
                  :headers, :fb_message, :type, :code,
         
     | 
| 
       28 
28 
     | 
    
         
             
                  :error_subcode, :is_transient, :error_user_title,
         
     | 
| 
       29 
29 
     | 
    
         
             
                  :error_user_msg, :fbtrace_id,
         
     | 
| 
       30 
30 
     | 
    
         
             
                ]
         
     | 
| 
         @@ -32,6 +32,7 @@ module FacebookAds 
     | 
|
| 
       32 
32 
     | 
    
         
             
                attr_accessor *ERROR_ATTRS
         
     | 
| 
       33 
33 
     | 
    
         | 
| 
       34 
34 
     | 
    
         
             
                def initialize(api_response)
         
     | 
| 
      
 35 
     | 
    
         
            +
                  send("headers=", api_response.headers)
         
     | 
| 
       35 
36 
     | 
    
         
             
                  error_obj = api_response.result
         
     | 
| 
       36 
37 
     | 
    
         
             
                  @api_response = api_response
         
     | 
| 
       37 
38 
     | 
    
         | 
| 
         @@ -47,6 +48,10 @@ module FacebookAds 
     | 
|
| 
       47 
48 
     | 
    
         
             
                    super(error_obj)
         
     | 
| 
       48 
49 
     | 
    
         
             
                  end
         
     | 
| 
       49 
50 
     | 
    
         
             
                end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                def getHeaders
         
     | 
| 
      
 53 
     | 
    
         
            +
                  self.headers
         
     | 
| 
      
 54 
     | 
    
         
            +
                end
         
     | 
| 
       50 
55 
     | 
    
         
             
              end
         
     | 
| 
       51 
56 
     | 
    
         | 
| 
       52 
57 
     | 
    
         
             
              class ServerError < APIError; end
         
     | 
    
        data/lib/facebook_ads/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: facebookbusiness
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.5.0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.5.0.3
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Facebook
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2019- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2019-12-11 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: faraday
         
     | 
| 
         @@ -344,7 +344,6 @@ files: 
     | 
|
| 
       344 
344 
     | 
    
         
             
            - lib/facebook_ads/ad_objects/business_owned_object_on_behalf_of_request.rb
         
     | 
| 
       345 
345 
     | 
    
         
             
            - lib/facebook_ads/ad_objects/business_page_request.rb
         
     | 
| 
       346 
346 
     | 
    
         
             
            - lib/facebook_ads/ad_objects/business_pixel_tos.rb
         
     | 
| 
       347 
     | 
    
         
            -
            - lib/facebook_ads/ad_objects/business_project.rb
         
     | 
| 
       348 
347 
     | 
    
         
             
            - lib/facebook_ads/ad_objects/business_role_request.rb
         
     | 
| 
       349 
348 
     | 
    
         
             
            - lib/facebook_ads/ad_objects/business_unit.rb
         
     | 
| 
       350 
349 
     | 
    
         
             
            - lib/facebook_ads/ad_objects/business_user.rb
         
     | 
| 
         @@ -464,6 +463,7 @@ files: 
     | 
|
| 
       464 
463 
     | 
    
         
             
            - lib/facebook_ads/ad_objects/native_offer.rb
         
     | 
| 
       465 
464 
     | 
    
         
             
            - lib/facebook_ads/ad_objects/native_offer_discount.rb
         
     | 
| 
       466 
465 
     | 
    
         
             
            - lib/facebook_ads/ad_objects/native_offer_view.rb
         
     | 
| 
      
 466 
     | 
    
         
            +
            - lib/facebook_ads/ad_objects/null_node.rb
         
     | 
| 
       467 
467 
     | 
    
         
             
            - lib/facebook_ads/ad_objects/offline_conversion_data_set.rb
         
     | 
| 
       468 
468 
     | 
    
         
             
            - lib/facebook_ads/ad_objects/offline_terms_of_service.rb
         
     | 
| 
       469 
469 
     | 
    
         
             
            - lib/facebook_ads/ad_objects/offsite_pixel.rb
         
     | 
| 
         @@ -549,6 +549,13 @@ files: 
     | 
|
| 
       549 
549 
     | 
    
         
             
            - lib/facebook_ads/ad_objects/saved_audience.rb
         
     | 
| 
       550 
550 
     | 
    
         
             
            - lib/facebook_ads/ad_objects/saved_message_response.rb
         
     | 
| 
       551 
551 
     | 
    
         
             
            - lib/facebook_ads/ad_objects/security_settings.rb
         
     | 
| 
      
 552 
     | 
    
         
            +
            - lib/facebook_ads/ad_objects/server_side/content.rb
         
     | 
| 
      
 553 
     | 
    
         
            +
            - lib/facebook_ads/ad_objects/server_side/custom_data.rb
         
     | 
| 
      
 554 
     | 
    
         
            +
            - lib/facebook_ads/ad_objects/server_side/event.rb
         
     | 
| 
      
 555 
     | 
    
         
            +
            - lib/facebook_ads/ad_objects/server_side/event_request.rb
         
     | 
| 
      
 556 
     | 
    
         
            +
            - lib/facebook_ads/ad_objects/server_side/event_response.rb
         
     | 
| 
      
 557 
     | 
    
         
            +
            - lib/facebook_ads/ad_objects/server_side/user_data.rb
         
     | 
| 
      
 558 
     | 
    
         
            +
            - lib/facebook_ads/ad_objects/server_side/util.rb
         
     | 
| 
       552 
559 
     | 
    
         
             
            - lib/facebook_ads/ad_objects/split_test_config.rb
         
     | 
| 
       553 
560 
     | 
    
         
             
            - lib/facebook_ads/ad_objects/split_test_winner.rb
         
     | 
| 
       554 
561 
     | 
    
         
             
            - lib/facebook_ads/ad_objects/store_catalog_settings.rb
         
     | 
| 
         @@ -1,86 +0,0 @@ 
     | 
|
| 
       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 
     | 
    
         
            -
            # FB:AUTOGEN
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
            module FacebookAds
         
     | 
| 
       22 
     | 
    
         
            -
              # This class is auto-generated.
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
              # For any issues or feature requests related to this class, please let us know
         
     | 
| 
       25 
     | 
    
         
            -
              # on github and we'll fix in our codegen framework. We'll not be able to accept
         
     | 
| 
       26 
     | 
    
         
            -
              # pull request for this class.
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
              class BusinessProject < AdObject
         
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
                field :business, 'Business'
         
     | 
| 
       31 
     | 
    
         
            -
                field :created_time, 'datetime'
         
     | 
| 
       32 
     | 
    
         
            -
                field :creator, 'object'
         
     | 
| 
       33 
     | 
    
         
            -
                field :id, 'string'
         
     | 
| 
       34 
     | 
    
         
            -
                field :name, 'string'
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
                has_edge :adaccounts do |edge|
         
     | 
| 
       37 
     | 
    
         
            -
                  edge.delete do |api|
         
     | 
| 
       38 
     | 
    
         
            -
                    api.has_param :adaccount_id, 'string'
         
     | 
| 
       39 
     | 
    
         
            -
                  end
         
     | 
| 
       40 
     | 
    
         
            -
                  edge.get 'AdAccount'
         
     | 
| 
       41 
     | 
    
         
            -
                  edge.post 'BusinessProject' do |api|
         
     | 
| 
       42 
     | 
    
         
            -
                    api.has_param :adaccount_id, 'string'
         
     | 
| 
       43 
     | 
    
         
            -
                  end
         
     | 
| 
       44 
     | 
    
         
            -
                end
         
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
                has_edge :apps do |edge|
         
     | 
| 
       47 
     | 
    
         
            -
                  edge.delete do |api|
         
     | 
| 
       48 
     | 
    
         
            -
                    api.has_param :app_id, 'string'
         
     | 
| 
       49 
     | 
    
         
            -
                  end
         
     | 
| 
       50 
     | 
    
         
            -
                  edge.get 'Application'
         
     | 
| 
       51 
     | 
    
         
            -
                  edge.post 'BusinessProject' do |api|
         
     | 
| 
       52 
     | 
    
         
            -
                    api.has_param :app_id, 'string'
         
     | 
| 
       53 
     | 
    
         
            -
                  end
         
     | 
| 
       54 
     | 
    
         
            -
                end
         
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
                has_edge :assets do |edge|
         
     | 
| 
       57 
     | 
    
         
            -
                  edge.delete do |api|
         
     | 
| 
       58 
     | 
    
         
            -
                    api.has_param :asset_id, 'string'
         
     | 
| 
       59 
     | 
    
         
            -
                  end
         
     | 
| 
       60 
     | 
    
         
            -
                  edge.post 'BusinessProject' do |api|
         
     | 
| 
       61 
     | 
    
         
            -
                    api.has_param :asset_id, 'string'
         
     | 
| 
       62 
     | 
    
         
            -
                  end
         
     | 
| 
       63 
     | 
    
         
            -
                end
         
     | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
       65 
     | 
    
         
            -
                has_edge :pages do |edge|
         
     | 
| 
       66 
     | 
    
         
            -
                  edge.delete do |api|
         
     | 
| 
       67 
     | 
    
         
            -
                    api.has_param :page_id, 'int'
         
     | 
| 
       68 
     | 
    
         
            -
                  end
         
     | 
| 
       69 
     | 
    
         
            -
                  edge.get 'Page'
         
     | 
| 
       70 
     | 
    
         
            -
                  edge.post 'BusinessProject' do |api|
         
     | 
| 
       71 
     | 
    
         
            -
                    api.has_param :page_id, 'int'
         
     | 
| 
       72 
     | 
    
         
            -
                  end
         
     | 
| 
       73 
     | 
    
         
            -
                end
         
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
       75 
     | 
    
         
            -
                has_edge :product_catalogs do |edge|
         
     | 
| 
       76 
     | 
    
         
            -
                  edge.delete do |api|
         
     | 
| 
       77 
     | 
    
         
            -
                    api.has_param :product_catalog_id, 'string'
         
     | 
| 
       78 
     | 
    
         
            -
                  end
         
     | 
| 
       79 
     | 
    
         
            -
                  edge.get 'ProductCatalog'
         
     | 
| 
       80 
     | 
    
         
            -
                  edge.post 'BusinessProject' do |api|
         
     | 
| 
       81 
     | 
    
         
            -
                    api.has_param :product_catalog_id, 'string'
         
     | 
| 
       82 
     | 
    
         
            -
                  end
         
     | 
| 
       83 
     | 
    
         
            -
                end
         
     | 
| 
       84 
     | 
    
         
            -
             
     | 
| 
       85 
     | 
    
         
            -
              end
         
     | 
| 
       86 
     | 
    
         
            -
            end
         
     |