class FacebookAds::APIRequest
Attributes
batch_proxy[R]
callback[R]
method[R]
options[R]
params[R]
path[R]
session[R]
Public Class Methods
new(method, path, session: nil, params: nil, options: nil)
click to toggle source
# File lib/facebook_ads/api_request.rb, line 26 def initialize(method, path, session: nil, params: nil, options: nil) @method = method @path = path @session = session @params = params @options = options @batch_proxy = nil end
Public Instance Methods
batch_body()
click to toggle source
For Batch
API
# File lib/facebook_ads/api_request.rb, line 103 def batch_body # TODO Have our own encoders or param flattener? params = Faraday::Utils::ParamsHash[params_without_files] params.to_query(Faraday::FlatParamsEncoder) end
batch_name()
click to toggle source
# File lib/facebook_ads/api_request.rb, line 75 def batch_name @batch_name ||= (options.dig(:batch_args, :name) || generate_batch_name) end
create_response(status, headers, body)
click to toggle source
# File lib/facebook_ads/api_request.rb, line 61 def create_response(status, headers, body) api_response = APIResponse.new(status, headers, body) if status.to_i >= 500 raise ServerError.new(api_response) elsif status.to_i >= 400 raise ClientError.new(api_response) end (callback ? callback[api_response] : api_response).tap do |result| batch_proxy.set_result(result) if batch_proxy end end
current_batch()
click to toggle source
# File lib/facebook_ads/api_request.rb, line 83 def current_batch options.dig(:batch_args, :batch) || Batch.current_batch end
enqueue_to_batch()
click to toggle source
# File lib/facebook_ads/api_request.rb, line 56 def enqueue_to_batch current_batch << self @batch_proxy = BatchProxy.new(self) end
execute(&block)
click to toggle source
Returns either APIResponse
instantly if not within a batch, or a Proxy object to the result if a batch is present.
Examples¶ ↑
Illustrate the behaviour of the method using examples. Indent examples:
api_request APIRequest.new(:get, '123545') do |response| update_attributes(response) end
# File lib/facebook_ads/api_request.rb, line 46 def execute(&block) @callback = block if block is_in_batch? ? enqueue_to_batch : execute_now end
execute_now()
click to toggle source
# File lib/facebook_ads/api_request.rb, line 51 def execute_now faraday_response = session.request(method, path, params) create_response(faraday_response.status, faraday_response.headers, faraday_response.body) end
files()
click to toggle source
For Batch
API
# File lib/facebook_ads/api_request.rb, line 117 def files params.select do |_,v| v.is_a?(UploadIO) end end
generate_batch_name()
click to toggle source
# File lib/facebook_ads/api_request.rb, line 79 def generate_batch_name SecureRandom.hex(4) end
is_in_batch?()
click to toggle source
# File lib/facebook_ads/api_request.rb, line 87 def is_in_batch? !current_batch.nil? end
params_without_files()
click to toggle source
For Batch
API
# File lib/facebook_ads/api_request.rb, line 110 def params_without_files params.reject do |_,v| v.is_a?(UploadIO) end end
to_batch_params()
click to toggle source
# File lib/facebook_ads/api_request.rb, line 91 def to_batch_params { name: batch_name, method: method.to_s.upcase, relative_url: path, body: batch_body, omit_response_on_success: false, attached_files: files.empty? ? nil : files.keys.join(','), }.compact end