| Class | Facebooker::Service |
| In: |
lib/facebooker/service.rb
|
| Parent: | Object |
# File lib/facebooker/service.rb, line 11 def self.active_service unless @active_service if Facebooker.use_curl? @active_service = Facebooker::Service::CurlService.new else @active_service = Facebooker::Service::NetHttpService.new end end @active_service end
# File lib/facebooker/service.rb, line 22 def self.active_service=(new_service) @active_service = new_service end
# File lib/facebooker/service.rb, line 4 def initialize(api_base, api_path, api_key) @api_base = api_base @api_path = api_path @api_key = api_key end
Process all calls to Facebook in th block asynchronously nil will be returned from all calls and no results will be parsed. This is mostly useful for sending large numbers of notifications or sending a lot of profile updates
for example:
User.find_in_batches(:batch_size => 200) do |users|
Faceboooker::Service.with_async do
users.each {|u| u.facebook_session.send_notification(...)}
end
end
Note: You shouldn‘t make more than about 200 api calls in a with_async block or you might exhaust all filehandles.
This functionality require the typhoeus gem
# File lib/facebooker/service.rb, line 53 def self.with_async(&proc) block_with_process = Proc.new { proc.call ; process_async} with_service(Facebooker::Service::TyphoeusMultiService.new,&block_with_process) end
# File lib/facebooker/service.rb, line 26 def self.with_service(service) old_service = active_service self.active_service = service begin yield ensure self.active_service = old_service end end
TODO: support ssl
# File lib/facebooker/service.rb, line 64 def post(params) attempt = 0 if active_service.parse_results? Parser.parse(params[:method], post_form(url,params) ) else post_form(url,params) end rescue Errno::ECONNRESET, EOFError if attempt == 0 attempt += 1 retry end end
# File lib/facebooker/service.rb, line 90 def post_file(params) service_url = url(params.delete(:base)) result = post_multipart_form(service_url, params) Parser.parse(params[:method], result) end
# File lib/facebooker/service.rb, line 78 def post_form(url,params) active_service.post_form(url,params) end