plugin_manager 1.4 → 1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/plugin_manager.rb +27 -0
  2. metadata +5 -7
@@ -8,6 +8,13 @@ require 'plugin_manager/definition_builder'
8
8
  class PluginManager
9
9
  attr_reader :unreadable_definitions, :plugins_with_errors, :loaded_plugins, :unloaded_plugins, :output
10
10
 
11
+ # A list of plugins that should not be loaded. You can feel free to assign
12
+ # plugins that are dependencies of plugins that are not disabled. In that
13
+ # case the plugin manager will just ignore your request to disable the
14
+ # plugin. This ensures that you only disable plugins in such a way that it is
15
+ # stable to the system.
16
+ attr_writer :disabled_plugins
17
+
11
18
  class << self
12
19
  attr_accessor :current
13
20
  end
@@ -18,6 +25,7 @@ class PluginManager
18
25
  @loaded_plugins = []
19
26
  @unreadable_definitions = []
20
27
  @plugins_with_errors = []
28
+ @disabled_plugins = []
21
29
  @output = output
22
30
  end
23
31
 
@@ -28,6 +36,21 @@ class PluginManager
28
36
  def plugins
29
37
  @plugins
30
38
  end
39
+
40
+ # A subset of the plugins that have been requested to be disabled.
41
+ def disabled_plugins
42
+ plugins.find_all do |pd|
43
+ @disabled_plugins.include?(pd.name) &&
44
+ derivative_plugins_for(pd).all? {|der| @disabled_plugins.include? der.name}
45
+ end
46
+ end
47
+
48
+ # Returns all plugins that are dependent on the given plugin
49
+ def derivative_plugins_for(plugin)
50
+ plugins.find_all do |pd|
51
+ pd.dependencies.any? {|dep| dep.required_name == plugin.name}
52
+ end
53
+ end
31
54
 
32
55
  def plugin_objects
33
56
  @loaded_plugins.map {|definition| definition.object}
@@ -118,6 +141,10 @@ class PluginManager
118
141
  end
119
142
 
120
143
  def load(*plugin_names)
144
+ # Make sure disabled plugins are not listed as unloaded so we don't
145
+ # try to load them.
146
+ @unloaded_plugins -= disabled_plugins
147
+
121
148
  if plugin_names.empty?
122
149
  return load_maximal
123
150
  else
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: plugin_manager
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.4'
4
+ version: '1.5'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,12 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-11-16 00:00:00.000000000 +00:00
13
- default_executable:
12
+ date: 2012-02-15 00:00:00.000000000Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: rspec
17
- requirement: &70305755296240 !ruby/object:Gem::Requirement
16
+ requirement: &70340178171860 !ruby/object:Gem::Requirement
18
17
  none: false
19
18
  requirements:
20
19
  - - ! '>='
@@ -22,7 +21,7 @@ dependencies:
22
21
  version: '0'
23
22
  type: :development
24
23
  prerelease: false
25
- version_requirements: *70305755296240
24
+ version_requirements: *70340178171860
26
25
  description:
27
26
  email: dan@fluentradical.com
28
27
  executables: []
@@ -36,7 +35,6 @@ files:
36
35
  - lib/plugin_manager/plugin.rb
37
36
  - lib/plugin_manager/plugin_definition.rb
38
37
  - lib/plugin_manager.rb
39
- has_rdoc: true
40
38
  homepage: http://github.com/danlucraft/plugin_manager
41
39
  licenses: []
42
40
  post_install_message:
@@ -59,7 +57,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
59
57
  version: '0'
60
58
  requirements: []
61
59
  rubyforge_project:
62
- rubygems_version: 1.6.2
60
+ rubygems_version: 1.8.16
63
61
  signing_key:
64
62
  specification_version: 3
65
63
  summary: A Ruby plugin loader