gem_plugin 0.1 → 0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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>