lib/mangopay.rb in mangopay-v4-4.0.0 vs lib/mangopay.rb in mangopay-v4-4.0.1

- old
+ new

@@ -1,133 +1,133 @@ -require_relative '../lib/mangopay/common/log_provider' -require_relative 'mangopay/environment' -require_relative 'mangopay/configuration' -require_relative 'mangopay/model/model' -require_relative 'mangopay/api/api' - -# Holds top-level configuration. -module MangoPay - LOG = LogProvider.provide(self) - - VERSION = '4.0.0'.freeze - - SANDBOX_API_URL = 'https://api.sandbox.mangopay.com'.freeze - MAIN_API_URL = 'https://api.mangopay.com'.freeze - - # ID of the environment in which to run MangoPay operations - @global_env_id = :default - # Mapping of MangoPay environments by ID - @environments = { - default: MangoPay::Environment.new(:default) - } - # Mapping of thread object IDs to MangoPay environment IDs - @env_id = {} - - class << self - - # Allows to specify environment in which to run MangoPay operations. - # All subsequent threads will automatically run in that environment. - # - # @param +env_id+ ID of the required environment - # - # noinspection RubyResolve - def use_environment(env_id) - @global_env_id = env_id || :default - unless @environments[@global_env_id] - LOG.debug 'Creating new environment :{}', env_id - env = MangoPay::Environment.new(@global_env_id) - @environments[@global_env_id] = env - end - LOG.info 'Using environment :{}', env_id - put_thread_local_environment - end - - # Sets MangoPay to run under the default environment. - def use_default - use_environment :default - end - - # Returns the environment currently being used. - # - # noinspection RubyResolve - def environment - @environments[thread_local_env_id] - end - - private - - # Returns the ID of the environment to be used for current thread. - # - # noinspection RubyResolve - def thread_local_env_id - thread_id = Thread.current.object_id - @env_id[thread_id] || put_thread_local_environment - end - - # Saves currently-set global environment as the one to be used - # for current thread. - # - # noinspection RubyResolve - def put_thread_local_environment - thread = Thread.current - thread_id = thread.object_id - LOG.debug 'Mapping thread {} to environment :{}', - thread_id, @global_env_id - initiate_mapping_removal(thread) unless @env_id[thread_id] - @env_id[thread_id] = @global_env_id - end - - # Starts another thread which will delete current thread's - # environment hash entry as soon as current thread terminates. - # - # noinspection RubyResolve - def initiate_mapping_removal(thread) - thread_id = thread.object_id - LOG.debug 'Initiating removal task for thread-to-environment mapping '\ - '{ {} => :{} }', thread_id, @global_env_id - Thread.new do - thread.join - deleted = @env_id.delete thread_id - LOG.debug 'Removed thread-to-environment mapping '\ - '{ {} => :{} }', thread_id, deleted - end - end - - public - - # Provides MangoPay configuration object for current environment. - # - # noinspection RubyResolve - def configuration - env = environment - env.configuration || - raise("MangoPay.configure() was not called for environment #{env.id}") - end - - # Allows configuration of the current MangoPay environment. - # Yields configuration object to a provided block. - # - # noinspection RubyResolve - def configure - env = environment - LOG.info 'Configuring environment :{}', env.id - config = env.configuration || MangoPay::Configuration.new - yield config - validate config - LOG.info 'Successfully configured environment :{} for client {}', - env.id, config.client_id - env.configuration = config - end - - private - - # Validates a provided MangoPay configuration. - def validate(config) - cause_message = 'You must specify your client ID' - raise cause_message unless config.client_id - cause_message = 'You must specify your client passphrase' - raise cause_message unless config.client_passphrase - config.root_url = config.preproduction? ? SANDBOX_API_URL : MAIN_API_URL\ - unless config.root_url - end - end +require_relative '../lib/mangopay/common/log_provider' +require_relative 'mangopay/environment' +require_relative 'mangopay/configuration' +require_relative 'mangopay/model/model' +require_relative 'mangopay/api/api' + +# Holds top-level configuration. +module MangoPay + LOG = LogProvider.provide(self) + + VERSION = '4.0.1'.freeze + + SANDBOX_API_URL = 'https://api.sandbox.mangopay.com'.freeze + MAIN_API_URL = 'https://api.mangopay.com'.freeze + + # ID of the environment in which to run MangoPay operations + @global_env_id = :default + # Mapping of MangoPay environments by ID + @environments = { + default: MangoPay::Environment.new(:default) + } + # Mapping of thread object IDs to MangoPay environment IDs + @env_id = {} + + class << self + + # Allows to specify environment in which to run MangoPay operations. + # All subsequent threads will automatically run in that environment. + # + # @param +env_id+ ID of the required environment + # + # noinspection RubyResolve + def use_environment(env_id) + @global_env_id = env_id || :default + unless @environments[@global_env_id] + LOG.debug 'Creating new environment :{}', env_id + env = MangoPay::Environment.new(@global_env_id) + @environments[@global_env_id] = env + end + LOG.info 'Using environment :{}', env_id + put_thread_local_environment + end + + # Sets MangoPay to run under the default environment. + def use_default + use_environment :default + end + + # Returns the environment currently being used. + # + # noinspection RubyResolve + def environment + @environments[thread_local_env_id] + end + + private + + # Returns the ID of the environment to be used for current thread. + # + # noinspection RubyResolve + def thread_local_env_id + thread_id = Thread.current.object_id + @env_id[thread_id] || put_thread_local_environment + end + + # Saves currently-set global environment as the one to be used + # for current thread. + # + # noinspection RubyResolve + def put_thread_local_environment + thread = Thread.current + thread_id = thread.object_id + LOG.debug 'Mapping thread {} to environment :{}', + thread_id, @global_env_id + initiate_mapping_removal(thread) unless @env_id[thread_id] + @env_id[thread_id] = @global_env_id + end + + # Starts another thread which will delete current thread's + # environment hash entry as soon as current thread terminates. + # + # noinspection RubyResolve + def initiate_mapping_removal(thread) + thread_id = thread.object_id + LOG.debug 'Initiating removal task for thread-to-environment mapping '\ + '{ {} => :{} }', thread_id, @global_env_id + Thread.new do + thread.join + deleted = @env_id.delete thread_id + LOG.debug 'Removed thread-to-environment mapping '\ + '{ {} => :{} }', thread_id, deleted + end + end + + public + + # Provides MangoPay configuration object for current environment. + # + # noinspection RubyResolve + def configuration + env = environment + env.configuration || + raise("MangoPay.configure() was not called for environment #{env.id}") + end + + # Allows configuration of the current MangoPay environment. + # Yields configuration object to a provided block. + # + # noinspection RubyResolve + def configure + env = environment + LOG.info 'Configuring environment :{}', env.id + config = env.configuration || MangoPay::Configuration.new + yield config + validate config + LOG.info 'Successfully configured environment :{} for client {}', + env.id, config.client_id + env.configuration = config + end + + private + + # Validates a provided MangoPay configuration. + def validate(config) + cause_message = 'You must specify your client ID' + raise cause_message unless config.client_id + cause_message = 'You must specify your client APIKey' + raise cause_message unless config.client_apiKey + config.root_url = config.preproduction? ? SANDBOX_API_URL : MAIN_API_URL\ + unless config.root_url + end + end end \ No newline at end of file