fedux_org-stdlib 0.6.51 → 0.6.52

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 75761a4b247031cd81398d5349bebb185633268d
4
- data.tar.gz: 91a7fc51a5b96bf199598a0cceb7d88c45b47cbc
3
+ metadata.gz: 1c0f9fee4d5504a9e084195a2792dc01c2e287d7
4
+ data.tar.gz: 94c4d4c5a82b6c1f9ca26b5746903ec26c7f3f15
5
5
  SHA512:
6
- metadata.gz: 10b56e92c49352540958b73b6aedb721e20ba40763354a7881181d97e7f0eda0920df06d0a562febf259bc5448a3f362e7228cb1dbe838bd9b17b247da5c7c6d
7
- data.tar.gz: a848b744cf25b9effc148627438cf362f148cd34d69657b7dc4904ec5681e351240941ba26e258d801863d63fa21f84897eb628714c63d7c28e097754a8d3b10
6
+ metadata.gz: 078097aaa6fe2a3016d9b549c04d1d92913776ef3bcf938fa028645e57f202ffe57518d5c18b5552bf9c3e5df6d9b5b5a7cdcc6d78f1dd53da799a495f872f32
7
+ data.tar.gz: f7b24e704b53e9abeed3a0c97a7c9d59ac21489a6c162a387c475318a68b9521ec6f05b5686df1d9a794dca11609c610d230c8670a660e1d68260277ee3d3ee0
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fedux_org-stdlib (0.6.50)
4
+ fedux_org-stdlib (0.6.51)
5
5
  activesupport
6
6
 
7
7
  GEM
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+ module FeduxOrgStdlib
3
+ module Plugins
4
+ # Placeholder when no associated gem found, displays warning
5
+ class NoPlugin
6
+ private
7
+
8
+ attr_reader :name
9
+
10
+ public
11
+
12
+ def initialize(name)
13
+ @name = name
14
+ end
15
+
16
+ def method_missing(*args)
17
+ warn "Warning: The plugin '#{name}' was not found! (no gem found)"
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,51 @@
1
+ # encoding: utf-8
2
+ module FeduxOrgStdlib
3
+ module Plugins
4
+ class Plugin
5
+ attr_accessor :name, :gem_name, :enabled, :spec, :active
6
+
7
+ def initialize(name, gem_name, spec, enabled)
8
+ @name, @gem_name, @enabled, @spec = name, gem_name, enabled, spec
9
+ end
10
+
11
+ # Disable a plugin. (prevents plugin from being loaded, cannot
12
+ # disable an already activated plugin)
13
+ def disable!
14
+ self.enabled = false
15
+ end
16
+
17
+ # Enable a plugin. (does not load it immediately but puts on
18
+ # 'white list' to be loaded)
19
+ def enable!
20
+ self.enabled = true
21
+ end
22
+
23
+ # Activate the plugin (require the gem - enables/loads the
24
+ # plugin immediately at point of call, even if plugin is
25
+ # disabled)
26
+ # Does not reload plugin if it's already active.
27
+ def activate!
28
+ begin
29
+ if !active?
30
+ begin
31
+ require gem_name
32
+ rescue LoadError
33
+ require gem_name.gsub(/-/, '/')
34
+ end
35
+ end
36
+ rescue LoadError => e
37
+ warn "Found plugin #{gem_name}, but could not require '#{gem_name}' or '#{gem_name.gsub(/-/, '/')}'"
38
+ warn e
39
+ rescue => e
40
+ warn "require '#{gem_name}' # Failed, saying: #{e}"
41
+ end
42
+
43
+ self.active = true
44
+ self.enabled = true
45
+ end
46
+
47
+ alias active? active
48
+ alias enabled? enabled
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,72 @@
1
+ # encoding: utf-8
2
+ require 'fedux_org_stdlib/plugins/no_plugin'
3
+ require 'fedux_org_stdlib/plugins/plugin'
4
+
5
+ module FeduxOrgStdlib
6
+ module Plugins
7
+ # Plugin Manager
8
+ #
9
+ # Make sure you've got a class method `.plugin_prefix` on your main module
10
+ #
11
+ # @example
12
+ # # main module
13
+ # module FeduxOrgStdlib
14
+ # @plugin_manager = PluginManager.new
15
+ # @plugin_prefix = Regexp.new("^#{self.name.downcase.underscore}-")
16
+ #
17
+ # class << self
18
+ # attr_reader :plugin_prefix, :plugin_manager
19
+ # end
20
+ # end
21
+ class PluginManager
22
+ private
23
+
24
+ attr_reader :plugins
25
+
26
+ public
27
+
28
+ def initialize(plugins: [])
29
+ @plugins = plugins
30
+ end
31
+
32
+ # Find all installed plugins and store them in an internal array.
33
+ def locate_plugins
34
+ Gem.refresh
35
+
36
+ (Gem::Specification.respond_to?(:each) ? Gem::Specification : Gem.source_index.find_name('')).each do |gem|
37
+ next if gem.name !~ self.class.deconstantize.plugin_prefix
38
+
39
+ plugin_name = gem.name.split('-', 2).last
40
+ @plugins << Plugin.new(plugin_name, gem.name, gem, true) if !gem_located?(gem.name)
41
+ end
42
+
43
+ @plugins
44
+ end
45
+
46
+ # @return [Hash] A hash with all plugin names (minus the '<prefix>-') as
47
+ # keys and Plugin objects as values.
48
+ def plugins
49
+ h = Hash.new { |_, key| NoPlugin.new(key) }
50
+
51
+ @plugins.each do |plugin|
52
+ h[plugin.name] = plugin
53
+ end
54
+
55
+ h
56
+ end
57
+
58
+ # Require all enabled plugins, disabled plugins are skipped.
59
+ def load_plugins
60
+ @plugins.each do |plugin|
61
+ plugin.activate! if plugin.enabled?
62
+ end
63
+ end
64
+
65
+ private
66
+
67
+ def gem_located?(gem_name)
68
+ @plugins.any? { |plugin| plugin.gem_name == gem_name }
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1 @@
1
+ require 'fedux_org_stdlib/plugins/plugin_manager'
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
  # FeduxOrgStdlib
3
3
  module FeduxOrgStdlib
4
- VERSION = '0.6.51'
4
+ VERSION = '0.6.52'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fedux_org-stdlib
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.51
4
+ version: 0.6.52
5
5
  platform: ruby
6
6
  authors:
7
7
  - Max Meyer
@@ -84,6 +84,10 @@ files:
84
84
  - lib/fedux_org_stdlib/models/class_based_model.rb
85
85
  - lib/fedux_org_stdlib/models/exceptions.rb
86
86
  - lib/fedux_org_stdlib/models/filesystem_based_model.rb
87
+ - lib/fedux_org_stdlib/plugins.rb
88
+ - lib/fedux_org_stdlib/plugins/no_plugin.rb
89
+ - lib/fedux_org_stdlib/plugins/plugin.rb
90
+ - lib/fedux_org_stdlib/plugins/plugin_manager.rb
87
91
  - lib/fedux_org_stdlib/process_environment.rb
88
92
  - lib/fedux_org_stdlib/project.rb
89
93
  - lib/fedux_org_stdlib/project/generators/taskjuggler.rb