rdoc_osx_dictionary 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data.tar.gz.sig ADDED
Binary file
data/History.txt ADDED
@@ -0,0 +1,6 @@
1
+ === 1.0.0 / 2010-01-27
2
+
3
+ * 1 major enhancement
4
+
5
+ * Birthday!
6
+
data/Manifest.txt ADDED
@@ -0,0 +1,9 @@
1
+ History.txt
2
+ Manifest.txt
3
+ README.txt
4
+ Rakefile
5
+ bin/rdoc_osx_dictionary
6
+ data/RubyGemsDictionary.css
7
+ data/RubyGemsInfo.plist
8
+ lib/rdoc_osx_dictionary.rb
9
+ lib/rubygems_plugin.rb
data/README.txt ADDED
@@ -0,0 +1,48 @@
1
+ = rdoc_osx_dictionary
2
+
3
+ * http://rubyforge.org/projects/seattlerb
4
+
5
+ == DESCRIPTION:
6
+
7
+ rdoc via Apple's Dictionary.app. Automatically builds and installs an
8
+ Apple Dictionary with all rdoc nicely formatted.
9
+
10
+ == FEATURES/PROBLEMS:
11
+
12
+ * Automatically builds and installs an Apple Dictionary with all rdoc
13
+ nicely formatted.
14
+
15
+ == REQUIREMENTS:
16
+
17
+ * rdoc gem
18
+ * rubygems
19
+ * Mac OS X w/ Developer Tools
20
+
21
+ == INSTALL:
22
+
23
+ * sudo gem install rdoc_osx_dictionary
24
+
25
+ == LICENSE:
26
+
27
+ (The MIT License)
28
+
29
+ Copyright (c) Ryan Davis, seattle.rb
30
+
31
+ Permission is hereby granted, free of charge, to any person obtaining
32
+ a copy of this software and associated documentation files (the
33
+ 'Software'), to deal in the Software without restriction, including
34
+ without limitation the rights to use, copy, modify, merge, publish,
35
+ distribute, sublicense, and/or sell copies of the Software, and to
36
+ permit persons to whom the Software is furnished to do so, subject to
37
+ the following conditions:
38
+
39
+ The above copyright notice and this permission notice shall be
40
+ included in all copies or substantial portions of the Software.
41
+
42
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
43
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
44
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
45
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
46
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
47
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
48
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,14 @@
1
+ # -*- ruby -*-
2
+
3
+ require 'rubygems'
4
+ require 'hoe'
5
+
6
+ Hoe.plugin :seattlerb
7
+
8
+ Hoe.spec 'rdoc_osx_dictionary' do
9
+ developer 'Ryan Davis', 'ryand-ruby@zenspider.com'
10
+
11
+ self.rubyforge_name = 'seattlerb'
12
+ end
13
+
14
+ # vim: syntax=ruby
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/ruby -ws
2
+
3
+ $v ||= false
4
+
5
+ require 'rubygems'
6
+ require 'rdoc_osx_dictionary'
7
+
8
+ dict = RDoc::OSXDictionary.new
9
+ dict.make
@@ -0,0 +1,52 @@
1
+ @charset "UTF-8";
2
+ @namespace d url(http://www.apple.com/DTDs/DictionaryService-1.0.rng);
3
+
4
+ d|entry {
5
+ }
6
+
7
+ h1, h2, h3 {
8
+ font-family: 'Helvetica Neue', Helvetica, sans-serif;
9
+ text-shadow: 0px 0px 0px #000;
10
+ }
11
+
12
+ h1 {
13
+ font-size: 150%;
14
+ }
15
+
16
+ h2 {
17
+ font-size: 125%;
18
+ }
19
+
20
+ h3 {
21
+ font-size: 100%;
22
+ }
23
+
24
+ pre {
25
+ margin: 0.5em;
26
+ padding: 0.5em;
27
+ font-family: Monaco;
28
+ font-size: 12px;
29
+ background-color: #efefef;
30
+ border: 1px solid #333;
31
+ }
32
+
33
+ p.signatures {
34
+ font-family: Monaco;
35
+ font-size: 12px;
36
+ padding: 0 1em;
37
+ }
38
+
39
+ a {
40
+ color: #000;
41
+ text-decoration: none;
42
+ }
43
+
44
+ span.column {
45
+ display: block;
46
+ border: solid 2px #c0c0c0;
47
+ margin-left: 2em;
48
+ margin-right: 2em;
49
+ margin-top: 0.5em;
50
+ margin-bottom: 0.5em;
51
+ padding: 0.5em;
52
+ }
@@ -0,0 +1,35 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>CFBundleDevelopmentRegion</key>
6
+ <string>English</string>
7
+ <key>CFBundleIdentifier</key>
8
+ <string>com.apple.dictionary.RubyGems</string>
9
+ <key>CFBundleName</key>
10
+ <string>Ruby + Gems</string>
11
+ <key>CFBundleShortVersionString</key>
12
+ <string>1.0</string>
13
+ <key>DCSDictionaryCopyright</key>
14
+ <string>Copyright © 2007 Apple Inc.</string>
15
+ <key>DCSDictionaryManufacturerName</key>
16
+ <string>Apple Inc.</string>
17
+ <key>DCSDictionaryFrontMatterReferenceID</key>
18
+ <string>front_back_matter</string>
19
+ <key>DCSDictionaryPrefsHTML</key>
20
+ <string>RubyGemsDictionary_prefs.html</string>
21
+ <key>DCSDictionaryXSL</key>
22
+ <string>RubyGemsDictionary.xsl</string>
23
+ <key>DCSDictionaryDefaultPrefs</key>
24
+ <dict>
25
+ <key>pronunciation</key>
26
+ <string>0</string>
27
+ <key>display-column</key>
28
+ <string>1</string>
29
+ <key>display-picture</key>
30
+ <string>1</string>
31
+ <key>version</key>
32
+ <string>1</string>
33
+ </dict>
34
+ </dict>
35
+ </plist>
@@ -0,0 +1,329 @@
1
+ #!/usr/bin/ruby -w
2
+
3
+ require 'fileutils'
4
+ require 'rdoc/ri/driver'
5
+
6
+ class RDoc::OSXDictionary
7
+ VERSION = '1.0.0'
8
+
9
+ exclude = [] # nothing to exclude currently
10
+ EXCLUDE = Hash[*exclude.map { |k| [k, true] }.flatten]
11
+
12
+ NAME_MAP = {
13
+ '!' => 'bang',
14
+ '%' => 'percent',
15
+ '&' => 'and',
16
+ '*' => 'times',
17
+ '**' => 'times2',
18
+ '+' => 'plus',
19
+ '-' => 'minus',
20
+ '/' => 'div',
21
+ '<' => 'lt',
22
+ '<=' => 'lte',
23
+ '<=>' => 'spaceship',
24
+ "<\<" => 'lt2',
25
+ '==' => 'equals2',
26
+ '===' => 'equals3',
27
+ '=~' => 'equalstilde',
28
+ '>' => 'gt',
29
+ '>=' => 'ge',
30
+ '>>' => 'gt2',
31
+ '+@' => 'unary_plus',
32
+ '-@' => 'unary_minus',
33
+ '[]' => 'idx',
34
+ '[]=' => 'idx_equals',
35
+ '^' => 'carat',
36
+ '|' => 'or',
37
+ '~' => 'tilde',
38
+ '=' => 'eq',
39
+ '?' => 'eh',
40
+ '`' => 'backtick',
41
+ }
42
+
43
+ NAME_MAP_RE = Regexp.new(NAME_MAP.keys.sort_by { |k| k.length }.map {|s|
44
+ Regexp.escape(s)
45
+ }.reverse.join("|"))
46
+
47
+
48
+ def display_class_info definition
49
+ name = definition["name"]
50
+ fullname = definition["full_name"]
51
+ supername = definition["superclass"]
52
+ includes = (definition["includes"]||[]).join(", ")
53
+ classmeths = definition["class_methods"].map { |hash| hash["name"] }
54
+ instmeths = definition["instance_methods"].map { |hash| hash["name"] }
55
+ type = supername ? "class" : "module"
56
+ title = supername ? "class #{fullname} < #{supername}" : "module #{fullname}"
57
+ comment = Array(definition["comment"]).join("\n")
58
+ constants = Array(definition["constants"])
59
+ sources = definition["sources"].map { |path|
60
+ next if path =~ /^.System/
61
+ path.sub(%r%^.*?1\.[89]/doc/([^/]+).*%, '\1')
62
+ }.compact
63
+
64
+ comment = "Improperly formatted" if EXCLUDE[fullname]
65
+
66
+ id = "#{type}_#{fullname}".munge.gsub(/[\s:.#]/, '_')
67
+
68
+ result = []
69
+
70
+ result << <<-"EOD".gsub(/^ /, '')
71
+ <d:entry id="#{id}" d:title="#{fullname}">
72
+ <d:index d:value="#{fullname.munge}"/>
73
+ <d:index d:value="#{name.munge}"/>
74
+ <h1>#{title.munge}</h1>
75
+
76
+ #{comment}
77
+ EOD
78
+
79
+ constants.map! { |c| c["name"] }
80
+
81
+ ext, ext_type = sources.size == 1 ? ["From", :str] : ["Extensions", :list]
82
+
83
+ [["Includes", includes.munge, :str],
84
+ ["Constants", constants.join(", "), :str],
85
+ ["Class Methods", classmeths.join(", ").munge, :str],
86
+ ["Instance Methods", instmeths.join(", ").munge, :str],
87
+ [ext, sources, ext_type]].each do |n, s, t|
88
+ next if s.empty?
89
+ case t
90
+ when :str then
91
+ result << "<h3>#{n}:</h3><p>#{s}</p>"
92
+ when :list then
93
+ items = s.map { |o| "<li>#{o}</li>" }.join("\n")
94
+ result << "<h3>#{n}:</h3><ul>#{items}</ul>"
95
+ else
96
+ raise "unknown type #{t.inspect}"
97
+ end
98
+ end
99
+
100
+ %w(name comment superclass includes constants class_methods
101
+ instance_methods sources display_name full_name).each do |name|
102
+ definition.delete name
103
+ end
104
+
105
+ result << <<-"EOD".gsub(/^ /, '')
106
+ </d:entry>
107
+ EOD
108
+ result.join("\n")
109
+ end
110
+
111
+ def display_method_info definition
112
+ fullname = definition["full_name"]
113
+ name = definition["name"]
114
+ id = fullname.gsub(/:|#/, '_').gsub(/#{NAME_MAP_RE}/) { |x| "_"+NAME_MAP[x] }
115
+
116
+ params = definition["params"]
117
+ comment = Array(definition["comment"]).join("\n")
118
+ comment = "undocumented" if comment.empty?
119
+
120
+ comment = "Improperly formatted" if EXCLUDE[fullname]
121
+
122
+ result = <<-"EOD".gsub(/^ /, '')
123
+ <d:entry id="def_#{id}" d:title="#{id}">
124
+ <d:index d:value="#{fullname.munge}"/>
125
+ <d:index d:value="#{name.munge}"/>
126
+ <h1>#{fullname.munge}</h1>
127
+ <p class="signatures">
128
+ <b>#{name.munge}#{params.munge}</b>
129
+ </p>
130
+ #{comment}
131
+ </d:entry>
132
+ EOD
133
+ end
134
+
135
+ def d_header
136
+ result = <<-"EOD"
137
+ <?xml version="1.0" encoding="UTF-8"?>
138
+ <!--
139
+ This is a sample dictionary source file.
140
+ It can be built using Dictionary Development Kit.
141
+ -->
142
+ <d:dictionary xmlns="http://www.w3.org/1999/xhtml" xmlns:d="http://www.apple.com/DTDs/DictionaryService-1.0.rng">
143
+ EOD
144
+ end
145
+
146
+ def d_entry fullname, definition, klass = false
147
+ if klass then
148
+ display_class_info definition
149
+ else
150
+ display_method_info definition
151
+ end
152
+ end
153
+
154
+ def d_footer
155
+ result = <<-"EOD"
156
+ <d:entry id="front_back_matter" d:title="Front/Back Matter">
157
+ <h1><b>RubyGems Dictionary</b></h1>
158
+ <h2>Front/Back Matter</h2>
159
+ <div>
160
+ Provides dictionary definitions for all known installed ruby gems.<br/><br/>
161
+ </div>
162
+ <div>
163
+ <b>To see</b> this page,
164
+ <ol>
165
+ <li>Open "Go" menu.</li>
166
+ <li>Choose "Front/Back Matter" menu item.
167
+ If it has sub-menu items, choose one of them.</li>
168
+ </ol>
169
+ </div>
170
+ <div>
171
+ <b>To prepare</b> the menu item, do the followings.
172
+ <ol>
173
+ <li>Prepare this page source as an entry.</li>
174
+ <li>Add "DCSDictionaryFrontMatterReferenceID" key and its value to the plist of the dictionary.
175
+ The value should be the string of this page entry id. </li>
176
+ </ol>
177
+ </div>
178
+ <br/>
179
+ </d:entry>
180
+ </d:dictionary>
181
+ EOD
182
+ end
183
+
184
+ def make
185
+ seen = {}
186
+ ri = RDoc::RI::Driver.new
187
+ dirty = false
188
+ dict = ri.class_cache
189
+ base = File.expand_path "~/.ri/"
190
+
191
+ dict.sort.each do |klass, definition|
192
+ path = "#{base}/cache/#{klass}.xml"
193
+
194
+ next if seen[klass.downcase]
195
+ seen[klass.downcase] = true
196
+
197
+ unless File.exist? path then
198
+ warn "New entries for dictionary. Rebuilding dictionary." unless dirty
199
+ dirty = true
200
+
201
+ warn klass if $v
202
+
203
+ File.open(path, "w") do |f|
204
+ methods = ri.load_cache_for(klass)
205
+ next if methods.nil? || methods.empty?
206
+ result = []
207
+ result << d_entry(klass, dict[klass], true)
208
+
209
+ methods.each do |k,v|
210
+ result << d_entry(k, v)
211
+ end
212
+ result = result.join("\n")
213
+ f.puts result
214
+ end
215
+ end
216
+ end
217
+
218
+ return unless dirty
219
+
220
+ dict_src_path = "#{base}/RubyGemsDictionary.xml"
221
+
222
+ File.open(dict_src_path, "w") do |xml|
223
+ xml.puts d_header
224
+
225
+ dict.sort.each do |klass, definition|
226
+ xml.puts File.read("#{base}/cache/#{klass}.xml")
227
+ end
228
+
229
+ xml.puts d_footer
230
+ end
231
+
232
+ dict_name = "RubyAndGems"
233
+ data = File.expand_path("#{__FILE__}/../../data")
234
+ dict_path = File.expand_path "~/Library/Dictionaries"
235
+
236
+ Dir.chdir base do
237
+ system("/Developer/Extras/Dictionary Development Kit/bin/build_dict.sh",
238
+ dict_name, dict_src_path,
239
+ "#{data}/RubyGemsDictionary.css",
240
+ "#{data}/RubyGemsInfo.plist")
241
+ end
242
+
243
+ warn "installing"
244
+
245
+ FileUtils.mkdir_p dict_path
246
+
247
+ system("rsync", "-r",
248
+ "#{base}/objects/#{dict_name}.dictionary",
249
+ "#{dict_path}/#{dict_name}.dictionary")
250
+
251
+ FileUtils.touch dict_path
252
+
253
+ warn "installed"
254
+ warn "Run Dictionary.app to use the new dictionary. (activate in prefs!)"
255
+ end
256
+
257
+ @hooked = false
258
+
259
+ def self.install_gem_hooks
260
+ return if @hooked
261
+
262
+ cmd = File.expand_path File.join(__FILE__, "../../bin/rdoc_osx_dictionary")
263
+
264
+ # post_install isn't actually fully post-install... so I must
265
+ # force via at_exit :(
266
+ Gem.post_install do |i|
267
+ at_exit do
268
+ warn "updating OSX ruby + gem dictionary, if necessary"
269
+ system cmd
270
+ end
271
+ end
272
+
273
+ Gem.post_uninstall do |i|
274
+ at_exit do
275
+ require 'fileutils'
276
+ warn "nuking old ri cache to force rebuild"
277
+ FileUtils.rm_r File.expand_path("~/.ri")
278
+ system cmd
279
+ end
280
+ end
281
+
282
+ @hooked = true
283
+ end
284
+ end
285
+
286
+ class String
287
+ def munge
288
+ self.gsub(/&/, '&amp;').gsub(/>/, '&gt;').gsub(/</, '&lt;')
289
+ end
290
+ end
291
+
292
+ class RDoc::Markup::Flow::LIST # ARG!
293
+ def to_s
294
+ pre, post = { :NUMBER => ['<ol>', '</ol>'] }[self.type] || ['<ul>', '</ul>']
295
+
296
+ raise "no: #{self.type}" unless pre
297
+
298
+ "#{pre}#{contents.join("\n")}#{post}"
299
+ end
300
+ end
301
+
302
+ class Struct
303
+ alias :old_to_s :to_s
304
+
305
+ MARKUP = {
306
+ "RULE" => [nil, nil],
307
+ "H" => ["<h2>", "</h2>"],
308
+ "P" => ["<p>", "</p>"],
309
+ "VERB" => ["<pre>", "</pre>"],
310
+ "LI" => ['<li>', '</li>'],
311
+ }
312
+
313
+ def body
314
+ self.text
315
+ end
316
+
317
+ def to_s
318
+ name = self.class.name
319
+ if name =~ /Flow/ then
320
+ short = name.split(/::/).last
321
+ raise short unless MARKUP.has_key? short
322
+ pre, post = MARKUP[short]
323
+ return "" unless pre
324
+ "#{pre}#{self.body}#{post}"
325
+ else
326
+ old_to_s
327
+ end
328
+ end
329
+ end
@@ -0,0 +1,4 @@
1
+ require 'rubygems/command_manager'
2
+ require 'rdoc_osx_dictionary'
3
+
4
+ RDoc::OSXDictionary.install_gem_hooks
metadata ADDED
@@ -0,0 +1,129 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rdoc_osx_dictionary
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Ryan Davis
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIDPjCCAiagAwIBAgIBADANBgkqhkiG9w0BAQUFADBFMRMwEQYDVQQDDApyeWFu
14
+ ZC1ydWJ5MRkwFwYKCZImiZPyLGQBGRYJemVuc3BpZGVyMRMwEQYKCZImiZPyLGQB
15
+ GRYDY29tMB4XDTA5MDMwNjE4NTMxNVoXDTEwMDMwNjE4NTMxNVowRTETMBEGA1UE
16
+ AwwKcnlhbmQtcnVieTEZMBcGCgmSJomT8ixkARkWCXplbnNwaWRlcjETMBEGCgmS
17
+ JomT8ixkARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALda
18
+ b9DCgK+627gPJkB6XfjZ1itoOQvpqH1EXScSaba9/S2VF22VYQbXU1xQXL/WzCkx
19
+ taCPaLmfYIaFcHHCSY4hYDJijRQkLxPeB3xbOfzfLoBDbjvx5JxgJxUjmGa7xhcT
20
+ oOvjtt5P8+GSK9zLzxQP0gVLS/D0FmoE44XuDr3iQkVS2ujU5zZL84mMNqNB1znh
21
+ GiadM9GHRaDiaxuX0cIUBj19T01mVE2iymf9I6bEsiayK/n6QujtyCbTWsAS9Rqt
22
+ qhtV7HJxNKuPj/JFH0D2cswvzznE/a5FOYO68g+YCuFi5L8wZuuM8zzdwjrWHqSV
23
+ gBEfoTEGr7Zii72cx+sCAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw
24
+ HQYDVR0OBBYEFEfFe9md/r/tj/Wmwpy+MI8d9k/hMA0GCSqGSIb3DQEBBQUAA4IB
25
+ AQAY59gYvDxqSqgC92nAP9P8dnGgfZgLxP237xS6XxFGJSghdz/nI6pusfCWKM8m
26
+ vzjjH2wUMSSf3tNudQ3rCGLf2epkcU13/rguI88wO6MrE0wi4ZqLQX+eZQFskJb/
27
+ w6x9W1ur8eR01s397LSMexySDBrJOh34cm2AlfKr/jokKCTwcM0OvVZnAutaovC0
28
+ l1SVZ0ecg88bsWHA0Yhh7NFxK1utWoIhtB6AFC/+trM0FQEB/jZkIS8SaNzn96Rl
29
+ n0sZEf77FLf5peR8TP/PtmIg7Cyqz23sLM4mCOoTGIy5OcZ8TdyiyINUHtb5ej/T
30
+ FBHgymkyj/AOSqKRIpXPhjC6
31
+ -----END CERTIFICATE-----
32
+
33
+ date: 2010-01-27 00:00:00 -08:00
34
+ default_executable:
35
+ dependencies:
36
+ - !ruby/object:Gem::Dependency
37
+ name: rubyforge
38
+ type: :development
39
+ version_requirement:
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: 2.0.3
45
+ version:
46
+ - !ruby/object:Gem::Dependency
47
+ name: gemcutter
48
+ type: :development
49
+ version_requirement:
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 0.3.0
55
+ version:
56
+ - !ruby/object:Gem::Dependency
57
+ name: minitest
58
+ type: :development
59
+ version_requirement:
60
+ version_requirements: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: 1.5.0
65
+ version:
66
+ - !ruby/object:Gem::Dependency
67
+ name: hoe
68
+ type: :development
69
+ version_requirement:
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 2.5.0
75
+ version:
76
+ description: |-
77
+ rdoc via Apple's Dictionary.app. Automatically builds and installs an
78
+ Apple Dictionary with all rdoc nicely formatted.
79
+ email:
80
+ - ryand-ruby@zenspider.com
81
+ executables:
82
+ - rdoc_osx_dictionary
83
+ extensions: []
84
+
85
+ extra_rdoc_files:
86
+ - History.txt
87
+ - Manifest.txt
88
+ - README.txt
89
+ files:
90
+ - History.txt
91
+ - Manifest.txt
92
+ - README.txt
93
+ - Rakefile
94
+ - bin/rdoc_osx_dictionary
95
+ - data/RubyGemsDictionary.css
96
+ - data/RubyGemsInfo.plist
97
+ - lib/rdoc_osx_dictionary.rb
98
+ - lib/rubygems_plugin.rb
99
+ has_rdoc: true
100
+ homepage: http://rubyforge.org/projects/seattlerb
101
+ licenses: []
102
+
103
+ post_install_message:
104
+ rdoc_options:
105
+ - --main
106
+ - README.txt
107
+ require_paths:
108
+ - lib
109
+ required_ruby_version: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: "0"
114
+ version:
115
+ required_rubygems_version: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: "0"
120
+ version:
121
+ requirements: []
122
+
123
+ rubyforge_project: seattlerb
124
+ rubygems_version: 1.3.5
125
+ signing_key:
126
+ specification_version: 3
127
+ summary: rdoc via Apple's Dictionary.app
128
+ test_files: []
129
+
metadata.gz.sig ADDED
@@ -0,0 +1,2 @@
1
+ ��������K����'x��X�����h�醦�&wGH�2^�jU UF�7�4!�9<>R�R�S�T�F�����/�M>���̛����,��K=&¸�{:f�c��a)Z�V@@�4�����)��"ԍdV�z�F�W��|<���鎐�]���[����vh6����}O�������`nPCq#�0�p�1qF�E�[�'a[>խ|�� ��Z
2
+ ��|��[����Y��ϗ��6'D��C6��NWdǿ�K