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)