wordnet 0.0.5 → 1.0.0.pre.126

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/.gemtest +0 -0
  2. data/History.rdoc +5 -0
  3. data/LICENSE +9 -9
  4. data/Manifest.txt +39 -0
  5. data/README.rdoc +60 -0
  6. data/Rakefile +47 -267
  7. data/TODO +9 -0
  8. data/WordNet30-license.txt +31 -0
  9. data/examples/add-laced-boots.rb +35 -0
  10. data/examples/clothes-with-collars.rb +42 -0
  11. data/examples/clothesWithTongues.rb +0 -0
  12. data/examples/domainTree.rb +0 -0
  13. data/examples/memberTree.rb +0 -0
  14. data/lib/wordnet/constants.rb +259 -296
  15. data/lib/wordnet/lexicallink.rb +34 -0
  16. data/lib/wordnet/lexicon.rb +158 -386
  17. data/lib/wordnet/mixins.rb +62 -0
  18. data/lib/wordnet/model.rb +78 -0
  19. data/lib/wordnet/morph.rb +25 -0
  20. data/lib/wordnet/semanticlink.rb +52 -0
  21. data/lib/wordnet/sense.rb +55 -0
  22. data/lib/wordnet/sumoterm.rb +21 -0
  23. data/lib/wordnet/synset.rb +404 -859
  24. data/lib/wordnet/utils.rb +126 -0
  25. data/lib/wordnet/word.rb +119 -0
  26. data/lib/wordnet.rb +113 -76
  27. data/spec/lib/helpers.rb +102 -133
  28. data/spec/linguawordnet.tests.rb +38 -0
  29. data/spec/wordnet/lexicon_spec.rb +96 -186
  30. data/spec/wordnet/model_spec.rb +59 -0
  31. data/spec/wordnet/semanticlink_spec.rb +42 -0
  32. data/spec/wordnet/synset_spec.rb +27 -256
  33. data/spec/wordnet/word_spec.rb +58 -0
  34. data/spec/wordnet_spec.rb +52 -0
  35. data.tar.gz.sig +0 -0
  36. metadata +227 -188
  37. metadata.gz.sig +0 -0
  38. data/ChangeLog +0 -720
  39. data/README +0 -93
  40. data/Rakefile.local +0 -46
  41. data/convertdb.rb +0 -417
  42. data/examples/addLacedBoots.rb +0 -27
  43. data/examples/clothesWithCollars.rb +0 -36
  44. data/rake/dependencies.rb +0 -76
  45. data/rake/helpers.rb +0 -384
  46. data/rake/manual.rb +0 -755
  47. data/rake/packaging.rb +0 -112
  48. data/rake/publishing.rb +0 -303
  49. data/rake/rdoc.rb +0 -35
  50. data/rake/style.rb +0 -62
  51. data/rake/svn.rb +0 -469
  52. data/rake/testing.rb +0 -192
  53. data/rake/verifytask.rb +0 -64
  54. data/utils.rb +0 -838
data/rake/svn.rb DELETED
@@ -1,469 +0,0 @@
1
- #
2
- # Subversion Rake Tasks
3
- # $Id: svn.rb 38 2008-08-20 18:16:56Z deveiant $
4
- #
5
- # Authors:
6
- # * Michael Granger <ged@FaerieMUD.org>
7
- #
8
-
9
-
10
- require 'pp'
11
- require 'yaml'
12
- require 'date'
13
- require 'time'
14
-
15
- # Strftime format for tags/releases
16
- TAG_TIMESTAMP_FORMAT = '%Y%m%d-%H%M%S'
17
- TAG_TIMESTAMP_PATTERN = /\d{4}\d{2}\d{2}-\d{6}/
18
-
19
- RELEASE_VERSION_PATTERN = /\d+\.\d+\.\d+/
20
-
21
- DEFAULT_EDITOR = 'vi'
22
- DEFAULT_KEYWORDS = %w[Date Rev Author URL Id]
23
- KEYWORDED_FILEDIRS = %w[applets spec bin etc ext experiments examples lib misc docs]
24
- KEYWORDED_FILEPATTERN = /
25
- ^(?:
26
- (?:meta)?rakefile.* # Rakefiles
27
- |
28
- .*\.(?:rb|c|h|js|html|css|template|erb) # Source file extensions
29
- |
30
- readme|install|todo
31
- )$/ix
32
-
33
- COMMIT_MSG_FILE = 'commit-msg.txt'
34
-
35
- SVN_TRUNK_DIR = 'trunk' unless defined?( SVN_TRUNK_DIR )
36
- SVN_RELEASES_DIR = 'branches' unless defined?( SVN_RELEASES_DIR )
37
- SVN_BRANCHES_DIR = 'branches' unless defined?( SVN_BRANCHES_DIR )
38
- SVN_TAGS_DIR = 'tags' unless defined?( SVN_TAGS_DIR )
39
-
40
- FILE_INDENT = " " * 12
41
- LOG_INDENT = " " * 3
42
-
43
-
44
-
45
- ###
46
- ### Subversion-specific Helpers
47
- ###
48
-
49
- ### Return a new tag for the given time
50
- def make_new_tag( time=Time.now )
51
- return time.strftime( TAG_TIMESTAMP_FORMAT )
52
- end
53
-
54
-
55
- ### Get the subversion information for the current working directory as
56
- ### a hash.
57
- def get_svn_info( dir='.' )
58
- return {} unless File.directory?( File.join(dir, '.svn') )
59
- info = IO.read( '|-' ) or exec 'svn', 'info', dir
60
- return YAML.load( info ) # 'svn info' outputs valid YAML! Yay!
61
- end
62
-
63
-
64
- ### Get a list of the objects registered with subversion under the specified directory and
65
- ### return them as an Array of Pathame objects.
66
- def get_svn_filelist( dir='.' )
67
- list = IO.read( '|-' ) or exec 'svn', 'st', '-v', '--ignore-externals', dir
68
-
69
- # Split into lines, filter out the unknowns, and grab the filenames as Pathnames
70
- # :FIXME: This will break if we ever put in a file with spaces in its name. This
71
- # will likely be the least of our worries if we do so, however, so it's not worth
72
- # the additional complexity to make it handle that case. If we do need that, there's
73
- # always the --xml output for 'svn st'...
74
- return list.split( $/ ).
75
- reject {|line| line =~ /^\?/ }.
76
- collect {|fn| Pathname(fn[/\S+$/]) }
77
- end
78
-
79
- ### Return the URL to the repository root for the specified +dir+.
80
- def get_svn_repo_root( dir='.' )
81
- info = get_svn_info( dir )
82
- return info['Repository Root']
83
- end
84
-
85
-
86
- ### Return the Subversion URL to the given +dir+.
87
- def get_svn_url( dir='.' )
88
- info = get_svn_info( dir )
89
- return info['URL']
90
- end
91
-
92
-
93
- ### Return the path of the specified +dir+ under the svn root of the
94
- ### checkout.
95
- def get_svn_path( dir='.' )
96
- root = get_svn_repo_root( dir )
97
- url = get_svn_url( dir )
98
-
99
- return url.sub( root + '/', '' )
100
- end
101
-
102
-
103
- ### Return the keywords for the specified array of +files+ as a Hash keyed by filename.
104
- def get_svn_keyword_map( files )
105
- cmd = ['svn', 'pg', 'svn:keywords', *files]
106
-
107
- # trace "Executing: svn pg svn:keywords " + files.join(' ')
108
- output = IO.read( '|-' ) or exec( 'svn', 'pg', 'svn:keywords', *files )
109
-
110
- kwmap = {}
111
- output.split( "\n" ).each do |line|
112
- next if line !~ /\s+-\s+/
113
- path, keywords = line.split( /\s+-\s+/, 2 )
114
- kwmap[ path ] = keywords.split
115
- end
116
-
117
- return kwmap
118
- end
119
-
120
-
121
- ### Return the latest revision number of the specified +dir+ as an Integer.
122
- def get_svn_rev( dir='.' )
123
- info = get_svn_info( dir )
124
- return info['Revision']
125
- end
126
-
127
-
128
- ### Return the latest revision number of the specified +dir+ as an Integer.
129
- def get_last_changed_rev( dir='.' )
130
- info = get_svn_info( dir )
131
- return info['Last Changed Rev']
132
- end
133
-
134
-
135
- ### Return a list of the entries at the specified Subversion url. If
136
- ### no +url+ is specified, it will default to the list in the URL
137
- ### corresponding to the current working directory.
138
- def svn_ls( url=nil )
139
- url ||= get_svn_url()
140
- list = IO.read( '|-' ) or exec 'svn', 'ls', url
141
-
142
- trace 'svn ls of %s: %p' % [url, list] if $trace
143
-
144
- return [] if list.nil? || list.empty?
145
- return list.split( $INPUT_RECORD_SEPARATOR )
146
- end
147
-
148
-
149
- ### Return the URL of the latest timestamp in the tags directory.
150
- def get_latest_svn_timestamp_tag
151
- rooturl = get_svn_repo_root()
152
- tagsurl = rooturl + "/#{SVN_TAGS_DIR}"
153
-
154
- tags = svn_ls( tagsurl ).grep( TAG_TIMESTAMP_PATTERN ).sort
155
- return nil if tags.nil? || tags.empty?
156
- return tagsurl + '/' + tags.last
157
- end
158
-
159
-
160
- ### Get a subversion diff of the specified targets and return it. If no targets are
161
- ### specified, the current directory will be diffed instead.
162
- def get_svn_diff( *targets )
163
- targets << BASEDIR if targets.empty?
164
- trace "Getting svn diff for targets: %p" % [targets]
165
- log = IO.read( '|-' ) or exec 'svn', 'diff', *(targets.flatten)
166
-
167
- return log
168
- end
169
-
170
-
171
- ### Return the URL of the latest timestamp in the tags directory.
172
- def get_latest_release_tag
173
- rooturl = get_svn_repo_root()
174
- releaseurl = rooturl + "/#{SVN_RELEASES_DIR}"
175
-
176
- tags = svn_ls( releaseurl ).grep( RELEASE_VERSION_PATTERN ).sort_by do |tag|
177
- tag[RELEASE_VERSION_PATTERN].split('.').collect {|i| Integer(i) }
178
- end
179
- return nil if tags.empty?
180
-
181
- return releaseurl + '/' + tags.last
182
- end
183
-
184
-
185
- ### Extract a diff from the specified subversion working +dir+ and return it.
186
- def make_svn_commit_log( dir='.' )
187
- diff = IO.read( '|-' ) or exec 'svn', 'diff'
188
- fail "No differences." if diff.empty?
189
-
190
- return diff
191
- end
192
-
193
-
194
- ### Extract the svn log from the specified subversion working +dir+,
195
- ### starting from rev +start+ and ending with rev +finish+, and return it.
196
- def make_svn_log( dir='.', start='PREV', finish='HEAD' )
197
- trace "svn log -r#{start}:#{finish} #{dir}"
198
- log = IO.read( '|-' ) or exec 'svn', 'log', "-r#{start}:#{finish}", dir
199
- fail "No log between #{start} and #{finish}." if log.empty?
200
-
201
- return log
202
- end
203
-
204
-
205
- ### Extract the verbose XML svn log from the specified subversion working +dir+,
206
- ### starting from rev +start+ and ending with rev +finish+, and return it.
207
- def make_xml_svn_log( dir='.', start='PREV', finish='HEAD' )
208
- trace "svn log --xml --verbose -r#{start}:#{finish} #{dir}"
209
- log = IO.read( '|-' ) or exec 'svn', 'log', '--verbose', '--xml', "-r#{start}:#{finish}", dir
210
- fail "No log between #{start} and #{finish}." if log.empty?
211
-
212
- return log
213
- end
214
-
215
-
216
- ### Create a changelog from the subversion log of the specified +dir+ and return it.
217
- def make_svn_changelog( dir='.' )
218
- require 'xml/libxml'
219
-
220
- changelog = ''
221
- path_prefix = '/' + get_svn_path( dir ) + '/'
222
-
223
- xmllog = make_xml_svn_log( dir, 0 )
224
-
225
- parser = XML::Parser.string( xmllog )
226
- root = parser.parse.root
227
- root.find( '//log/logentry' ).to_a.reverse.each do |entry|
228
- trace "Making a changelog entry for r%s" % [ entry['revision'] ]
229
-
230
- added = []
231
- deleted = []
232
- changed = []
233
-
234
- entry.find( 'paths/path').each do |path|
235
- pathname = path.content
236
- pathname.sub!( path_prefix , '' ) if pathname.count('/') > 1
237
-
238
- case path['action']
239
- when 'A', 'R'
240
- if path['copyfrom-path']
241
- verb = path['action'] == 'A' ? 'renamed' : 'copied'
242
- added << "%s\n#{FILE_INDENT}-> #{verb} from %s@r%s" % [
243
- pathname,
244
- path['copyfrom-path'],
245
- path['copyfrom-rev'],
246
- ]
247
- else
248
- added << "%s (new)" % [ pathname ]
249
- end
250
-
251
- when 'M'
252
- changed << pathname
253
-
254
- when 'D'
255
- deleted << pathname
256
-
257
- else
258
- log "Unknown action %p in rev %d" % [ path['action'], entry['revision'] ]
259
- end
260
-
261
- end
262
-
263
- date = Time.parse( entry.find_first('date').content )
264
-
265
- # cvs2svn doesn't set 'author'
266
- author = 'unknown'
267
- if entry.find_first( 'author' )
268
- author = entry.find_first( 'author' ).content
269
- end
270
-
271
- msg = entry.find_first( 'msg' ).content
272
- rev = entry['revision']
273
-
274
- changelog << "-- #{date.rfc2822} by #{author} (r#{rev}) -----\n"
275
- changelog << " Added: " << humanize_file_list(added) << "\n" unless added.empty?
276
- changelog << " Changed: " << humanize_file_list(changed) << "\n" unless changed.empty?
277
- changelog << " Deleted: " << humanize_file_list(deleted) << "\n" unless deleted.empty?
278
- changelog << "\n"
279
-
280
- indent = msg[/^(\s*)/] + LOG_INDENT
281
-
282
- changelog << indent << msg.strip.gsub(/\n\s*/m, "\n#{indent}")
283
- changelog << "\n\n\n"
284
- end
285
-
286
- return changelog
287
- end
288
-
289
-
290
- ### Returns a human-scannable file list by joining and truncating the list if it's too long.
291
- def humanize_file_list( list )
292
- listtext = list[0..5].join( "\n#{FILE_INDENT}" )
293
- if list.length > 5
294
- listtext << " (and %d other/s)" % [ list.length - 5 ]
295
- end
296
-
297
- return listtext
298
- end
299
-
300
-
301
-
302
- ###
303
- ### Tasks
304
- ###
305
-
306
- desc "Subversion tasks"
307
- namespace :svn do
308
-
309
- desc "Copy the HEAD revision of the current #{SVN_TRUNK_DIR}/ to #{SVN_TAGS_DIR}/ with a " +
310
- "current timestamp."
311
- task :tag do
312
- svninfo = get_svn_info()
313
- tag = make_new_tag()
314
- svntrunk = svninfo['Repository Root'] + "/#{SVN_TRUNK_DIR}"
315
- svntagdir = svninfo['Repository Root'] + "/#{SVN_TAGS_DIR}"
316
- svntag = svntagdir + '/' + tag
317
-
318
- desc = "Tagging trunk as #{svntag}"
319
- ask_for_confirmation( desc ) do
320
- msg = prompt_with_default( "Commit log: ", "Tagging for code push" )
321
- run 'svn', 'cp', '-m', msg, svntrunk, svntag
322
- end
323
- end
324
-
325
-
326
- desc "Copy the most recent tag to #{SVN_RELEASES_DIR}/#{PKG_VERSION}"
327
- task :release do
328
- last_tag = get_latest_svn_timestamp_tag()
329
- svninfo = get_svn_info()
330
- svnroot = svninfo['Repository Root']
331
- svntrunk = svnroot + "/#{SVN_TRUNK_DIR}"
332
- svnrel = svnroot + "/#{SVN_RELEASES_DIR}"
333
- release = PKG_VERSION
334
- svnrelease = svnrel + '/' + release
335
-
336
- topdirs = svn_ls( svnroot ).collect {|dir| dir.chomp('/') }
337
- unless topdirs.include?( SVN_RELEASES_DIR )
338
- trace "Top directories (%p) does not include %p" %
339
- [ topdirs, SVN_RELEASES_DIR ]
340
- log "Releases path #{svnrel} does not exist."
341
- ask_for_confirmation( "To continue I'll need to create it." ) do
342
- run 'svn', 'mkdir', svnrel, '-m', 'Creating releases/ directory'
343
- end
344
- else
345
- trace "Found release dir #{SVN_RELEASES_DIR} in the top directories %p" %
346
- [ topdirs ]
347
- end
348
-
349
- releases = svn_ls( svnrel ).collect {|name| name.sub(%r{/$}, '') }
350
- trace "Releases: %p" % [releases]
351
- if releases.include?( release )
352
- error "Version #{release} already has a branch (#{svnrelease}). Did you mean " +
353
- "to increment the version in #{VERSION_FILE}?"
354
- fail
355
- else
356
- trace "No #{release} version currently exists"
357
- end
358
-
359
- desc = "Tagging trunk as #{svnrelease}..."
360
- ask_for_confirmation( desc ) do
361
- msg = prompt_with_default( "Commit log: ", "Branching for release" )
362
- run 'svn', 'cp', '-m', msg, svntrunk, svnrelease
363
- end
364
- end
365
-
366
- ### Task for debugging the #get_target_args helper
367
- task :show_targets do
368
- $stdout.puts "Targets from ARGV (%p): %p" % [ARGV, get_target_args()]
369
- end
370
-
371
-
372
- desc "Generate a commit log"
373
- task :commitlog => [COMMIT_MSG_FILE]
374
-
375
- desc "Show the (pre-edited) commit log for the current directory"
376
- task :show_commitlog do
377
- puts make_svn_commit_log()
378
- end
379
-
380
-
381
- file COMMIT_MSG_FILE do
382
- diff = make_svn_commit_log()
383
-
384
- File.open( COMMIT_MSG_FILE, File::WRONLY|File::EXCL|File::CREAT ) do |fh|
385
- fh.print( diff )
386
- end
387
-
388
- editor = ENV['EDITOR'] || ENV['VISUAL'] || DEFAULT_EDITOR
389
- system editor, COMMIT_MSG_FILE
390
- unless $?.success?
391
- fail "Editor exited uncleanly."
392
- end
393
- end
394
-
395
-
396
- desc "Update from Subversion"
397
- task :update do
398
- run 'svn', 'up', '--ignore-externals'
399
- end
400
-
401
-
402
- desc "Check in all the changes in your current working copy"
403
- task :checkin => ['svn:update', 'test', 'svn:fix_keywords', COMMIT_MSG_FILE] do
404
- targets = get_target_args()
405
- $deferr.puts '---', File.read( COMMIT_MSG_FILE ), '---'
406
- ask_for_confirmation( "Continue with checkin?" ) do
407
- run 'svn', 'ci', '-F', COMMIT_MSG_FILE, targets
408
- rm_f COMMIT_MSG_FILE
409
- end
410
- end
411
- task :commit => :checkin
412
- task :ci => :checkin
413
-
414
-
415
- task :clean do
416
- rm_f COMMIT_MSG_FILE
417
- end
418
-
419
-
420
- desc "Check and fix any missing keywords for any files in the project which need them"
421
- task :fix_keywords do
422
- log "Checking subversion keywords..."
423
- paths = get_svn_filelist( BASEDIR ).
424
- select {|path| path.file? && path.to_s =~ KEYWORDED_FILEPATTERN }
425
-
426
- trace "Looking at %d paths for keywords:\n %p" % [paths.length, paths]
427
- kwmap = get_svn_keyword_map( paths )
428
-
429
- buf = ''
430
- PP.pp( kwmap, buf, 132 )
431
- trace "keyword map is: %s" % [buf]
432
-
433
- files_needing_fixups = paths.find_all do |path|
434
- (kwmap[path.to_s] & DEFAULT_KEYWORDS) != DEFAULT_KEYWORDS
435
- end
436
-
437
- unless files_needing_fixups.empty?
438
- $deferr.puts "Files needing keyword fixes: ",
439
- files_needing_fixups.collect {|f|
440
- " %s: %s" % [f, kwmap[f] ? kwmap[f].join(' ') : "(no keywords)"]
441
- }
442
- ask_for_confirmation( "Will add default keywords to these files." ) do
443
- run 'svn', 'ps', 'svn:keywords', DEFAULT_KEYWORDS.join(' '), *files_needing_fixups
444
- end
445
- else
446
- log "Keywords are all up to date."
447
- end
448
- end
449
-
450
-
451
- task :debug_helpers do
452
- methods = [
453
- :make_new_tag,
454
- :get_svn_info,
455
- :get_svn_repo_root,
456
- :get_svn_url,
457
- :get_svn_path,
458
- :svn_ls,
459
- :get_latest_svn_timestamp_tag,
460
- ]
461
- maxlen = methods.collect {|sym| sym.to_s.length }.max
462
-
463
- methods.each do |meth|
464
- res = send( meth )
465
- puts "%*s => %p" % [ maxlen, colorize(meth.to_s, :cyan), res ]
466
- end
467
- end
468
- end
469
-
data/rake/testing.rb DELETED
@@ -1,192 +0,0 @@
1
- #
2
- # Rake tasklib for testing tasks
3
- # $Id: testing.rb 39 2008-08-22 01:27:56Z deveiant $
4
- #
5
- # Authors:
6
- # * Michael Granger <ged@FaerieMUD.org>
7
- #
8
-
9
- COVERAGE_MINIMUM = 85.0 unless defined?( COVERAGE_MINIMUM )
10
- SPEC_FILES = [] unless defined?( SPEC_FILES )
11
- TEST_FILES = [] unless defined?( TEST_FILES )
12
-
13
- COMMON_SPEC_OPTS = ['-c', '-f', 's'] unless defined?( COMMON_SPEC_OPTS )
14
-
15
- COVERAGE_TARGETDIR = BASEDIR + 'coverage' unless defined?( COVERAGE_TARGETDIR )
16
- RCOV_EXCLUDES = 'spec,tests,/Library/Ruby,/var/lib,/usr/local/lib' unless
17
- defined?( RCOV_EXCLUDES )
18
-
19
-
20
- desc "Run all defined tests"
21
- task :test do
22
- unless SPEC_FILES.empty?
23
- log "Running specs"
24
- Rake::Task['spec:quiet'].invoke
25
- end
26
-
27
- unless TEST_FILES.empty?
28
- log "Running unit tests"
29
- Rake::Task[:unittests].invoke
30
- end
31
- end
32
-
33
-
34
- ### RSpec specifications
35
- begin
36
- gem 'rspec', '>= 1.1.3'
37
- require 'spec/rake/spectask'
38
-
39
- ### Task: spec
40
- Spec::Rake::SpecTask.new( :spec ) do |task|
41
- task.spec_files = SPEC_FILES
42
- task.libs += [LIBDIR]
43
- task.spec_opts = COMMON_SPEC_OPTS
44
- end
45
-
46
-
47
- namespace :spec do
48
- desc "Run rspec every time there's a change to one of the files"
49
- task :autotest do
50
- require 'autotest/rspec'
51
-
52
- autotester = Autotest::Rspec.new
53
- autotester.exceptions = %r{\.svn|\.skel}
54
- autotester.run
55
- end
56
-
57
-
58
- desc "Generate quiet output"
59
- Spec::Rake::SpecTask.new( :quiet ) do |task|
60
- task.spec_files = SPEC_FILES
61
- task.spec_opts = ['-f', 'p', '-D']
62
- end
63
-
64
- desc "Generate HTML output for a spec run"
65
- Spec::Rake::SpecTask.new( :html ) do |task|
66
- task.spec_files = SPEC_FILES
67
- task.spec_opts = ['-f','h', '-D']
68
- end
69
-
70
- desc "Generate plain-text output for a CruiseControl.rb build"
71
- Spec::Rake::SpecTask.new( :text ) do |task|
72
- task.spec_files = SPEC_FILES
73
- task.spec_opts = ['-f','p']
74
- end
75
- end
76
- rescue LoadError => err
77
- task :no_rspec do
78
- $stderr.puts "Specification tasks not defined: %s" % [ err.message ]
79
- end
80
-
81
- task :spec => :no_rspec
82
- namespace :spec do
83
- task :autotest => :no_rspec
84
- task :quiet => :no_rspec
85
- task :html => :no_rspec
86
- task :text => :no_rspec
87
- end
88
- end
89
-
90
-
91
- ### Test::Unit tests
92
- begin
93
- require 'rake/testtask'
94
-
95
- Rake::TestTask.new( :unittests ) do |task|
96
- task.libs += [LIBDIR]
97
- task.test_files = TEST_FILES
98
- task.verbose = true
99
- end
100
-
101
- rescue LoadError => err
102
- task :no_test do
103
- $stderr.puts "Test tasks not defined: %s" % [ err.message ]
104
- end
105
-
106
- task :unittests => :no_rspec
107
- end
108
-
109
-
110
- ### RCov (via RSpec) tasks
111
- begin
112
- gem 'rcov'
113
- gem 'rspec', '>= 1.1.3'
114
-
115
- ### Task: coverage (via RCov)
116
- ### Task: rcov
117
- desc "Build test coverage reports"
118
- unless SPEC_FILES.empty?
119
- Spec::Rake::SpecTask.new( :coverage ) do |task|
120
- task.spec_files = SPEC_FILES
121
- task.libs += [LIBDIR]
122
- task.spec_opts = ['-f', 'p', '-b']
123
- task.rcov_opts = RCOV_OPTS
124
- task.rcov = true
125
- end
126
- end
127
- unless TEST_FILES.empty?
128
- require 'rcov/rcovtask'
129
-
130
- Rcov::RcovTask.new do |task|
131
- task.libs += [LIBDIR]
132
- task.test_files = TEST_FILES
133
- task.verbose = true
134
- task.rcov_opts = RCOV_OPTS
135
- end
136
- end
137
-
138
-
139
- task :rcov => [:coverage] do; end
140
-
141
- ### Other coverage tasks
142
- namespace :coverage do
143
- desc "Generate a detailed text coverage report"
144
- Spec::Rake::SpecTask.new( :text ) do |task|
145
- task.spec_files = SPEC_FILES
146
- task.rcov_opts = RCOV_OPTS + ['--text-report']
147
- task.rcov = true
148
- end
149
-
150
- desc "Show differences in coverage from last run"
151
- Spec::Rake::SpecTask.new( :diff ) do |task|
152
- task.spec_files = SPEC_FILES
153
- task.spec_opts = ['-f', 'p', '-b']
154
- task.rcov_opts = RCOV_OPTS - ['--save'] + ['--text-coverage-diff']
155
- task.rcov = true
156
- end
157
-
158
- ### Task: verify coverage
159
- desc "Build coverage statistics"
160
- VerifyTask.new( :verify => :rcov ) do |task|
161
- task.threshold = COVERAGE_MINIMUM
162
- end
163
-
164
- desc "Run RCov in 'spec-only' mode to check coverage from specs"
165
- Spec::Rake::SpecTask.new( :speconly ) do |task|
166
- task.spec_files = SPEC_FILES
167
- task.rcov_opts = ['--exclude', RCOV_EXCLUDES, '--text-report', '--save']
168
- task.rcov = true
169
- end
170
- end
171
-
172
- task :clobber_coverage do
173
- rmtree( COVERAGE_TARGETDIR )
174
- end
175
-
176
- rescue LoadError => err
177
- task :no_rcov do
178
- $stderr.puts "Coverage tasks not defined: RSpec+RCov tasklib not available: %s" %
179
- [ err.message ]
180
- end
181
-
182
- task :coverage => :no_rcov
183
- task :clobber_coverage
184
- task :rcov => :no_rcov
185
- namespace :coverage do
186
- task :text => :no_rcov
187
- task :diff => :no_rcov
188
- end
189
- task :verify => :no_rcov
190
- end
191
-
192
-