@param [Array, Set] plugins @option options [Mutex] :mutex
# File lib/seahorse/client/plugin_list.rb, line 12 def initialize(plugins = [], options = {}) @mutex = options[:mutex] || Mutex.new @plugins = Set.new if plugins.is_a?(PluginList) plugins.send(:each_plugin) { |plugin| _add(plugin) } else plugins.each { |plugin| _add(plugin) } end end
Adds and returns the `plugin`. @param [Plugin] plugin @return [void]
# File lib/seahorse/client/plugin_list.rb, line 25 def add(plugin) @mutex.synchronize do _add(plugin) end nil end
Enumerates the plugins. @return [Enumerator]
# File lib/seahorse/client/plugin_list.rb, line 57 def each(&block) each_plugin do |plugin_wrapper| yield(plugin_wrapper.plugin) end end
Removes and returns the `plugin`. @param [Plugin] plugin @return [void]
# File lib/seahorse/client/plugin_list.rb, line 35 def remove(plugin) @mutex.synchronize do @plugins.delete(PluginWrapper.new(plugin)) end nil end
Replaces the existing list of plugins. @param [Array<Plugin>] plugins @return [void]
# File lib/seahorse/client/plugin_list.rb, line 45 def set(plugins) @mutex.synchronize do @plugins.clear plugins.each do |plugin| _add(plugin) end end nil end
Not safe to call outside the mutex.
# File lib/seahorse/client/plugin_list.rb, line 66 def _add(plugin) @plugins << PluginWrapper.new(plugin) end
Yield each PluginDetail behind the mutex
# File lib/seahorse/client/plugin_list.rb, line 71 def each_plugin(&block) @mutex.synchronize do @plugins.each(&block) end end