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