gem_plugin 0.1 → 0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (33) hide show
  1. data/Rakefile +15 -9
  2. data/bin/gpgen +60 -0
  3. data/doc/rdoc/classes/GemPlugin.html +3 -2
  4. data/doc/rdoc/classes/GemPlugin.src/M000001.html +5 -5
  5. data/doc/rdoc/classes/GemPlugin/Base.html +1 -1
  6. data/doc/rdoc/classes/GemPlugin/Base.src/M000002.html +6 -6
  7. data/doc/rdoc/classes/GemPlugin/Base.src/M000003.html +4 -4
  8. data/doc/rdoc/classes/GemPlugin/Base.src/M000004.html +4 -4
  9. data/doc/rdoc/classes/GemPlugin/Manager.html +107 -8
  10. data/doc/rdoc/classes/GemPlugin/Manager.src/M000005.html +9 -5
  11. data/doc/rdoc/classes/GemPlugin/Manager.src/M000006.html +30 -29
  12. data/doc/rdoc/classes/GemPlugin/Manager.src/M000007.html +5 -5
  13. data/doc/rdoc/classes/GemPlugin/Manager.src/M000008.html +15 -15
  14. data/doc/rdoc/classes/GemPlugin/Manager.src/M000009.html +5 -5
  15. data/doc/rdoc/classes/GemPlugin/Manager.src/M000010.html +28 -0
  16. data/doc/rdoc/classes/GemPlugin/Manager.src/M000011.html +28 -0
  17. data/doc/rdoc/classes/GemPlugin/PluginNotLoaded.html +111 -0
  18. data/doc/rdoc/created.rid +1 -1
  19. data/doc/rdoc/files/README.html +3 -6
  20. data/doc/rdoc/files/lib/gem_plugin_rb.html +1 -1
  21. data/doc/rdoc/fr_class_index.html +1 -0
  22. data/doc/rdoc/fr_method_index.html +3 -1
  23. data/lib/gem_plugin.rb +89 -13
  24. data/resources/COPYING +1 -0
  25. data/resources/LICENSE +1 -0
  26. data/resources/README +5 -0
  27. data/resources/Rakefile +37 -0
  28. data/resources/lib/project/init.rb +6 -0
  29. data/resources/resources/defaults.yaml +2 -0
  30. data/resources/tools/rakehelp.rb +105 -0
  31. data/test/test_plugins.rb +3 -4
  32. data/tools/rakehelp.rb +5 -11
  33. metadata +36 -11
data/Rakefile CHANGED
@@ -15,19 +15,25 @@ setup_rdoc ['README', 'LICENSE', 'COPYING', 'lib/**/*.rb', 'doc/**/*.rdoc']
15
15
  desc "Does a full compile, test run"
16
16
  task :default => [:test, :package]
17
17
 
18
- version="0.1"
19
- summary = "A plugin system based only on rubygems"
20
- test_file = "test/test_plugins.rb"
21
- author="Zed A. Shaw"
18
+ version = "0.2"
22
19
  name="gem_plugin"
23
- scripts=[]
24
20
 
25
- setup_gem(name, version, author, summary, scripts, test_file) do |spec|
26
- spec.autorequire = "gem_plugin"
21
+ setup_gem(name, version) do |spec|
22
+ spec.author="Zed A. Shaw"
23
+ spec.summary = "A plugin system based only on rubygems that uses dependencies only"
24
+ spec.description = spec.summary
25
+ spec.test_file = "test/test_plugins.rb"
26
+ spec.files += Dir.glob("resources/**/*")
27
+ spec.executables=["gpgen"]
28
+ spec.add_dependency("rake", ">= 0.7")
27
29
  end
28
30
 
29
- task :gem_test => [:package] do
30
- sh %{sudo gem install pkg/gem_plugin-#{version}}
31
+ task :install => [:test, :package] do
32
+ sh %{sudo gem install pkg/#{name}-#{version}}
33
+ end
34
+
35
+ task :uninstall => [:clean] do
36
+ sh %{sudo gem uninstall #{name}}
31
37
  end
32
38
 
33
39
  task :site => [:rerdoc] do
@@ -0,0 +1,60 @@
1
+ require 'erb'
2
+ require 'fileutils'
3
+ include FileUtils
4
+
5
+ if ARGV.length != 1
6
+ STDERR.puts "ERROR: You must give a name for your plugin and directory."
7
+ STDERR.puts "usage: gpgen name"
8
+ STDERR.puts "example: gpgen mygemplugin"
9
+ exit 1
10
+ end
11
+
12
+ # setup the required binding variables for erb processing later
13
+ project = ARGV.shift
14
+ gem_plugin_base = File.expand_path(File.join(File.dirname(__FILE__), ".."))
15
+ resources = File.join(gem_plugin_base, "resources")
16
+ gem_plugin_version = gem_plugin_base[gem_plugin_base.rindex("-")+1 .. -1]
17
+
18
+
19
+ # make the dir if it don't exist
20
+ if not File.exist? project
21
+ puts "Creating directory #{project}"
22
+ mkdir project
23
+ else
24
+ puts "Directory #{project} exists, skipping."
25
+ end
26
+
27
+
28
+ # go through all the resource files, erb them, and write them verbatim to output
29
+ # do not overwrite if exists already
30
+
31
+ Dir.glob("#{resources}/**/*") do |infile|
32
+ outfile = File.join(project, infile[resources.length .. -1])
33
+ if File.exist? outfile
34
+ puts "File #{outfile} exists, skipping."
35
+ else
36
+ if File.directory? infile
37
+ puts "Creating directory #{outfile}"
38
+ mkdir_p outfile
39
+ elsif File.file? infile
40
+ puts "Creating file #{outfile}"
41
+ open(infile) do |content|
42
+ template = ERB.new(content.read)
43
+ open(outfile,"w") {|f| f.write(template.result(binding)) }
44
+ end
45
+ else
46
+ puts "!!! Resources contains something not a file or directory."
47
+ puts "Skipping #{infile}."
48
+ end
49
+ end
50
+ end
51
+
52
+ # Finally, move the base init.rb to the right dir
53
+ init_file = File.join(project,"lib",project)
54
+ if File.exist? init_file
55
+ puts "File init.rb already exists, skipping."
56
+ puts "WARNING: There might be a junk '#{project}/lib/project/init.rb' file you can delete."
57
+ else
58
+ puts "Creating proper '#{project}/lib/#{project}/init.rb' file"
59
+ mv File.join(project,"lib","project"), init_file
60
+ end
@@ -102,10 +102,10 @@ when appropriate.
102
102
  </p>
103
103
  <p>
104
104
  Since this system was written originally for the Mongrel project
105
- that&#8217;ll be the best examle of using it.
105
+ that&#8217;ll be the best example of using it.
106
106
  </p>
107
107
  <p>
108
- Imagine you have a neat plugin for Mongrel called snazzy_command that give
108
+ Imagine you have a neat plugin for Mongrel called snazzy_command that gives
109
109
  the mongrel_rails a new command snazzy (like: mongrel_rails snazzy).
110
110
  You&#8216;d like people to be able to grab this plugin if they want and use
111
111
  it, because it&#8217;s snazzy.
@@ -168,6 +168,7 @@ Read that to see how it is really done.
168
168
 
169
169
  Class <a href="GemPlugin/Base.html" class="link">GemPlugin::Base</a><br />
170
170
  Class <a href="GemPlugin/Manager.html" class="link">GemPlugin::Manager</a><br />
171
+ Class <a href="GemPlugin/PluginNotLoaded.html" class="link">GemPlugin::PluginNotLoaded</a><br />
171
172
 
172
173
  </div>
173
174
 
@@ -10,10 +10,10 @@
10
10
  <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
11
  </head>
12
12
  <body class="standalone-code">
13
- <pre> <span class="ruby-comment cmt"># File lib/gem_plugin.rb, line 195</span>
14
- 195: <span class="ruby-keyword kw">def</span> <span class="ruby-constant">GemPlugin</span><span class="ruby-operator">::</span><span class="ruby-constant">Plugin</span>(<span class="ruby-identifier">c</span>)
15
- 196: <span class="ruby-constant">Base</span>.<span class="ruby-identifier">category</span> = <span class="ruby-identifier">c</span>
16
- 197: <span class="ruby-constant">Base</span>
17
- 198: <span class="ruby-keyword kw">end</span></pre>
13
+ <pre> <span class="ruby-comment cmt"># File lib/gem_plugin.rb, line 271</span>
14
+ 271: <span class="ruby-keyword kw">def</span> <span class="ruby-constant">GemPlugin</span><span class="ruby-operator">::</span><span class="ruby-constant">Plugin</span>(<span class="ruby-identifier">c</span>)
15
+ 272: <span class="ruby-constant">Base</span>.<span class="ruby-identifier">category</span> = <span class="ruby-identifier">c</span>
16
+ 273: <span class="ruby-constant">Base</span>
17
+ 274: <span class="ruby-keyword kw">end</span></pre>
18
18
  </body>
19
19
  </html>
@@ -80,7 +80,7 @@
80
80
 
81
81
  <div id="description">
82
82
  <p>
83
- This base class for plugins reallys does nothing more than wire up the new
83
+ This base class for plugins really does nothing more than wire up the new
84
84
  class into the right category. It is not thread-safe yet but will be soon.
85
85
  </p>
86
86
 
@@ -10,11 +10,11 @@
10
10
  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
11
11
  </head>
12
12
  <body class="standalone-code">
13
- <pre> <span class="ruby-comment cmt"># File lib/gem_plugin.rb, line 166</span>
14
- 166: <span class="ruby-keyword kw">def</span> <span class="ruby-constant">Base</span>.<span class="ruby-identifier">inherited</span>(<span class="ruby-identifier">klass</span>)
15
- 167: <span class="ruby-identifier">name</span> = <span class="ruby-value str">&quot;/&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">klass</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">downcase</span>
16
- 168: <span class="ruby-constant">Manager</span>.<span class="ruby-identifier">instance</span>.<span class="ruby-identifier">register</span>(<span class="ruby-ivar">@@category</span>, <span class="ruby-identifier">name</span>, <span class="ruby-identifier">klass</span>)
17
- 169: <span class="ruby-ivar">@@category</span> = <span class="ruby-keyword kw">nil</span>
18
- 170: <span class="ruby-keyword kw">end</span></pre>
13
+ <pre> <span class="ruby-comment cmt"># File lib/gem_plugin.rb, line 242</span>
14
+ 242: <span class="ruby-keyword kw">def</span> <span class="ruby-constant">Base</span>.<span class="ruby-identifier">inherited</span>(<span class="ruby-identifier">klass</span>)
15
+ 243: <span class="ruby-identifier">name</span> = <span class="ruby-value str">&quot;/&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">klass</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">downcase</span>
16
+ 244: <span class="ruby-constant">Manager</span>.<span class="ruby-identifier">instance</span>.<span class="ruby-identifier">register</span>(<span class="ruby-ivar">@@category</span>, <span class="ruby-identifier">name</span>, <span class="ruby-identifier">klass</span>)
17
+ 245: <span class="ruby-ivar">@@category</span> = <span class="ruby-keyword kw">nil</span>
18
+ 246: <span class="ruby-keyword kw">end</span></pre>
19
19
  </body>
20
20
  </html>
@@ -10,9 +10,9 @@
10
10
  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
11
11
  </head>
12
12
  <body class="standalone-code">
13
- <pre> <span class="ruby-comment cmt"># File lib/gem_plugin.rb, line 173</span>
14
- 173: <span class="ruby-keyword kw">def</span> <span class="ruby-constant">Base</span>.<span class="ruby-identifier">category=</span>(<span class="ruby-identifier">category</span>)
15
- 174: <span class="ruby-ivar">@@category</span> = <span class="ruby-identifier">category</span>
16
- 175: <span class="ruby-keyword kw">end</span></pre>
13
+ <pre> <span class="ruby-comment cmt"># File lib/gem_plugin.rb, line 249</span>
14
+ 249: <span class="ruby-keyword kw">def</span> <span class="ruby-constant">Base</span>.<span class="ruby-identifier">category=</span>(<span class="ruby-identifier">category</span>)
15
+ 250: <span class="ruby-ivar">@@category</span> = <span class="ruby-identifier">category</span>
16
+ 251: <span class="ruby-keyword kw">end</span></pre>
17
17
  </body>
18
18
  </html>
@@ -10,9 +10,9 @@
10
10
  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
11
11
  </head>
12
12
  <body class="standalone-code">
13
- <pre> <span class="ruby-comment cmt"># File lib/gem_plugin.rb, line 177</span>
14
- 177: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">options</span> = {})
15
- 178: <span class="ruby-ivar">@options</span> = <span class="ruby-identifier">options</span>
16
- 179: <span class="ruby-keyword kw">end</span></pre>
13
+ <pre> <span class="ruby-comment cmt"># File lib/gem_plugin.rb, line 253</span>
14
+ 253: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">options</span> = {})
15
+ 254: <span class="ruby-ivar">@options</span> = <span class="ruby-identifier">options</span>
16
+ 255: <span class="ruby-keyword kw">end</span></pre>
17
17
  </body>
18
18
  </html>
@@ -97,11 +97,13 @@ It is a singleton so you use like this: GemPlugins::Manager.instance.load
97
97
  <h3 class="section-bar">Methods</h3>
98
98
 
99
99
  <div class="name-list">
100
- <a href="#M000009">available</a>&nbsp;&nbsp;
100
+ <a href="#M000011">config</a>&nbsp;&nbsp;
101
101
  <a href="#M000008">create</a>&nbsp;&nbsp;
102
102
  <a href="#M000006">load</a>&nbsp;&nbsp;
103
+ <a href="#M000009">loaded?</a>&nbsp;&nbsp;
103
104
  <a href="#M000005">new</a>&nbsp;&nbsp;
104
105
  <a href="#M000007">register</a>&nbsp;&nbsp;
106
+ <a href="#M000010">resource</a>&nbsp;&nbsp;
105
107
  </div>
106
108
  </div>
107
109
 
@@ -123,6 +125,24 @@ It is a singleton so you use like this: GemPlugins::Manager.instance.load
123
125
 
124
126
 
125
127
 
128
+ <div id="attribute-list">
129
+ <h3 class="section-bar">Attributes</h3>
130
+
131
+ <div class="name-list">
132
+ <table>
133
+ <tr class="top-aligned-row context-row">
134
+ <td class="context-item-name">gems</td>
135
+ <td class="context-item-value">&nbsp;[R]&nbsp;</td>
136
+ <td class="context-item-desc"></td>
137
+ </tr>
138
+ <tr class="top-aligned-row context-row">
139
+ <td class="context-item-name">plugins</td>
140
+ <td class="context-item-value">&nbsp;[R]&nbsp;</td>
141
+ <td class="context-item-desc"></td>
142
+ </tr>
143
+ </table>
144
+ </div>
145
+ </div>
126
146
 
127
147
 
128
148
 
@@ -146,20 +166,42 @@ It is a singleton so you use like this: GemPlugins::Manager.instance.load
146
166
 
147
167
  <h3 class="section-bar">Public Instance methods</h3>
148
168
 
149
- <div id="method-M000009" class="method-detail">
150
- <a name="M000009"></a>
169
+ <div id="method-M000011" class="method-detail">
170
+ <a name="M000011"></a>
151
171
 
152
172
  <div class="method-heading">
153
- <a href="Manager.src/M000009.html" target="Code" class="method-signature"
154
- onclick="popupCode('Manager.src/M000009.html');return false;">
155
- <span class="method-name">available</span><span class="method-args">()</span>
173
+ <a href="Manager.src/M000011.html" target="Code" class="method-signature"
174
+ onclick="popupCode('Manager.src/M000011.html');return false;">
175
+ <span class="method-name">config</span><span class="method-args">(gem_name, options={})</span>
156
176
  </a>
157
177
  </div>
158
178
 
159
179
  <div class="method-description">
160
180
  <p>
161
- Returns a map of URIs-&gt;{&quot;name&quot; =&gt; Plugin} that you can use
162
- to investigate available handlers.
181
+ While <a href="Manager.html#M000010">Manager.resource</a> will find
182
+ arbitrary resources, a special case is when you need to load a set of
183
+ configuration defaults. <a href="../GemPlugin.html">GemPlugin</a>
184
+ normalizes this to be if you have a file
185
+ &quot;resources/defaults.yaml&quot; then you&#8217;ll be able to load them
186
+ via <a href="Manager.html#M000011">Manager.config</a>.
187
+ </p>
188
+ <p>
189
+ How you use the method is you get the options the user wants set, pass them
190
+ to Manager.instance.config, and what you get back is a new Hash with the
191
+ user&#8217;s settings overriding the defaults.
192
+ </p>
193
+ <pre>
194
+ opts = Manager.instance.config &quot;mygem&quot;, :age =&gt; 12, :max_load =&gt; .9
195
+ </pre>
196
+ <p>
197
+ In the above case, if defaults had {:age =&gt; 14} then it would be changed
198
+ to 12.
199
+ </p>
200
+ <p>
201
+ This loads the .yaml file on the fly every time, so doing it a whole lot is
202
+ very stupid. If you need to make frequent calls to this, call it once with
203
+ no options (Manager.instance.config) then use the returned defaults
204
+ directly from then on.
163
205
  </p>
164
206
  </div>
165
207
  </div>
@@ -228,6 +270,23 @@ mongrel, and rails are ever used to determine if it should be included.
228
270
  </div>
229
271
  </div>
230
272
 
273
+ <div id="method-M000009" class="method-detail">
274
+ <a name="M000009"></a>
275
+
276
+ <div class="method-heading">
277
+ <a href="Manager.src/M000009.html" target="Code" class="method-signature"
278
+ onclick="popupCode('Manager.src/M000009.html');return false;">
279
+ <span class="method-name">loaded?</span><span class="method-args">(gem_name)</span>
280
+ </a>
281
+ </div>
282
+
283
+ <div class="method-description">
284
+ <p>
285
+ Simply says whether the given gem has been loaded yet or not.
286
+ </p>
287
+ </div>
288
+ </div>
289
+
231
290
  <div id="method-M000007" class="method-detail">
232
291
  <a name="M000007"></a>
233
292
 
@@ -247,6 +306,46 @@ plugin to a category.
247
306
  </div>
248
307
  </div>
249
308
 
309
+ <div id="method-M000010" class="method-detail">
310
+ <a name="M000010"></a>
311
+
312
+ <div class="method-heading">
313
+ <a href="Manager.src/M000010.html" target="Code" class="method-signature"
314
+ onclick="popupCode('Manager.src/M000010.html');return false;">
315
+ <span class="method-name">resource</span><span class="method-args">(gem_name, path)</span>
316
+ </a>
317
+ </div>
318
+
319
+ <div class="method-description">
320
+ <p>
321
+ GemPlugins can have a &#8216;resources&#8217; directory which is packaged
322
+ with them and can hold any data resources the plugin may need. The main
323
+ problem is that it&#8217;s difficult to figure out where these resources
324
+ are actually located on the file system. The resource method tries to
325
+ locate the real path for a given resource path.
326
+ </p>
327
+ <p>
328
+ Let&#8217;s say you have a &#8216;resources/stylesheets/default.css&#8217;
329
+ file in your gem distribution, then finding where this file really is
330
+ involves:
331
+ </p>
332
+ <pre>
333
+ Manager.instance.resource(&quot;mygem&quot;, &quot;/stylesheets/default.css&quot;)
334
+ </pre>
335
+ <p>
336
+ You either get back the full path to the resource or you get a nil if it
337
+ doesn&#8217;t exist.
338
+ </p>
339
+ <p>
340
+ If you request a path for a <a href="../GemPlugin.html">GemPlugin</a> that
341
+ hasn&#8217;t been loaded yet then it will throw an <a
342
+ href="PluginNotLoaded.html">PluginNotLoaded</a> exception. The gem may be
343
+ present on your system in this case, but you just haven&#8217;t loaded it
344
+ with Manager.instance.load properly.
345
+ </p>
346
+ </div>
347
+ </div>
348
+
250
349
 
251
350
  </div>
252
351
 
@@ -10,10 +10,14 @@
10
10
  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
11
11
  </head>
12
12
  <body class="standalone-code">
13
- <pre> <span class="ruby-comment cmt"># File lib/gem_plugin.rb, line 63</span>
14
- 63: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>
15
- 64: <span class="ruby-ivar">@plugins</span> = {}
16
- 65: <span class="ruby-ivar">@loaded_gems</span> = []
17
- 66: <span class="ruby-keyword kw">end</span></pre>
13
+ <pre> <span class="ruby-comment cmt"># File lib/gem_plugin.rb, line 69</span>
14
+ 69: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>
15
+ 70: <span class="ruby-comment cmt"># plugins that have been loaded</span>
16
+ 71: <span class="ruby-ivar">@plugins</span> = {}
17
+ 72:
18
+ 73: <span class="ruby-comment cmt"># keeps track of gems which have been loaded already by the manager *and*</span>
19
+ 74: <span class="ruby-comment cmt"># where they came from so that they can be referenced later</span>
20
+ 75: <span class="ruby-ivar">@gems</span> = {}
21
+ 76: <span class="ruby-keyword kw">end</span></pre>
18
22
  </body>
19
23
  </html>
@@ -10,34 +10,35 @@
10
10
  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
11
11
  </head>
12
12
  <body class="standalone-code">
13
- <pre> <span class="ruby-comment cmt"># File lib/gem_plugin.rb, line 91</span>
14
- 91: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">load</span>(<span class="ruby-identifier">needs</span> = {})
15
- 92: <span class="ruby-identifier">sdir</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-constant">Gem</span>.<span class="ruby-identifier">dir</span>, <span class="ruby-value str">&quot;specifications&quot;</span>)
16
- 93: <span class="ruby-identifier">gems</span> = <span class="ruby-constant">Gem</span><span class="ruby-operator">::</span><span class="ruby-constant">SourceIndex</span>.<span class="ruby-identifier">from_installed_gems</span>(<span class="ruby-identifier">sdir</span>)
17
- 94: <span class="ruby-identifier">needs</span> = <span class="ruby-identifier">needs</span>.<span class="ruby-identifier">merge</span>({<span class="ruby-value str">&quot;gem_plugin&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">INCLUDE</span>})
18
- 95:
19
- 96: <span class="ruby-identifier">gems</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">path</span>, <span class="ruby-identifier">gem</span><span class="ruby-operator">|</span>
20
- 97: <span class="ruby-comment cmt"># don't load gems more than once</span>
21
- 98: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@loaded_gems</span>.<span class="ruby-identifier">include?</span> <span class="ruby-identifier">gem</span>.<span class="ruby-identifier">name</span>
22
- 99: <span class="ruby-identifier">check</span> = <span class="ruby-identifier">needs</span>.<span class="ruby-identifier">dup</span>
23
- 100:
24
- 101: <span class="ruby-comment cmt"># rolls through the depends and inverts anything it finds</span>
25
- 102: <span class="ruby-identifier">gem</span>.<span class="ruby-identifier">dependencies</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">dep</span><span class="ruby-operator">|</span>
26
- 103: <span class="ruby-comment cmt"># this will fail if a gem is depended more than once</span>
27
- 104: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">check</span>.<span class="ruby-identifier">has_key?</span> <span class="ruby-identifier">dep</span>.<span class="ruby-identifier">name</span>
28
- 105: <span class="ruby-identifier">check</span>[<span class="ruby-identifier">dep</span>.<span class="ruby-identifier">name</span>] = <span class="ruby-operator">!</span><span class="ruby-identifier">check</span>[<span class="ruby-identifier">dep</span>.<span class="ruby-identifier">name</span>]
29
- 106: <span class="ruby-keyword kw">end</span>
30
- 107: <span class="ruby-keyword kw">end</span>
31
- 108:
32
- 109: <span class="ruby-comment cmt"># now since excluded gems start as true, inverting them</span>
33
- 110: <span class="ruby-comment cmt"># makes them false so we'll skip this gem if any excludes are found</span>
34
- 111: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">check</span>.<span class="ruby-identifier">select</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">name</span>,<span class="ruby-identifier">test</span><span class="ruby-operator">|</span> <span class="ruby-operator">!</span><span class="ruby-identifier">test</span>}).<span class="ruby-identifier">length</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
35
- 112: <span class="ruby-comment cmt"># looks like no needs were set to false, so it's good</span>
36
- 113: <span class="ruby-identifier">require_gem</span> <span class="ruby-identifier">gem</span>.<span class="ruby-identifier">name</span>
37
- 114: <span class="ruby-ivar">@loaded_gems</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">gem</span>.<span class="ruby-identifier">name</span>
38
- 115: <span class="ruby-keyword kw">end</span>
39
- 116:
40
- 117: <span class="ruby-keyword kw">end</span>
41
- 118: <span class="ruby-keyword kw">end</span></pre>
13
+ <pre> <span class="ruby-comment cmt"># File lib/gem_plugin.rb, line 101</span>
14
+ 101: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">load</span>(<span class="ruby-identifier">needs</span> = {})
15
+ 102: <span class="ruby-identifier">sdir</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-constant">Gem</span>.<span class="ruby-identifier">dir</span>, <span class="ruby-value str">&quot;specifications&quot;</span>)
16
+ 103: <span class="ruby-identifier">gems</span> = <span class="ruby-constant">Gem</span><span class="ruby-operator">::</span><span class="ruby-constant">SourceIndex</span>.<span class="ruby-identifier">from_installed_gems</span>(<span class="ruby-identifier">sdir</span>)
17
+ 104: <span class="ruby-identifier">needs</span> = <span class="ruby-identifier">needs</span>.<span class="ruby-identifier">merge</span>({<span class="ruby-value str">&quot;gem_plugin&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">INCLUDE</span>})
18
+ 105:
19
+ 106: <span class="ruby-identifier">gems</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">path</span>, <span class="ruby-identifier">gem</span><span class="ruby-operator">|</span>
20
+ 107: <span class="ruby-comment cmt"># don't load gems more than once</span>
21
+ 108: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@gems</span>.<span class="ruby-identifier">has_key?</span> <span class="ruby-identifier">gem</span>.<span class="ruby-identifier">name</span>
22
+ 109: <span class="ruby-identifier">check</span> = <span class="ruby-identifier">needs</span>.<span class="ruby-identifier">dup</span>
23
+ 110:
24
+ 111: <span class="ruby-comment cmt"># rolls through the depends and inverts anything it finds</span>
25
+ 112: <span class="ruby-identifier">gem</span>.<span class="ruby-identifier">dependencies</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">dep</span><span class="ruby-operator">|</span>
26
+ 113: <span class="ruby-comment cmt"># this will fail if a gem is depended more than once</span>
27
+ 114: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">check</span>.<span class="ruby-identifier">has_key?</span> <span class="ruby-identifier">dep</span>.<span class="ruby-identifier">name</span>
28
+ 115: <span class="ruby-identifier">check</span>[<span class="ruby-identifier">dep</span>.<span class="ruby-identifier">name</span>] = <span class="ruby-operator">!</span><span class="ruby-identifier">check</span>[<span class="ruby-identifier">dep</span>.<span class="ruby-identifier">name</span>]
29
+ 116: <span class="ruby-keyword kw">end</span>
30
+ 117: <span class="ruby-keyword kw">end</span>
31
+ 118:
32
+ 119: <span class="ruby-comment cmt"># now since excluded gems start as true, inverting them</span>
33
+ 120: <span class="ruby-comment cmt"># makes them false so we'll skip this gem if any excludes are found</span>
34
+ 121: <span class="ruby-keyword kw">if</span> (<span class="ruby-identifier">check</span>.<span class="ruby-identifier">select</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">name</span>,<span class="ruby-identifier">test</span><span class="ruby-operator">|</span> <span class="ruby-operator">!</span><span class="ruby-identifier">test</span>}).<span class="ruby-identifier">length</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
35
+ 122: <span class="ruby-comment cmt"># looks like no needs were set to false, so it's good</span>
36
+ 123: <span class="ruby-identifier">require</span> <span class="ruby-node">&quot;#{gem.name}/init&quot;</span>
37
+ 124: <span class="ruby-ivar">@gems</span>[<span class="ruby-identifier">gem</span>.<span class="ruby-identifier">name</span>] = <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-constant">Gem</span>.<span class="ruby-identifier">dir</span>, <span class="ruby-value str">&quot;gems&quot;</span>, <span class="ruby-node">&quot;#{gem.name}-#{gem.version}&quot;</span>)
38
+ 125: <span class="ruby-keyword kw">end</span>
39
+ 126: <span class="ruby-keyword kw">end</span>
40
+ 127:
41
+ 128: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
42
+ 129: <span class="ruby-keyword kw">end</span></pre>
42
43
  </body>
43
44
  </html>
@@ -10,10 +10,10 @@
10
10
  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
11
11
  </head>
12
12
  <body class="standalone-code">
13
- <pre> <span class="ruby-comment cmt"># File lib/gem_plugin.rb, line 124</span>
14
- 124: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">register</span>(<span class="ruby-identifier">category</span>, <span class="ruby-identifier">name</span>, <span class="ruby-identifier">klass</span>)
15
- 125: <span class="ruby-ivar">@plugins</span>[<span class="ruby-identifier">category</span>] <span class="ruby-operator">||=</span> {}
16
- 126: <span class="ruby-ivar">@plugins</span>[<span class="ruby-identifier">category</span>][<span class="ruby-identifier">name</span>.<span class="ruby-identifier">downcase</span>] = <span class="ruby-identifier">klass</span>
17
- 127: <span class="ruby-keyword kw">end</span></pre>
13
+ <pre> <span class="ruby-comment cmt"># File lib/gem_plugin.rb, line 135</span>
14
+ 135: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">register</span>(<span class="ruby-identifier">category</span>, <span class="ruby-identifier">name</span>, <span class="ruby-identifier">klass</span>)
15
+ 136: <span class="ruby-ivar">@plugins</span>[<span class="ruby-identifier">category</span>] <span class="ruby-operator">||=</span> {}
16
+ 137: <span class="ruby-ivar">@plugins</span>[<span class="ruby-identifier">category</span>][<span class="ruby-identifier">name</span>.<span class="ruby-identifier">downcase</span>] = <span class="ruby-identifier">klass</span>
17
+ 138: <span class="ruby-keyword kw">end</span></pre>
18
18
  </body>
19
19
  </html>