lib/afmotion/session_client.rb in afmotion-2.6 vs lib/afmotion/session_client.rb in afmotion-3.0

- old
+ new

@@ -1,7 +1,9 @@ -motion_require 'http_client' motion_require 'version' +motion_require 'client_shared' +motion_require 'session_client_dsl' +motion_require 'ext/AFHTTPSessionManager' =begin AFMotion::SessionClient.build("http://google.com") do |client| client.session_configuration :default # :ephemeral client.session_configuration :background, "com.usepropeller.afmotion" @@ -19,132 +21,29 @@ attr_accessor :shared # Returns an instance of AFHTTPRequestOperationManager def build(base_url, &block) dsl = AFMotion::SessionClientDSL.new(base_url) - case block.arity - when 0 - dsl.instance_eval(&block) - when 1 - block.call(dsl) + + if block_given? + case block.arity + when 0 + dsl.instance_eval(&block) + when 1 + block.call(dsl) + end end - + dsl.to_session_manager end # Sets AFMotion::Client.shared as the built client def build_shared(base_url, &block) self.shared = self.build(base_url, &block) end end end -end - -module AFMotion - class SessionClientDSL < ClientDSL - class Config - attr_accessor :responseSerializer, :operationQueue, :requestSerializer, :sessionConfiguration - - class MockRequestSerializer - attr_accessor :authorization - end - - def requestSerializer - @requestSerializer ||= MockRequestSerializer.new - end - - def requestSerializer=(requestSerializer) - if @requestSerializer && @requestSerializer.is_a?(MockRequestSerializer) - requestSerializer.authorization = @requestSerializer.authorization - end - @requestSerializer = requestSerializer - end - - def headers - @headers ||= {} - end - end - - attr_accessor :operation_manager - alias_method :config, :operation_manager - - def initialize(base_url) - @base_url = base_url - @operation_manager = Config.new - end - - def to_session_manager - session_manager = AFHTTPSessionManager.alloc.initWithBaseURL(@base_url.to_url, - sessionConfiguration: config.sessionConfiguration) - session_manager.responseSerializer = config.responseSerializer if config.responseSerializer - if !config.requestSerializer.is_a?(Config::MockRequestSerializer) - session_manager.requestSerializer = config.requestSerializer - elsif config.requestSerializer.authorization - session_manager.requestSerializer.authorization = config.requestSerializer.authorization - end - config.headers.each do |key, value| - session_manager.requestSerializer.headers[key] = value - end - session_manager.operationQueue = config.operationQueue if config.operationQueue - session_manager - end - - SESSION_CONFIGURATION_SHORTHAND = { - default: :defaultSessionConfiguration, - ephemeral: :ephemeralSessionConfiguration, - background: (UIDevice.currentDevice.systemVersion.to_f >= 8.0 ? "backgroundSessionConfigurationWithIdentifier:" : "backgroundSessionConfiguration:").to_sym - } - - def session_configuration(session_configuration, identifier = nil) - if session_configuration.is_a?(Symbol) || session_configuration.is_a?(String) - method_signature = SESSION_CONFIGURATION_SHORTHAND[session_configuration.to_sym] - ns_url_session_configuration = begin - if identifier - NSURLSessionConfiguration.send(method_signature, identifier) - else - NSURLSessionConfiguration.send(method_signature) - end - end - self.config.sessionConfiguration = ns_url_session_configuration - elsif session_configuration.is_a?(NSURLSessionConfiguration) || - # cluster class smh - session_configuration.class.to_s.include?("URLSessionConfiguration") - self.config.sessionConfiguration = session_configuration - else - raise "Invalid type for session_configuration; need Symbol, String, or NSURLSessionConfiguration, but got #{session_configuration.class}" - end - end - end -end - -class AFHTTPSessionManager - include AFMotion::ClientShared - - AFMotion::HTTP_METHODS.each do |method| - # EX client.get('my/resource.json') - define_method "#{method}", -> (path, parameters = {}, &callback) do - create_task(method, path, parameters, &callback) - end - end - - # options = {parameters: , constructingBodyWithBlock: , success:, failure:} - def PUT(url_string, options = {}) - parameters = options[:parameters] - block = options[:constructingBodyWithBlock] - success = options[:success] - failure = options[:failure] - - request = self.requestSerializer.multipartFormRequestWithMethod("PUT", URLString: NSURL.URLWithString(url_string, relativeToURL: self.baseURL).absoluteString, parameters:parameters, constructingBodyWithBlock:block) - - task = self.dataTaskWithRequest(request, completionHandler: ->(response, responseObject, error) { - if error && failure - failure.call(task, error) - elsif success - success.call(task, responseObject) - end - }) - - task.resume - - task + + # These are now the same thing + class Client < SessionClient end end