kjess 1.0.0

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 (54) hide show
  1. data/CONTRIBUTING.md +45 -0
  2. data/HISTORY.rdoc +5 -0
  3. data/LICENSE +16 -0
  4. data/Manifest.txt +53 -0
  5. data/README.rdoc +44 -0
  6. data/Rakefile +337 -0
  7. data/example/client_test.rb +73 -0
  8. data/lib/kjess.rb +11 -0
  9. data/lib/kjess/client.rb +289 -0
  10. data/lib/kjess/connection.rb +119 -0
  11. data/lib/kjess/error.rb +5 -0
  12. data/lib/kjess/protocol.rb +76 -0
  13. data/lib/kjess/request.rb +31 -0
  14. data/lib/kjess/request/delete.rb +11 -0
  15. data/lib/kjess/request/dump_stats.rb +7 -0
  16. data/lib/kjess/request/flush.rb +11 -0
  17. data/lib/kjess/request/flush_all.rb +7 -0
  18. data/lib/kjess/request/get.rb +21 -0
  19. data/lib/kjess/request/quit.rb +7 -0
  20. data/lib/kjess/request/reload.rb +7 -0
  21. data/lib/kjess/request/set.rb +19 -0
  22. data/lib/kjess/request/shutdown.rb +7 -0
  23. data/lib/kjess/request/stats.rb +7 -0
  24. data/lib/kjess/request/status.rb +8 -0
  25. data/lib/kjess/request/version.rb +8 -0
  26. data/lib/kjess/response.rb +76 -0
  27. data/lib/kjess/response/client_error.rb +19 -0
  28. data/lib/kjess/response/deleted.rb +5 -0
  29. data/lib/kjess/response/dumped_stats.rb +48 -0
  30. data/lib/kjess/response/end.rb +5 -0
  31. data/lib/kjess/response/eof.rb +5 -0
  32. data/lib/kjess/response/error.rb +13 -0
  33. data/lib/kjess/response/flushed_all_queues.rb +6 -0
  34. data/lib/kjess/response/not_found.rb +5 -0
  35. data/lib/kjess/response/not_stored.rb +5 -0
  36. data/lib/kjess/response/reloaded_config.rb +6 -0
  37. data/lib/kjess/response/server_error.rb +18 -0
  38. data/lib/kjess/response/stats.rb +60 -0
  39. data/lib/kjess/response/stored.rb +5 -0
  40. data/lib/kjess/response/unknown.rb +3 -0
  41. data/lib/kjess/response/value.rb +26 -0
  42. data/lib/kjess/response/version.rb +10 -0
  43. data/lib/kjess/stats_cache.rb +31 -0
  44. data/spec/client_spec.rb +265 -0
  45. data/spec/kestrel_server.rb +137 -0
  46. data/spec/request/set_spec.rb +13 -0
  47. data/spec/request/version_spec.rb +17 -0
  48. data/spec/request_spec.rb +30 -0
  49. data/spec/response/client_error_spec.rb +17 -0
  50. data/spec/spec_helper.rb +12 -0
  51. data/spec/utils.rb +18 -0
  52. data/spec/version_spec.rb +9 -0
  53. data/tasks/kestrel.rake +70 -0
  54. metadata +193 -0
@@ -0,0 +1,45 @@
1
+ # Hi there!
2
+
3
+ I see you are interested in contributing. That is wonderful. I love
4
+ contributions.
5
+
6
+ I guarantee that there are bugs in this software. And I guarantee that there is
7
+ a feature you want that is not in here yet. As such, any and all bugs reports
8
+ are gratefully accepted, bugfixes even more so. Helping out with bugs is the
9
+ easiest way to contribute.
10
+
11
+
12
+ ## The Quick Version
13
+
14
+ * Have a [GitHub Account][].
15
+ * Search the [GitHub Issues][] and see if your issue already present. If so
16
+ add your comments, :thumbsup:, etc.
17
+ * Issue not there? Not a problem, open up a [new issue][].
18
+ * **Bug reports** please be as detailed as possible. Include:
19
+ * full ruby engine and version: `ruby -e 'puts RUBY_DESCRIPTION'`
20
+ * operating system and version
21
+ * version of kjess `ruby -e 'ruby -rubygems -e "require 'kjess'; puts KJess::VERSION'`
22
+ * as much detail about the bug as possible so I can replicated it. Feel free
23
+ to link in a [gist][]
24
+ * **New Feature**
25
+ * What the new feature should do.
26
+ * What benefit the new feature brings to the project.
27
+ * Fork the [repo][].
28
+ * Create a new branch for your issue: `git checkout -b issue/my-issue`
29
+ * Lovingly craft your contribution:
30
+ * `rake develop` to get started, or if you prefer bundler `rake develop:using_bunder && bundle`.
31
+ * `rake test` to run tests
32
+ * Make sure that `rake test` passes. Its important, I said it twice.
33
+ * Add yourself to the contributors section below.
34
+ * Submit your [pull request][].
35
+
36
+ # Contributors
37
+
38
+ * Jeremy Hinegardner
39
+
40
+ [GitHub Account]: https://github.com/signup/free "GitHub Signup"
41
+ [GitHub Issues]: https://github.com/copiousfreetime/kjess/issues "KJess Issues"
42
+ [new issue]: https://github.com/copiousfreetime/kjess/issues/new "New KJess Issue"
43
+ [gist]: https://gist.github.com/ "New Gist"
44
+ [repo]: https://github.com/copiousfreetime/kjess "KJess Repo"
45
+ [pull request]: https://help.github.com/articles/using-pull-requests "Using Pull Requests"
@@ -0,0 +1,5 @@
1
+ = KJess Changlog
2
+ == Version 1.0.0 - 2012-10-31
3
+
4
+ * Initial Release - Yeah!
5
+
data/LICENSE ADDED
@@ -0,0 +1,16 @@
1
+ ISC LICENSE - http://opensource.org/licenses/isc-license.txt
2
+
3
+ Copyright (c) 2012 Jeremy Hinegardner
4
+
5
+ Permission to use, copy, modify, and/or distribute this software for any
6
+ purpose with or without fee is hereby granted, provided that the above
7
+ copyright notice and this permission notice appear in all copies.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16
+
@@ -0,0 +1,53 @@
1
+ CONTRIBUTING.md
2
+ HISTORY.rdoc
3
+ LICENSE
4
+ Manifest.txt
5
+ README.rdoc
6
+ Rakefile
7
+ example/client_test.rb
8
+ lib/kjess.rb
9
+ lib/kjess/client.rb
10
+ lib/kjess/connection.rb
11
+ lib/kjess/error.rb
12
+ lib/kjess/protocol.rb
13
+ lib/kjess/request.rb
14
+ lib/kjess/request/delete.rb
15
+ lib/kjess/request/dump_stats.rb
16
+ lib/kjess/request/flush.rb
17
+ lib/kjess/request/flush_all.rb
18
+ lib/kjess/request/get.rb
19
+ lib/kjess/request/quit.rb
20
+ lib/kjess/request/reload.rb
21
+ lib/kjess/request/set.rb
22
+ lib/kjess/request/shutdown.rb
23
+ lib/kjess/request/stats.rb
24
+ lib/kjess/request/status.rb
25
+ lib/kjess/request/version.rb
26
+ lib/kjess/response.rb
27
+ lib/kjess/response/client_error.rb
28
+ lib/kjess/response/deleted.rb
29
+ lib/kjess/response/dumped_stats.rb
30
+ lib/kjess/response/end.rb
31
+ lib/kjess/response/eof.rb
32
+ lib/kjess/response/error.rb
33
+ lib/kjess/response/flushed_all_queues.rb
34
+ lib/kjess/response/not_found.rb
35
+ lib/kjess/response/not_stored.rb
36
+ lib/kjess/response/reloaded_config.rb
37
+ lib/kjess/response/server_error.rb
38
+ lib/kjess/response/stats.rb
39
+ lib/kjess/response/stored.rb
40
+ lib/kjess/response/unknown.rb
41
+ lib/kjess/response/value.rb
42
+ lib/kjess/response/version.rb
43
+ lib/kjess/stats_cache.rb
44
+ spec/client_spec.rb
45
+ spec/kestrel_server.rb
46
+ spec/request/set_spec.rb
47
+ spec/request/version_spec.rb
48
+ spec/request_spec.rb
49
+ spec/response/client_error_spec.rb
50
+ spec/spec_helper.rb
51
+ spec/utils.rb
52
+ spec/version_spec.rb
53
+ tasks/kestrel.rake
@@ -0,0 +1,44 @@
1
+ == KJess
2
+
3
+ * Homepage[https://github.com/copiousfreetime/kjess/]
4
+ * {Github Project}[https://github.com/copiousfreetime/kjess]
5
+ * email jeremy at hinegardner dot org
6
+
7
+ == DESCRIPTION
8
+
9
+ KJess is a pure ruby Kestrel client that supports Kestrel's Memcache style
10
+ protocol.
11
+
12
+ == FEATURES
13
+
14
+ A pure ruby native client to Kestrel.
15
+
16
+ == Examples
17
+
18
+ client = Kestrel::Client.new( 'k.example.com' )
19
+ client.set( 'my_queue', 'item' ) # put an 'item' on 'my_queue'
20
+ i = client.reserve( 'my_queue' ) # get an item off 'my_queue' with
21
+ # Reliable Read
22
+
23
+ # do something with the item pulled off the queue
24
+
25
+ client.close( 'my_queue' ) # confirm with Kestrel that the item
26
+ # retrieved was processed
27
+
28
+ == ISC LICENSE
29
+
30
+ http://opensource.org/licenses/isc-license.txt
31
+
32
+ Copyright (c) 2012 Jeremy Hinegardner
33
+
34
+ Permission to use, copy, modify, and/or distribute this software for any purpose
35
+ with or without fee is hereby granted, provided that the above copyright notice
36
+ and this permission notice appear in all copies.
37
+
38
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
39
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
40
+ FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
41
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
42
+ OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
43
+ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
44
+ THIS SOFTWARE.
@@ -0,0 +1,337 @@
1
+ # vim: syntax=ruby
2
+
3
+ This.name = "kjess"
4
+ This.author = "Jeremy Hinegardner"
5
+ This.email = "jeremy@copiousfreetime.org"
6
+ This.homepage = "http://github.com/copiousfreetime/#{ This.name }"
7
+ This.version = Util.version
8
+
9
+ #------------------------------------------------------------------------------
10
+ # If you want to Develop on this project just run 'rake develop' and you'll
11
+ # have all you need to get going. If you want to use bundler for development,
12
+ # then run 'rake develop:using_bundler'
13
+ #------------------------------------------------------------------------------
14
+ namespace :develop do
15
+
16
+ # Install all the development and runtime dependencies of this gem using the
17
+ # gemspec.
18
+ task :default do
19
+ require 'rubygems/dependency_installer'
20
+ installer = Gem::DependencyInstaller.new
21
+
22
+ # list these here instead of gem dependencies since there is not a way to
23
+ # specify ruby version specific dependencies
24
+ if RUBY_VERSION < "1.9.2"
25
+ Util.platform_gemspec.add_development_dependency( 'rcov', '~> 0.9.11' )
26
+ else
27
+ Util.platform_gemspec.add_development_dependency( 'simplecov', '~> 0.6.4' )
28
+ end
29
+
30
+ puts "Installing gem depedencies needed for development"
31
+ Util.platform_gemspec.dependencies.each do |dep|
32
+ if dep.matching_specs.empty? then
33
+ puts "Installing : #{dep}"
34
+ installer.install dep
35
+ else
36
+ puts "Skipping : #{dep} -> already installed #{dep.matching_specs.first.full_name}"
37
+ end
38
+ end
39
+ puts "\n\nNow run 'rake test'"
40
+ end
41
+
42
+ # Create a Gemfile that just references the gemspec
43
+ file 'Gemfile' => :gemspec do
44
+ File.open( "Gemfile", "w+" ) do |f|
45
+ f.puts 'source :rubygems'
46
+ f.puts 'gemspec'
47
+ end
48
+ end
49
+
50
+ desc "Create a bundler Gemfile"
51
+ task :using_bundler => 'Gemfile' do
52
+ puts "Now you can 'bundle'"
53
+ end
54
+
55
+ # Gemfiles are build artifacts
56
+ CLOBBER << FileList['Gemfile*']
57
+ end
58
+ desc "Boostrap development"
59
+ task :develop => "develop:default"
60
+
61
+ #------------------------------------------------------------------------------
62
+ # Minitest - standard TestTask
63
+ #------------------------------------------------------------------------------
64
+ begin
65
+ require 'rake/testtask'
66
+ Rake::TestTask.new( :test ) do |t|
67
+ t.ruby_opts = %w[ -w -rubygems ]
68
+ t.libs = %w[ lib spec ]
69
+ t.pattern = "spec/**/*_spec.rb"
70
+ end
71
+ task :default => :test
72
+ rescue LoadError
73
+ Util.task_warning( 'test' )
74
+ end
75
+
76
+ #------------------------------------------------------------------------------
77
+ # RDoc - standard rdoc rake task, although we must make sure to use a more
78
+ # recent version of rdoc since it is the one that has 'tomdoc' markup
79
+ #------------------------------------------------------------------------------
80
+ begin
81
+ gem 'rdoc' # otherwise we get the wrong task from stdlib
82
+ require 'rdoc/task'
83
+ RDoc::Task.new do |t|
84
+ t.markup = 'tomdoc'
85
+ t.rdoc_dir = 'doc'
86
+ t.main = 'README.rdoc'
87
+ t.title = "#{This.name} #{This.version}"
88
+ t.rdoc_files.include( '*.rdoc', 'lib/**/*.rb' )
89
+ end
90
+ rescue LoadError => le
91
+ Util.task_warning( 'rdoc' )
92
+ end
93
+
94
+ #------------------------------------------------------------------------------
95
+ # Coverage - optional code coverage, rcov for 1.8 and simplecov for 1.9, so
96
+ # for the moment only rcov is listed.
97
+ #------------------------------------------------------------------------------
98
+ if RUBY_VERSION <= "1.9.2"
99
+ begin
100
+ require 'rcov/rcovtask'
101
+ Rcov::RcovTask.new( 'coverage' ) do |t|
102
+ t.libs << 'spec'
103
+ t.pattern = 'spec/**/*_spec.rb'
104
+ t.verbose = true
105
+ t.rcov_opts << "-x ^/" # remove all the global files
106
+ t.rcov_opts << "--sort coverage" # so we see the worst files at the top
107
+ end
108
+ rescue LoadError
109
+ Util.task_warning( 'rcov' )
110
+ end
111
+ else
112
+ begin
113
+ require 'simplecov'
114
+ desc 'Run tests with code coverage'
115
+ task :coverage do
116
+ ENV['COVERAGE'] = 'true'
117
+ Rake::Task[:test].execute
118
+ end
119
+ CLOBBER << FileList["coverage"]
120
+ rescue LoadError
121
+ Util.task_warning( 'simplecov' )
122
+ end
123
+ end
124
+
125
+ #------------------------------------------------------------------------------
126
+ # Manifest - We want an explicit list of thos files that are to be packaged in
127
+ # the gem. Most of this is from Hoe.
128
+ #------------------------------------------------------------------------------
129
+ namespace 'manifest' do
130
+ desc "Check the manifest"
131
+ task :check => :clean do
132
+ files = FileList["**/*", ".*"].exclude( This.exclude_from_manifest ).to_a.sort
133
+ files = files.select{ |f| File.file?( f ) }
134
+
135
+ tmp = "Manifest.tmp"
136
+ File.open( tmp, 'w' ) do |f|
137
+ f.puts files.join("\n")
138
+ end
139
+
140
+ begin
141
+ sh "diff -du Manifest.txt #{tmp}"
142
+ ensure
143
+ rm tmp
144
+ end
145
+ puts "Manifest looks good"
146
+ end
147
+
148
+ desc "Generate the manifest"
149
+ task :generate => :clean do
150
+ files = %x[ git ls-files ].split("\n").sort
151
+ files.reject! { |f| f =~ This.exclude_from_manifest }
152
+ File.open( "Manifest.txt", "w" ) do |f|
153
+ f.puts files.join("\n")
154
+ end
155
+ end
156
+ end
157
+
158
+ #------------------------------------------------------------------------------
159
+ # Fixme - look for fixmes and report them
160
+ #------------------------------------------------------------------------------
161
+ task :fixme => 'manifest:check' do
162
+ Util.read_manifest.each do |file|
163
+ next if file == File.basename( __FILE__ )
164
+
165
+ puts "FIXME: Rename #{file}" if file =~ /fixme/i
166
+
167
+ IO.readlines( file ).each_with_index do |line, idx|
168
+ prefix = "FIXME: #{file}:#{idx+1}".ljust(42)
169
+ puts "#{prefix} => #{line.strip}" if line =~ /fixme/i
170
+ end
171
+ end
172
+ end
173
+
174
+ #------------------------------------------------------------------------------
175
+ # Gem Specification
176
+ #------------------------------------------------------------------------------
177
+ This.gemspec = Hash.new
178
+ This.gemspec['ruby'] = Gem::Specification.new do |spec|
179
+ spec.name = This.name
180
+ spec.version = This.version
181
+ spec.author = This.author
182
+ spec.email = This.email
183
+ spec.homepage = This.homepage
184
+
185
+ spec.summary = This.summary
186
+ spec.description = This.description
187
+
188
+ spec.files = This.manifest
189
+ spec.executables = spec.files.grep(/^bin/) { |f| File.basename(f) }
190
+ spec.test_files = spec.files.grep(/^spec/)
191
+
192
+ spec.extra_rdoc_files += spec.files.grep(/(txt|rdoc)$/)
193
+ spec.rdoc_options = [ "--main" , 'README.rdoc',
194
+ "--markup", "tomdoc" ]
195
+
196
+ # The Runtime Dependencies
197
+ # FIXME
198
+ # spec.add_dependency( 'map', '~> 6.2.0')
199
+
200
+ # The Development Dependencies
201
+ spec.add_development_dependency( 'rake' , '~> 0.9.2.2')
202
+ spec.add_development_dependency( 'minitest' , '~> 3.3.0' )
203
+ spec.add_development_dependency( 'rdoc' , '~> 3.12' )
204
+ spec.add_development_dependency( 'zip' , "~> 2.0.2" )
205
+ end
206
+
207
+
208
+ # The name of the gemspec file on disk
209
+ This.gemspec_file = "#{This.name}.gemspec"
210
+
211
+ # Really this is only here to support those who use bundler
212
+ desc "Build the #{This.name}.gemspec file"
213
+ task :gemspec do
214
+ File.open( This.gemspec_file, "wb+" ) do |f|
215
+ f.write Util.platform_gemspec.to_ruby
216
+ end
217
+ end
218
+
219
+ # the gemspec is also a dev artifact and should not be kept around.
220
+ CLOBBER << This.gemspec_file
221
+
222
+ # The standard gem packaging task, everyone has it.
223
+ require 'rubygems/package_task'
224
+ Gem::PackageTask.new( Util.platform_gemspec ) do
225
+ # nothing
226
+ end
227
+
228
+ #------------------------------------------------------------------------------
229
+ # Release - the steps we go through to do a final release, this is pulled from
230
+ # a compbination of mojombo's rakegem, hoe and hoe-git
231
+ #
232
+ # 1) make sure we are on the master branch
233
+ # 2) make sure there are no uncommitted items
234
+ # 3) check the manifest and make sure all looks good
235
+ # 4) build the gem
236
+ # 5) do an empty commit to have the commit message of the version
237
+ # 6) tag that commit as the version
238
+ # 7) push master
239
+ # 8) push the tag
240
+ # 7) pus the gem
241
+ #------------------------------------------------------------------------------
242
+ task :release_check do
243
+ unless `git branch` =~ /^\* master$/
244
+ abort "You must be on the master branch to release!"
245
+ end
246
+ unless `git status` =~ /^nothing to commit/m
247
+ abort "Nope, sorry, you have unfinished business"
248
+ end
249
+ end
250
+
251
+ desc "Create tag v#{This.version}, build and push #{Util.platform_gemspec.full_name} to rubygems.org"
252
+ task :release => [ :release_check, 'manifest:check', :gem ] do
253
+ sh "git commit --allow-empty -a -m 'Release #{This.version}'"
254
+ sh "git tag -a -m 'v#{This.version}' v#{This.version}"
255
+ sh "git push origin master"
256
+ sh "git push origin v#{This.version}"
257
+ sh "gem push pkg/#{Util.platform_gemspec.full_name}.gem"
258
+ end
259
+
260
+ #------------------------------------------------------------------------------
261
+ # Load the extra rake tasks
262
+ #------------------------------------------------------------------------------
263
+ $: << "." unless $:.include?(".")
264
+ load 'tasks/kestrel.rake'
265
+
266
+ #------------------------------------------------------------------------------
267
+ # Rakefile Support - This is all the guts and utility methods that are
268
+ # necessary to support the above tasks.
269
+ #
270
+ # Lots of Credit for this Rakefile goes to:
271
+ #
272
+ # Ara T. Howard - see the Rakefile in all of his projects -
273
+ # https://github.com/ahoward/
274
+ # Tom Preston Werner - his Rakegem project https://github.com/mojombo/rakegem
275
+ # Seattle.rb - Hoe - cuz it has relly good stuff in there
276
+ #------------------------------------------------------------------------------
277
+ BEGIN {
278
+
279
+ require 'ostruct'
280
+ require 'rake/clean'
281
+ require 'rubygems' unless defined? Gem
282
+
283
+ module Util
284
+ def self.version
285
+ [ "lib/#{ This.name }.rb", "lib/#{ This.name }/version.rb" ].each do |v|
286
+ line = File.read( v )[/^\s*VERSION\s*=\s*.*/]
287
+ if line then
288
+ return line.match(/.*VERSION\s*=\s*['"](.*)['"]/)[1]
289
+ end
290
+ end
291
+ end
292
+
293
+ # Partition an rdoc file into sections and return the text of the section
294
+ # as an array of paragraphs
295
+ def self.section_of( file, section_name )
296
+ re = /^=+ (.*)$/
297
+ parts = File.read( file ).split( re )[1..-1]
298
+ parts.map! { |p| p.strip }
299
+
300
+ sections = Hash.new
301
+ Hash[*parts].each do |k,v|
302
+ sections[k] = v.split("\n\n")
303
+ end
304
+ return sections[section_name]
305
+ end
306
+
307
+ def self.task_warning( task )
308
+ warn "WARNING: '#{task}' tasks are not defined. Please run 'rake develop'"
309
+ end
310
+
311
+ def self.project_root
312
+ File.expand_path( File.dirname(__FILE__) )
313
+ end
314
+
315
+ def self.read_manifest
316
+ abort "You need a Manifest.txt" unless File.readable?( "Manifest.txt" )
317
+ File.readlines( "Manifest.txt" ).map { |l| l.strip }
318
+ end
319
+
320
+ def self.platform_gemspec
321
+ This.gemspec[This.platform]
322
+ end
323
+ end
324
+
325
+ # Hold all the metadata about this project
326
+ This = OpenStruct.new
327
+ This.platform = (RUBY_PLATFORM == "java") ? 'java' : Gem::Platform::RUBY
328
+
329
+ desc = Util.section_of( 'README.rdoc', 'DESCRIPTION')
330
+ This.summary = desc.first
331
+ This.description = desc.join(" ").tr("\n", ' ').gsub(/[{}]/,'').gsub(/\[[^\]]+\]/,'') # strip rdoc
332
+
333
+
334
+ This.exclude_from_manifest = %r/tmp$|\.(git|DS_Store)|^(doc|coverage|pkg)|Gemfile*|\.gemspec$|\.swp$|\.jar|\.rvmrc$|^kestrel|~$/
335
+ This.manifest = Util.read_manifest
336
+
337
+ }