ffi-ssdeep 0.1.1

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.
@@ -0,0 +1,69 @@
1
+
2
+ require 'rake/rdoctask'
3
+
4
+ begin
5
+ require 'yard'
6
+ YARD::Rake::YardocTask.new
7
+ doc_alias = 'doc:yard'
8
+ rescue LoadError
9
+ task :yard do
10
+ abort "YARD is not available. In order to run yardoc, you must install it"
11
+ end
12
+ end
13
+
14
+
15
+ namespace :doc do
16
+
17
+ desc 'Generate RDoc documentation'
18
+ Rake::RDocTask.new do |rd|
19
+ rdoc = PROJ.rdoc
20
+ rd.main = rdoc.main
21
+ rd.rdoc_dir = rdoc.dir
22
+
23
+ incl = Regexp.new(rdoc.include.join('|'))
24
+ excl = Regexp.new(rdoc.exclude.join('|'))
25
+ files = PROJ.gem.files.find_all do |fn|
26
+ case fn
27
+ when excl; false
28
+ when incl; true
29
+ else false end
30
+ end
31
+ rd.rdoc_files.push(*files)
32
+
33
+ name = PROJ.name
34
+ rf_name = PROJ.rubyforge.name
35
+
36
+ title = "#{name}-#{PROJ.version} Documentation"
37
+ title = "#{rf_name}'s " + title if rf_name.valid? and rf_name != name
38
+
39
+ rd.options << "-t #{title}"
40
+ rd.options.concat(rdoc.opts)
41
+ end
42
+
43
+ desc 'Generate ri locally for testing'
44
+ task :ri => :clobber_ri do
45
+ sh "#{RDOC} --ri -o ri ."
46
+ end
47
+
48
+ task :clobber_ri do
49
+ rm_r 'ri' rescue nil
50
+ end
51
+
52
+ desc 'Generate yardoc documentation'
53
+ task :yardoc => ['yard']
54
+
55
+ end # namespace :rdoc
56
+
57
+ doc_alias ||= 'doc:rdoc'
58
+
59
+ desc "Alias to #{doc_alias}"
60
+ task :doc => doc_alias
61
+
62
+ desc 'Remove all build products'
63
+ task :clobber => %w(doc:clobber_rdoc doc:clobber_ri)
64
+
65
+ remove_desc_for_task %w(doc:clobber_rdoc)
66
+ remove_desc_for_task %w(yard)
67
+
68
+
69
+ # EOF
@@ -0,0 +1,200 @@
1
+
2
+ require 'find'
3
+ require 'rake/packagetask'
4
+ require 'rubygems/user_interaction'
5
+ require 'rubygems/builder'
6
+
7
+ module Bones
8
+ class GemPackageTask < Rake::PackageTask
9
+ # Ruby GEM spec containing the metadata for this package. The
10
+ # name, version and package_files are automatically determined
11
+ # from the GEM spec and don't need to be explicitly provided.
12
+ #
13
+ attr_accessor :gem_spec
14
+
15
+ # Tasks from the Bones gem directory
16
+ attr_reader :bones_files
17
+
18
+ # Create a GEM Package task library. Automatically define the gem
19
+ # if a block is given. If no block is supplied, then +define+
20
+ # needs to be called to define the task.
21
+ #
22
+ def initialize(gem_spec)
23
+ init(gem_spec)
24
+ yield self if block_given?
25
+ define if block_given?
26
+ end
27
+
28
+ # Initialization tasks without the "yield self" or define
29
+ # operations.
30
+ #
31
+ def init(gem)
32
+ super(gem.name, gem.version)
33
+ @gem_spec = gem
34
+ @package_files += gem_spec.files if gem_spec.files
35
+ @bones_files = []
36
+
37
+ local_setup = File.join(Dir.pwd, %w[tasks setup.rb])
38
+ if !test(?e, local_setup)
39
+ Dir.glob(::Bones.path(%w[lib bones tasks *])).each {|fn| bones_files << fn}
40
+ end
41
+ end
42
+
43
+ # Create the Rake tasks and actions specified by this
44
+ # GemPackageTask. (+define+ is automatically called if a block is
45
+ # given to +new+).
46
+ #
47
+ def define
48
+ super
49
+ task :prereqs
50
+ task :package => ['gem:prereqs', "#{package_dir_path}/#{gem_file}"]
51
+ file "#{package_dir_path}/#{gem_file}" => [package_dir_path] + package_files + bones_files do
52
+ when_writing("Creating GEM") {
53
+ chdir(package_dir_path) do
54
+ Gem::Builder.new(gem_spec).build
55
+ verbose(true) {
56
+ mv gem_file, "../#{gem_file}"
57
+ }
58
+ end
59
+ }
60
+ end
61
+
62
+ file package_dir_path => bones_files do
63
+ mkdir_p package_dir rescue nil
64
+
65
+ gem_spec.files = (gem_spec.files +
66
+ bones_files.map {|fn| File.join('tasks', File.basename(fn))}).sort
67
+
68
+ bones_files.each do |fn|
69
+ base_fn = File.join('tasks', File.basename(fn))
70
+ f = File.join(package_dir_path, base_fn)
71
+ fdir = File.dirname(f)
72
+ mkdir_p(fdir) if !File.exist?(fdir)
73
+ if File.directory?(fn)
74
+ mkdir_p(f)
75
+ else
76
+ raise "file name conflict for '#{base_fn}' (conflicts with '#{fn}')" if test(?e, f)
77
+ safe_ln(fn, f)
78
+ end
79
+ end
80
+ end
81
+ end
82
+
83
+ def gem_file
84
+ if @gem_spec.platform == Gem::Platform::RUBY
85
+ "#{package_name}.gem"
86
+ else
87
+ "#{package_name}-#{@gem_spec.platform}.gem"
88
+ end
89
+ end
90
+ end # class GemPackageTask
91
+ end # module Bones
92
+
93
+ namespace :gem do
94
+
95
+ PROJ.gem._spec = Gem::Specification.new do |s|
96
+ s.name = PROJ.name
97
+ s.version = PROJ.version
98
+ s.summary = PROJ.summary
99
+ s.authors = Array(PROJ.authors)
100
+ s.email = PROJ.email
101
+ s.homepage = Array(PROJ.url).first
102
+
103
+ s.description = PROJ.description
104
+
105
+ PROJ.gem.dependencies.each do |dep|
106
+ s.add_dependency(*dep)
107
+ end
108
+
109
+ PROJ.gem.development_dependencies.each do |dep|
110
+ s.add_development_dependency(*dep)
111
+ end
112
+
113
+ s.files = PROJ.gem.files
114
+ s.executables = PROJ.gem.executables.map {|fn| File.basename(fn)}
115
+ s.extensions = PROJ.gem.extensions
116
+
117
+ s.bindir = 'bin'
118
+ dirs = Dir["{#{PROJ.libs.join(',')}}"]
119
+ s.require_paths = dirs unless dirs.empty?
120
+
121
+ incl = Regexp.new(PROJ.rdoc.include.join('|'))
122
+ excl = PROJ.rdoc.exclude.dup.concat %w[\.rb$ ^(\.\/|\/)?ext]
123
+ excl = Regexp.new(excl.join('|'))
124
+ rdoc_files = PROJ.gem.files.find_all do |fn|
125
+ case fn
126
+ when excl; false
127
+ when incl; true
128
+ else false end
129
+ end
130
+ s.rdoc_options = PROJ.rdoc.opts + ['--main', PROJ.rdoc.main]
131
+ s.extra_rdoc_files = rdoc_files
132
+ s.has_rdoc = true
133
+
134
+ if test ?f, PROJ.test.file
135
+ s.test_file = PROJ.test.file
136
+ else
137
+ s.test_files = PROJ.test.files.to_a
138
+ end
139
+
140
+ # Do any extra stuff the user wants
141
+ PROJ.gem.extras.each do |msg, val|
142
+ case val
143
+ when Proc
144
+ val.call(s.send(msg))
145
+ else
146
+ s.send "#{msg}=", val
147
+ end
148
+ end
149
+ end # Gem::Specification.new
150
+
151
+ Bones::GemPackageTask.new(PROJ.gem._spec) do |pkg|
152
+ pkg.need_tar = PROJ.gem.need_tar
153
+ pkg.need_zip = PROJ.gem.need_zip
154
+ end
155
+
156
+ desc 'Show information about the gem'
157
+ task :debug => 'gem:prereqs' do
158
+ puts PROJ.gem._spec.to_ruby
159
+ end
160
+
161
+ desc 'Write the gemspec '
162
+ task :spec => 'gem:prereqs' do
163
+ File.open("#{PROJ.name}.gemspec", 'w') do |f|
164
+ f.write PROJ.gem._spec.to_ruby
165
+ end
166
+ end
167
+
168
+ desc 'Install the gem'
169
+ task :install => [:clobber, 'gem:package'] do
170
+ sh "#{SUDO} #{GEM} install --local pkg/#{PROJ.gem._spec.full_name}"
171
+
172
+ # use this version of the command for rubygems > 1.0.0
173
+ #sh "#{SUDO} #{GEM} install --no-update-sources pkg/#{PROJ.gem._spec.full_name}"
174
+ end
175
+
176
+ desc 'Uninstall the gem'
177
+ task :uninstall do
178
+ installed_list = Gem.source_index.find_name(PROJ.name)
179
+ if installed_list and installed_list.collect { |s| s.version.to_s}.include?(PROJ.version) then
180
+ sh "#{SUDO} #{GEM} uninstall --version '#{PROJ.version}' --ignore-dependencies --executables #{PROJ.name}"
181
+ end
182
+ end
183
+
184
+ desc 'Reinstall the gem'
185
+ task :reinstall => [:uninstall, :install]
186
+
187
+ desc 'Cleanup the gem'
188
+ task :cleanup do
189
+ sh "#{SUDO} #{GEM} cleanup #{PROJ.gem._spec.name}"
190
+ end
191
+ end # namespace :gem
192
+
193
+
194
+ desc 'Alias to gem:package'
195
+ task :gem => 'gem:package'
196
+
197
+ task :clobber => 'gem:clobber_package'
198
+ remove_desc_for_task 'gem:clobber_package'
199
+
200
+ # EOF
@@ -0,0 +1,40 @@
1
+
2
+ if HAVE_GIT
3
+
4
+ namespace :git do
5
+
6
+ # A prerequisites task that all other tasks depend upon
7
+ task :prereqs
8
+
9
+ desc 'Show tags from the Git repository'
10
+ task :show_tags => 'git:prereqs' do |t|
11
+ puts %x/git tag/
12
+ end
13
+
14
+ desc 'Create a new tag in the Git repository'
15
+ task :create_tag => 'git:prereqs' do |t|
16
+ v = ENV['VERSION'] or abort 'Must supply VERSION=x.y.z'
17
+ abort "Versions don't match #{v} vs #{PROJ.version}" if v != PROJ.version
18
+
19
+ tag = "%s-%s" % [PROJ.name, PROJ.version]
20
+ msg = "Creating tag for #{PROJ.name} version #{PROJ.version}"
21
+
22
+ puts "Creating Git tag '#{tag}'"
23
+ unless system "git tag -a -m '#{msg}' #{tag}"
24
+ abort "Tag creation failed"
25
+ end
26
+
27
+ if %x/git remote/ =~ %r/^origin\s*$/
28
+ unless system "git push origin #{tag}"
29
+ abort "Could not push tag to remote Git repository"
30
+ end
31
+ end
32
+ end
33
+
34
+ end # namespace :git
35
+
36
+ task 'gem:release' => 'git:create_tag'
37
+
38
+ end # if HAVE_GIT
39
+
40
+ # EOF
@@ -0,0 +1,34 @@
1
+
2
+ # This file does not define any rake tasks. It is used to load some project
3
+ # settings if they are not defined by the user.
4
+
5
+ PROJ.exclude << ["^#{Regexp.escape(PROJ.ann.file)}$",
6
+ "^#{Regexp.escape(PROJ.ignore_file)}$",
7
+ "^#{Regexp.escape(PROJ.rdoc.dir)}/",
8
+ "^#{Regexp.escape(PROJ.rcov.dir)}/"]
9
+
10
+ flatten_arrays = lambda do |this,os|
11
+ os.instance_variable_get(:@table).each do |key,val|
12
+ next if key == :dependencies \
13
+ or key == :development_dependencies
14
+ case val
15
+ when Array; val.flatten!
16
+ when OpenStruct; this.call(this,val)
17
+ end
18
+ end
19
+ end
20
+ flatten_arrays.call(flatten_arrays,PROJ)
21
+
22
+ PROJ.changes ||= paragraphs_of(PROJ.history_file, 0..1).join("\n\n")
23
+
24
+ PROJ.description ||= paragraphs_of(PROJ.readme_file, 'description').join("\n\n")
25
+
26
+ PROJ.summary ||= PROJ.description.split('.').first
27
+
28
+ PROJ.gem.files ||= manifest
29
+
30
+ PROJ.gem.executables ||= PROJ.gem.files.find_all {|fn| fn =~ %r/^bin/}
31
+
32
+ PROJ.rdoc.main ||= PROJ.readme_file
33
+
34
+ # EOF
@@ -0,0 +1,8 @@
1
+ require 'rake/rdoctask'
2
+ Rake::RDocTask.new do |rdoc|
3
+ rdoc.rdoc_dir = 'rdoc'
4
+ rdoc.title = 'TkScanLib'
5
+ rdoc.rdoc_files.include("README*")
6
+ rdoc.rdoc_files.include('lib/**/*.rb')
7
+ end
8
+
@@ -0,0 +1,55 @@
1
+
2
+ if PROJ.rubyforge.name.valid? && HAVE_RUBYFORGE
3
+
4
+ require 'rubyforge'
5
+ require 'rake/contrib/sshpublisher'
6
+
7
+ namespace :gem do
8
+ desc 'Package and upload to RubyForge'
9
+ task :release => [:clobber, 'gem'] do |t|
10
+ v = ENV['VERSION'] or abort 'Must supply VERSION=x.y.z'
11
+ abort "Versions don't match #{v} vs #{PROJ.version}" if v != PROJ.version
12
+ pkg = "pkg/#{PROJ.gem._spec.full_name}"
13
+
14
+ if $DEBUG then
15
+ puts "release_id = rf.add_release #{PROJ.rubyforge.name.inspect}, #{PROJ.name.inspect}, #{PROJ.version.inspect}, \"#{pkg}.tgz\""
16
+ puts "rf.add_file #{PROJ.rubyforge.name.inspect}, #{PROJ.name.inspect}, release_id, \"#{pkg}.gem\""
17
+ end
18
+
19
+ rf = RubyForge.new
20
+ rf.configure rescue nil
21
+ puts 'Logging in'
22
+ rf.login
23
+
24
+ c = rf.userconfig
25
+ c['release_notes'] = PROJ.description if PROJ.description
26
+ c['release_changes'] = PROJ.changes if PROJ.changes
27
+ c['preformatted'] = true
28
+
29
+ files = Dir.glob("#{pkg}*.*")
30
+
31
+ puts "Releasing #{PROJ.name} v. #{PROJ.version}"
32
+ rf.add_release PROJ.rubyforge.name, PROJ.name, PROJ.version, *files
33
+ end
34
+ end # namespace :gem
35
+
36
+
37
+ namespace :doc do
38
+ desc "Publish RDoc to RubyForge"
39
+ task :release => %w(doc:clobber_rdoc doc:rdoc) do
40
+ config = YAML.load(
41
+ File.read(File.expand_path('~/.rubyforge/user-config.yml'))
42
+ )
43
+
44
+ host = "#{config['username']}@rubyforge.org"
45
+ remote_dir = "/var/www/gforge-projects/#{PROJ.rubyforge.name}/"
46
+ remote_dir << PROJ.rdoc.remote_dir if PROJ.rdoc.remote_dir
47
+ local_dir = PROJ.rdoc.dir
48
+
49
+ Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
50
+ end
51
+ end # namespace :doc
52
+
53
+ end # if HAVE_RUBYFORGE
54
+
55
+ # EOF
@@ -0,0 +1,286 @@
1
+
2
+ require 'rubygems'
3
+ require 'rake'
4
+ require 'rake/clean'
5
+ require 'fileutils'
6
+ require 'ostruct'
7
+ require 'find'
8
+
9
+ class OpenStruct; undef :gem if defined? :gem; end
10
+
11
+ # TODO: make my own openstruct type object that includes descriptions
12
+ # TODO: use the descriptions to output help on the available bones options
13
+
14
+ PROJ = OpenStruct.new(
15
+ # Project Defaults
16
+ :name => nil,
17
+ :summary => nil,
18
+ :description => nil,
19
+ :changes => nil,
20
+ :authors => nil,
21
+ :email => nil,
22
+ :url => "\000",
23
+ :version => ENV['VERSION'] || '0.0.0',
24
+ :exclude => %w(tmp$ bak$ ~$ CVS \.svn/ \.git/ ^pkg/),
25
+ :release_name => ENV['RELEASE'],
26
+
27
+ # System Defaults
28
+ :ruby_opts => [],
29
+ :libs => [],
30
+ :history_file => 'History.txt',
31
+ :readme_file => 'README.rdoc',
32
+ :ignore_file => '.pkg_ignore',
33
+
34
+ # Announce
35
+ :ann => OpenStruct.new(
36
+ :file => 'announcement.txt',
37
+ :text => nil,
38
+ :paragraphs => [],
39
+ :email => {
40
+ :from => nil,
41
+ :to => %w(ruby-talk@ruby-lang.org),
42
+ :server => 'localhost',
43
+ :port => 25,
44
+ :domain => ENV['HOSTNAME'],
45
+ :acct => nil,
46
+ :passwd => nil,
47
+ :authtype => :plain
48
+ }
49
+ ),
50
+
51
+ # Gem Packaging
52
+ :gem => OpenStruct.new(
53
+ :dependencies => [],
54
+ :development_dependencies => [],
55
+ :executables => nil,
56
+ :extensions => FileList['ext/**/extconf.rb'],
57
+ :files => nil,
58
+ :need_tar => true,
59
+ :need_zip => false,
60
+ :extras => {}
61
+ ),
62
+
63
+ # File Annotations
64
+ :notes => OpenStruct.new(
65
+ :exclude => %w(^tasks/setup\.rb$),
66
+ :extensions => %w(.txt .rb .erb .rdoc) << '',
67
+ :tags => %w(FIXME OPTIMIZE TODO)
68
+ ),
69
+
70
+ # Rcov
71
+ :rcov => OpenStruct.new(
72
+ :dir => 'coverage',
73
+ :opts => %w[--sort coverage -T],
74
+ :threshold => 90.0,
75
+ :threshold_exact => false
76
+ ),
77
+
78
+ # Rdoc
79
+ :rdoc => OpenStruct.new(
80
+ :opts => [],
81
+ :include => %w(^lib/ ^bin/ ^ext/ \.txt$ \.rdoc$),
82
+ :exclude => %w(extconf\.rb$),
83
+ :main => nil,
84
+ :dir => 'doc',
85
+ :remote_dir => nil
86
+ ),
87
+
88
+ # Rubyforge
89
+ :rubyforge => OpenStruct.new(
90
+ :name => "\000"
91
+ ),
92
+
93
+ # Rspec
94
+ :spec => OpenStruct.new(
95
+ :files => FileList['spec/**/*_spec.rb'],
96
+ :opts => (File.exist?("spec/spec.opts") ? File.read("spec/spec.opts").split("\n") : [])
97
+ ),
98
+
99
+ # Subversion Repository
100
+ :svn => OpenStruct.new(
101
+ :root => nil,
102
+ :path => '',
103
+ :trunk => 'trunk',
104
+ :tags => 'tags',
105
+ :branches => 'branches'
106
+ ),
107
+
108
+ # Test::Unit
109
+ :test => OpenStruct.new(
110
+ :files => FileList['test/**/test_*.rb'],
111
+ :file => 'test/all.rb',
112
+ :opts => []
113
+ )
114
+ )
115
+
116
+ # Load the other rake files in the tasks folder
117
+ tasks_dir = File.expand_path(File.dirname(__FILE__))
118
+ post_load_fn = File.join(tasks_dir, 'post_load.rake')
119
+ rakefiles = Dir.glob(File.join(tasks_dir, '*.rake')).sort
120
+ rakefiles.unshift(rakefiles.delete(post_load_fn)).compact!
121
+ import(*rakefiles)
122
+
123
+ # Setup the project libraries
124
+ %w(lib ext).each {|dir| PROJ.libs << dir if test ?d, dir}
125
+
126
+ # Setup some constants
127
+ DEV_NULL = File.exist?('/dev/null') ? '/dev/null' : 'NUL:'
128
+
129
+ def quiet( &block )
130
+ io = [STDOUT.dup, STDERR.dup]
131
+ STDOUT.reopen DEV_NULL
132
+ STDERR.reopen DEV_NULL
133
+ block.call
134
+ ensure
135
+ STDOUT.reopen io.first
136
+ STDERR.reopen io.last
137
+ $stdout, $stderr = STDOUT, STDERR
138
+ end
139
+
140
+ DIFF = if system("gdiff '#{__FILE__}' '#{__FILE__}' > #{DEV_NULL} 2>&1") then 'gdiff'
141
+ else 'diff' end unless defined? DIFF
142
+
143
+ SUDO = if system("which sudo > #{DEV_NULL} 2>&1") then 'sudo'
144
+ else '' end unless defined? SUDO
145
+
146
+ RCOV = "#{RUBY} -S rcov"
147
+ RDOC = "#{RUBY} -S rdoc"
148
+ GEM = "#{RUBY} -S gem"
149
+
150
+ %w(rcov spec/rake/spectask rubyforge bones facets/ansicode).each do |lib|
151
+ begin
152
+ require lib
153
+ Object.instance_eval {const_set "HAVE_#{lib.tr('/','_').upcase}", true}
154
+ rescue LoadError
155
+ Object.instance_eval {const_set "HAVE_#{lib.tr('/','_').upcase}", false}
156
+ end
157
+ end
158
+ HAVE_SVN = (Dir.entries(Dir.pwd).include?('.svn') and
159
+ system("svn --version 2>&1 > #{DEV_NULL}"))
160
+ HAVE_GIT = (Dir.entries(Dir.pwd).include?('.git') and
161
+ system("git --version 2>&1 > #{DEV_NULL}"))
162
+
163
+ # Reads a file at +path+ and spits out an array of the +paragraphs+
164
+ # specified.
165
+ #
166
+ # changes = paragraphs_of('History.txt', 0..1).join("\n\n")
167
+ # summary, *description = paragraphs_of('README.txt', 3, 3..8)
168
+ #
169
+ def paragraphs_of( path, *paragraphs )
170
+ title = String === paragraphs.first ? paragraphs.shift : nil
171
+ ary = File.read(path).delete("\r").split(/\n\n+/)
172
+
173
+ result = if title
174
+ tmp, matching = [], false
175
+ rgxp = %r/^=+\s*#{Regexp.escape(title)}/i
176
+ paragraphs << (0..-1) if paragraphs.empty?
177
+
178
+ ary.each do |val|
179
+ if val =~ rgxp
180
+ break if matching
181
+ matching = true
182
+ rgxp = %r/^=+/i
183
+ elsif matching
184
+ tmp << val
185
+ end
186
+ end
187
+ tmp
188
+ else ary end
189
+
190
+ result.values_at(*paragraphs)
191
+ end
192
+
193
+ # Adds the given gem _name_ to the current project's dependency list. An
194
+ # optional gem _version_ can be given. If omitted, the newest gem version
195
+ # will be used.
196
+ #
197
+ def depend_on( name, version = nil )
198
+ spec = Gem.source_index.find_name(name).last
199
+ version = spec.version.to_s if version.nil? and !spec.nil?
200
+
201
+ PROJ.gem.dependencies << case version
202
+ when nil; [name]
203
+ when %r/^\d/; [name, ">= #{version}"]
204
+ else [name, version] end
205
+ end
206
+
207
+ # Adds the given arguments to the include path if they are not already there
208
+ #
209
+ def ensure_in_path( *args )
210
+ args.each do |path|
211
+ path = File.expand_path(path)
212
+ $:.unshift(path) if test(?d, path) and not $:.include?(path)
213
+ end
214
+ end
215
+
216
+ # Find a rake task using the task name and remove any description text. This
217
+ # will prevent the task from being displayed in the list of available tasks.
218
+ #
219
+ def remove_desc_for_task( names )
220
+ Array(names).each do |task_name|
221
+ task = Rake.application.tasks.find {|t| t.name == task_name}
222
+ next if task.nil?
223
+ task.instance_variable_set :@comment, nil
224
+ end
225
+ end
226
+
227
+ # Change working directories to _dir_, call the _block_ of code, and then
228
+ # change back to the original working directory (the current directory when
229
+ # this method was called).
230
+ #
231
+ def in_directory( dir, &block )
232
+ curdir = pwd
233
+ begin
234
+ cd dir
235
+ return block.call
236
+ ensure
237
+ cd curdir
238
+ end
239
+ end
240
+
241
+ # Scans the current working directory and creates a list of files that are
242
+ # candidates to be in the manifest.
243
+ #
244
+ def manifest
245
+ files = []
246
+ exclude = PROJ.exclude.dup
247
+ comment = %r/^\s*#/
248
+
249
+ # process the ignore file and add the items there to the exclude list
250
+ if test(?f, PROJ.ignore_file)
251
+ ary = []
252
+ File.readlines(PROJ.ignore_file).each do |line|
253
+ next if line =~ comment
254
+ line.chomp!
255
+ line.strip!
256
+ next if line.nil? or line.empty?
257
+
258
+ glob = line =~ %r/\*\./ ? File.join('**', line) : line
259
+ Dir.glob(glob).each {|fn| ary << "^#{Regexp.escape(fn)}"}
260
+ end
261
+ exclude.concat ary
262
+ end
263
+
264
+ # generate a regular expression from the exclude list
265
+ exclude = Regexp.new(exclude.join('|'))
266
+
267
+ Find.find '.' do |path|
268
+ path.sub! %r/^(\.\/|\/)/o, ''
269
+ next unless test ?f, path
270
+ next if path =~ exclude
271
+ files << path
272
+ end
273
+ files.sort!
274
+ end
275
+
276
+ # We need a "valid" method thtat determines if a string is suitable for use
277
+ # in the gem specification.
278
+ #
279
+ class Object
280
+ def valid?
281
+ return !(self.empty? or self == "\000") if self.respond_to?(:to_str)
282
+ return false
283
+ end
284
+ end
285
+
286
+ # EOF