lib/httpx.rb in httpx-0.15.4 vs lib/httpx.rb in httpx-0.16.0

- old
+ new

@@ -18,34 +18,37 @@ require "httpx/request" require "httpx/response" require "httpx/options" require "httpx/chainable" +require "mutex_m" # Top-Level Namespace # module HTTPX # All plugins should be stored under this module/namespace. Can register and load # plugins. # module Plugins @plugins = {} + @plugins.extend(Mutex_m) # Loads a plugin based on a name. If the plugin hasn't been loaded, tries to load # it from the load path under "httpx/plugins/" directory. # def self.load_plugin(name) h = @plugins - unless (plugin = h[name]) + unless (plugin = h.synchronize { h[name] }) require "httpx/plugins/#{name}" - raise "Plugin #{name} hasn't been registered" unless (plugin = h[name]) + raise "Plugin #{name} hasn't been registered" unless (plugin = h.synchronize { h[name] }) end plugin end # Registers a plugin (+mod+) in the central store indexed by +name+. # def self.register_plugin(name, mod) - @plugins[name] = mod + h = @plugins + h.synchronize { h[name] = mod } end end # :nocov: def self.const_missing(const_name)