熊手付き
ディレクトリからすべてのファイルを一覧表示するが、ファイル内のすべてを除外するrakeに依存する最も簡単な解決策.gitignore
:
require 'rake/file_list'
Rake::FileList['**/*'].exclude(*File.read('.gitignore').split)
RubyGems
公式のrubygemsソリューション、手動でリストして除外します。
require 'rake'
spec.files = FileList['lib/*.rb',
'bin/*',
'[A-Z]*',
'test/*'].to_a
# or without Rake...
spec.files = Dir['lib/*.rb'] + Dir['bin/*']
spec.files += Dir['[A-Z]*'] + Dir['test/**/*']
spec.files.reject! { |fn| fn.include? "CVS" }
バンドラー
Bundlerソリューション、手動で一覧表示:
s.files = Dir.glob("{lib,exe}/**/*", File::FNM_DOTMATCH).reject {|f| File.directory?(f) }
注:gemはデフォルトでディレクトリを無視するため、ディレクトリを拒否しても意味がありません。
Vagrant
純粋なルビーを模倣git ls-files
して世話をするためのVagrantソリューション:.gitignore
# The following block of code determines the files that should be included
# in the gem. It does this by reading all the files in the directory where
# this gemspec is, and parsing out the ignored files from the gitignore.
# Note that the entire gitignore(5) syntax is not supported, specifically
# the "!" syntax, but it should mostly work correctly.
root_path = File.dirname(__FILE__)
all_files = Dir.chdir(root_path) { Dir.glob("**/{*,.*}") }
all_files.reject! { |file| [".", ".."].include?(File.basename(file)) }
all_files.reject! { |file| file.start_with?("website/") }
all_files.reject! { |file| file.start_with?("test/") }
gitignore_path = File.join(root_path, ".gitignore")
gitignore = File.readlines(gitignore_path)
gitignore.map! { |line| line.chomp.strip }
gitignore.reject! { |line| line.empty? || line =~ /^(#|!)/ }
unignored_files = all_files.reject do |file|
# Ignore any directories, the gemspec only cares about files
next true if File.directory?(file)
# Ignore any paths that match anything in the gitignore. We do
# two tests here:
#
# - First, test to see if the entire path matches the gitignore.
# - Second, match if the basename does, this makes it so that things
# like '.DS_Store' will match sub-directories too (same behavior
# as git).
#
gitignore.any? do |ignore|
File.fnmatch(ignore, file, File::FNM_PATHNAME) ||
File.fnmatch(ignore, File.basename(file), File::FNM_PATHNAME)
end
end
Pathspec
pathspecgemを使用するMatch Path Specifications, such as .gitignore, in Ruby!
https://github.com/highb/pathspec-rubyを参照してください
参考文献
参照:
Bundler VagrantRubyGemsRakeの
簡単
な
ソリューション