module FacebookAds
The primary namespace for this gem.
Constants
- RECOVERABLE_CODES
- REQUEST_HEADERS
- RETRYABLE_ERRORS
- RETRY_LIMIT
Public Class Methods
access_token()
click to toggle source
# File lib/facebook_ads.rb, line 71 def self.access_token @access_token end
access_token=(access_token)
click to toggle source
# File lib/facebook_ads.rb, line 67 def self.access_token=(access_token) @access_token = access_token end
api_version()
click to toggle source
# File lib/facebook_ads.rb, line 63 def self.api_version @api_version ||= '7.0' end
api_version=(api_version)
click to toggle source
# File lib/facebook_ads.rb, line 58 def self.api_version=(api_version) @api_version = api_version @base_uri = nil end
app_secret()
click to toggle source
# File lib/facebook_ads.rb, line 79 def self.app_secret @app_secret end
app_secret=(app_secret)
click to toggle source
# File lib/facebook_ads.rb, line 75 def self.app_secret=(app_secret) @app_secret = app_secret end
appsecret_proof()
click to toggle source
# File lib/facebook_ads.rb, line 83 def self.appsecret_proof OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), @app_secret, @access_token) end
base_uri()
click to toggle source
# File lib/facebook_ads.rb, line 54 def self.base_uri @base_uri ||= "https://graph.facebook.com/v#{api_version}" end
base_uri=(base_uri)
click to toggle source
# File lib/facebook_ads.rb, line 50 def self.base_uri=(base_uri) @base_uri = base_uri end
business_id()
click to toggle source
# File lib/facebook_ads.rb, line 91 def self.business_id @business_id end
business_id=(business_id)
click to toggle source
# File lib/facebook_ads.rb, line 87 def self.business_id=(business_id) @business_id = business_id end
logger()
click to toggle source
# File lib/facebook_ads.rb, line 41 def self.logger unless defined?(@logger) @logger = Logger.new('/dev/null') @logger.level = Logger::Severity::UNKNOWN end @logger end
logger=(logger)
click to toggle source
# File lib/facebook_ads.rb, line 37 def self.logger=(logger) @logger = logger end
stubbornly(retry_limit: RETRY_LIMIT, recoverable_codes: RECOVERABLE_CODES, debug: false) { || ... }
click to toggle source
Stubborn network calls.
# File lib/facebook_ads.rb, line 97 def self.stubbornly(retry_limit: RETRY_LIMIT, recoverable_codes: RECOVERABLE_CODES, debug: false) raise ArgumentError unless block_given? response = nil retry_count = 0 loop do response = yield break rescue *RETRYABLE_ERRORS => e if e.is_a?(RestClient::ExceptionWithResponse) error = begin JSON.parse(e.response) rescue JSON::ParserError nil end code = error&.[]('code') raise e if code && !recoverable_codes.include?(code) end raise e if retry_count >= retry_limit retry_count += 1 wait = (retry_count**2) + 15 + (rand(15) * (retry_count + 1)) puts "retry ##{retry_count} will start in #{wait}s" if debug sleep wait end response end
stubbornly_get(url, retry_limit: RETRY_LIMIT, recoverable_codes: RECOVERABLE_CODES, debug: false)
click to toggle source
# File lib/facebook_ads.rb, line 129 def self.stubbornly_get(url, retry_limit: RETRY_LIMIT, recoverable_codes: RECOVERABLE_CODES, debug: false) stubbornly(retry_limit: retry_limit, recoverable_codes: recoverable_codes, debug: debug) do RestClient.get(url, REQUEST_HEADERS) end end
stubbornly_post(url, payload, retry_limit: RETRY_LIMIT, recoverable_codes: RECOVERABLE_CODES, debug: false)
click to toggle source
# File lib/facebook_ads.rb, line 135 def self.stubbornly_post(url, payload, retry_limit: RETRY_LIMIT, recoverable_codes: RECOVERABLE_CODES, debug: false) stubbornly(retry_limit: retry_limit, recoverable_codes: recoverable_codes, debug: debug) do RestClient.post(url, payload, REQUEST_HEADERS) end end