plugin 1.0 → 1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/HISTORY +27 -2
- data/{README → README.rdoc} +5 -3
- data/lib/plugin.rb +36 -16
- data/meta/released +1 -1
- data/meta/version +1 -1
- data/test/demos/helper.rb +3 -0
- data/test/demos/plugins/example.rb +1 -0
- data/test/demos/usage.rdoc +26 -0
- metadata +9 -14
- data/MANIFEST +0 -19
- data/Syckfile +0 -25
data/HISTORY
CHANGED
@@ -1,8 +1,33 @@
|
|
1
1
|
= RELEASE HISTORY
|
2
2
|
|
3
|
-
==
|
3
|
+
== 1.1 / 2010-02-07
|
4
4
|
|
5
|
-
This
|
5
|
+
This release includes two significant adjustments.
|
6
|
+
|
7
|
+
First, the conventional plugin directory has been renamed to 'plugins/',
|
8
|
+
instead of 'plugin/'. I frequently shy away from plural names
|
9
|
+
(as in the tendency in Ruby), but in this case I believe it helps
|
10
|
+
differentiate it from regular library directories. It also frees 'plugin/'
|
11
|
+
should any separate scripts be required for this project in the future.
|
12
|
+
|
13
|
+
Second, should one need to search outside of the conventional 'plugins/'
|
14
|
+
location, the #find method will accept a :directory option. This usage
|
15
|
+
is discouraged, but is made available for the rare cases in which it
|
16
|
+
might prove necessary.
|
17
|
+
|
18
|
+
Changes:
|
19
|
+
|
20
|
+
* Standard Plugin directory is 'plugins/' instead of 'plugin/'.
|
21
|
+
* Can specify an alternate plugin directory by passing an option to #find.
|
22
|
+
* $LOAD_PATHS are expanded, so all paths are returned as full path names.
|
23
|
+
|
24
|
+
|
25
|
+
== 1.0 / 2009-11-24
|
26
|
+
|
27
|
+
This is the first official public release of Plugin.
|
28
|
+
Plugin provides a very easy way to locate plugins, and
|
29
|
+
this making it super easy for your project to support
|
30
|
+
pluggable components.
|
6
31
|
|
7
32
|
Changes:
|
8
33
|
|
data/{README → README.rdoc}
RENAMED
@@ -16,12 +16,12 @@ a location in the ruby $LOAD_PATH for plugins. Second it provides
|
|
16
16
|
an easy to use function for finding plugin scripts stored in the
|
17
17
|
designated location.
|
18
18
|
|
19
|
+
|
19
20
|
== USAGE
|
20
21
|
|
21
|
-
Place all plugins for
|
22
|
+
Place all plugins for your project in <tt>lib/plugins/<name>/</tt>.
|
22
23
|
Or if you have altered the load path for your project, you can
|
23
|
-
place
|
24
|
-
However, this is not a recommended practice.
|
24
|
+
place them in the alternate location, <tt><alternate-loadpath>/plugins/<name>/</tt>.[1]
|
25
25
|
|
26
26
|
To find plugins, simply provide a glob to the <tt>Plugin.find</tt> function,
|
27
27
|
and it will return all matches found within current and/or most recent versions
|
@@ -39,6 +39,8 @@ the plugins found:
|
|
39
39
|
Alternately you might load plugins only as needed. For instance, if a command-line
|
40
40
|
option calls for it.
|
41
41
|
|
42
|
+
[1] Alterating the conventional load path shoud be avoided whenever possible.
|
43
|
+
|
42
44
|
|
43
45
|
== COPYRIGHTS
|
44
46
|
|
data/lib/plugin.rb
CHANGED
@@ -2,11 +2,17 @@
|
|
2
2
|
#
|
3
3
|
# Find plugins across various library managers.
|
4
4
|
#
|
5
|
-
# All plugins are expected to be within a
|
6
|
-
# loadpath(s) under a <tt>
|
7
|
-
# this assigned space
|
8
|
-
#
|
9
|
-
#
|
5
|
+
# All plugins are expected to be within a library's designated
|
6
|
+
# loadpath(s) under a toplevel <tt>plugins/</tt> subdirectory.
|
7
|
+
# By using this assigned space plugins are kept isolated from
|
8
|
+
# normal library scripts, which helps prevent inadvertent
|
9
|
+
# name clashes.
|
10
|
+
#
|
11
|
+
# For example, lets say we want to create a pluggable template
|
12
|
+
# system for our "luckyweb" project. Our <tt>lib/</tt>
|
13
|
+
# directory would have the usual <tt>luckyweb</tt> directory,
|
14
|
+
# but also now a <tt>plugins/luckyweb/</tt> path in which the
|
15
|
+
# plugin templates would be stored.
|
10
16
|
#
|
11
17
|
# == How To Use
|
12
18
|
#
|
@@ -19,6 +25,16 @@
|
|
19
25
|
#
|
20
26
|
# Plugin['syckle/*']
|
21
27
|
#
|
28
|
+
# == Alternate Plugin Location
|
29
|
+
#
|
30
|
+
# By default <tt>plugins/</tt> is hardcoded into the system
|
31
|
+
# as a reliable convention. This is intentional. However,
|
32
|
+
# if you have specific need for serching for files outside
|
33
|
+
# that directory you can do so by supplying a <tt>:directory</tt>
|
34
|
+
# option to the <tt>#find</tt> command. Eg.
|
35
|
+
#
|
36
|
+
# Plugin.find('discover.rb', :directory=>'rdoc')
|
37
|
+
#
|
22
38
|
# == A Note on RubyGems
|
23
39
|
#
|
24
40
|
# A way has not yet been devised to isolate the actived version
|
@@ -38,7 +54,7 @@ module Plugin
|
|
38
54
|
|
39
55
|
extend self
|
40
56
|
|
41
|
-
DIRECTORY = '
|
57
|
+
DIRECTORY = 'plugins'
|
42
58
|
|
43
59
|
# Find plugins, searching through standard $LOAD_PATH,
|
44
60
|
# Roll Libraries and RubyGems.
|
@@ -47,11 +63,11 @@ module Plugin
|
|
47
63
|
#
|
48
64
|
# Plugins.find('syckle/*')
|
49
65
|
#
|
50
|
-
def find(match)
|
66
|
+
def find(match, options={})
|
51
67
|
plugins = []
|
52
|
-
plugins.concat find_roll(match)
|
53
|
-
plugins.concat find_loadpath(match)
|
54
|
-
plugins.concat find_gems(match)
|
68
|
+
plugins.concat find_roll(match, options)
|
69
|
+
plugins.concat find_loadpath(match, options)
|
70
|
+
plugins.concat find_gems(match, options)
|
55
71
|
plugins.uniq
|
56
72
|
end
|
57
73
|
|
@@ -64,13 +80,14 @@ module Plugin
|
|
64
80
|
|
65
81
|
# Search roll for current or latest libraries.
|
66
82
|
|
67
|
-
def find_roll(match)
|
83
|
+
def find_roll(match, options={})
|
68
84
|
plugins = []
|
85
|
+
directory = options[:directory] || DIRECTORY
|
69
86
|
if defined?(::Roll)
|
70
87
|
::Roll::Library.ledger.each do |name, lib|
|
71
88
|
lib = lib.sort.first if Array===lib
|
72
89
|
lib.loadpath.each do |path|
|
73
|
-
find = File.join(lib.location, path,
|
90
|
+
find = File.join(lib.location, path, directory, match)
|
74
91
|
list = Dir.glob(find)
|
75
92
|
list = list.map{ |d| d.chomp('/') }
|
76
93
|
plugins.concat(list)
|
@@ -84,10 +101,12 @@ module Plugin
|
|
84
101
|
#
|
85
102
|
# Activated gem versions are in here too.
|
86
103
|
|
87
|
-
def find_loadpath(match)
|
104
|
+
def find_loadpath(match, options={})
|
88
105
|
plugins = []
|
106
|
+
directory = options[:directory] || DIRECTORY
|
89
107
|
$LOAD_PATH.uniq.each do |path|
|
90
|
-
|
108
|
+
path = File.expand_path(path)
|
109
|
+
list = Dir.glob(File.join(path, directory, match))
|
91
110
|
#dirs = dirs.select{ |d| File.directory?(d) }
|
92
111
|
list = list.map{ |d| d.chomp('/') }
|
93
112
|
plugins.concat(list)
|
@@ -99,11 +118,12 @@ module Plugin
|
|
99
118
|
#
|
100
119
|
# TODO: Is there anyway to skip active gems?
|
101
120
|
|
102
|
-
def find_gems(match)
|
121
|
+
def find_gems(match, options={})
|
103
122
|
plugins = []
|
123
|
+
directory = options[:directory] || DIRECTORY
|
104
124
|
if defined?(::Gem)
|
105
125
|
::Gem.latest_load_paths do |path|
|
106
|
-
list = Dir.glob(File.join(path,
|
126
|
+
list = Dir.glob(File.join(path, directory, match))
|
107
127
|
list = list.map{ |d| d.chomp('/') }
|
108
128
|
plugins.concat(list)
|
109
129
|
end
|
data/meta/released
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
2010-02-07
|
data/meta/version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.1
|
@@ -0,0 +1 @@
|
|
1
|
+
$proof = "plugin loading worked"
|
@@ -0,0 +1,26 @@
|
|
1
|
+
= Plugin Demonstrandum
|
2
|
+
|
3
|
+
To use the Plugin library first we need to require it.
|
4
|
+
|
5
|
+
require 'plugin'
|
6
|
+
|
7
|
+
Now use +Plugin.find+ to seach for a file pattern of our
|
8
|
+
choosing within the +plugins+ loadpath.
|
9
|
+
|
10
|
+
files = Plugin.find('example.rb')
|
11
|
+
file = files.first
|
12
|
+
|
13
|
+
The +find+ method returns full path names.
|
14
|
+
|
15
|
+
File.expand_path(file).assert == file
|
16
|
+
file.assert.ends_with?('plugins/example.rb')
|
17
|
+
|
18
|
+
As with any Ruby script we can require it.
|
19
|
+
|
20
|
+
require file
|
21
|
+
|
22
|
+
Our example.rb script defines the global variable $proof.
|
23
|
+
We can see that it loaded just fine.
|
24
|
+
|
25
|
+
$proof.assert == "plugin loading worked"
|
26
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: plugin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: "1.
|
4
|
+
version: "1.1"
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thomas Sawyer
|
@@ -9,24 +9,20 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2010-02-07 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
16
16
|
description: |-
|
17
17
|
Plugins is a general purpose plugin handler for Ruby.
|
18
18
|
(Note: This has nothing to do with Rails plugins.)
|
19
|
-
email:
|
19
|
+
email:
|
20
20
|
executables: []
|
21
21
|
|
22
22
|
extensions: []
|
23
23
|
|
24
|
-
extra_rdoc_files:
|
25
|
-
|
26
|
-
- MANIFEST
|
27
|
-
- HISTORY
|
28
|
-
- Syckfile
|
29
|
-
- COPYING
|
24
|
+
extra_rdoc_files: []
|
25
|
+
|
30
26
|
files:
|
31
27
|
- lib/plugin.rb
|
32
28
|
- meta/authors
|
@@ -43,11 +39,12 @@ files:
|
|
43
39
|
- meta/summary
|
44
40
|
- meta/title
|
45
41
|
- meta/version
|
46
|
-
-
|
42
|
+
- test/demos/helper.rb
|
43
|
+
- test/demos/plugins/example.rb
|
44
|
+
- test/demos/usage.rdoc
|
45
|
+
- README.rdoc
|
47
46
|
- HISTORY
|
48
47
|
- COPYING
|
49
|
-
- MANIFEST
|
50
|
-
- Syckfile
|
51
48
|
has_rdoc: true
|
52
49
|
homepage: http://rubyworks.github.com/plugin
|
53
50
|
licenses: []
|
@@ -56,8 +53,6 @@ post_install_message:
|
|
56
53
|
rdoc_options:
|
57
54
|
- --title
|
58
55
|
- Plugin API
|
59
|
-
- --main
|
60
|
-
- README
|
61
56
|
require_paths:
|
62
57
|
- lib
|
63
58
|
required_ruby_version: !ruby/object:Gem::Requirement
|
data/MANIFEST
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
#!mast -x Syckfile bin lib meta test [A-Z]*
|
2
|
-
lib/plugin.rb
|
3
|
-
meta/authors
|
4
|
-
meta/collection
|
5
|
-
meta/contact
|
6
|
-
meta/created
|
7
|
-
meta/description
|
8
|
-
meta/homepage
|
9
|
-
meta/license
|
10
|
-
meta/name
|
11
|
-
meta/released
|
12
|
-
meta/repository
|
13
|
-
meta/ruby
|
14
|
-
meta/summary
|
15
|
-
meta/title
|
16
|
-
meta/version
|
17
|
-
README
|
18
|
-
HISTORY
|
19
|
-
COPYING
|
data/Syckfile
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
---
|
2
|
-
automatic: true
|
3
|
-
|
4
|
-
box:
|
5
|
-
types : [ gem, gz ]
|
6
|
-
include: [ bin, doc, lib, meta, test, "[A-Z]*" ]
|
7
|
-
exclude: [ doc/rdoc, doc/ri ]
|
8
|
-
spec : true
|
9
|
-
|
10
|
-
dnote:
|
11
|
-
priority: -1
|
12
|
-
active : true
|
13
|
-
|
14
|
-
stats:
|
15
|
-
priority: -1
|
16
|
-
active : true
|
17
|
-
|
18
|
-
#ridoc:
|
19
|
-
# exclude: []
|
20
|
-
# active : true
|
21
|
-
|
22
|
-
email:
|
23
|
-
mailto : transfire@gmail.com
|
24
|
-
active : true
|
25
|
-
|