tasks/encode.rake
namespace :encode do
case RbConfig::CONFIG['host_os']
when /darwin/
paths = ['/Applications/Development/RubyEncoder.app/Contents/MacOS', '/Applications/RubyEncoder.app/Contents/MacOS']
RUBYENCPATH = File.exists?(paths.first) ? paths.first : paths.last
RUBYENC = "#{RUBYENCPATH}/rgencoder"
when /mingw/
RUBYENCPATH = 'C:/Program Files (x86)/RubyEncoder'
RUBYENC = "\"C:\\Program Files (x86)\\RubyEncoder\\rgencoder.exe\""
end
RUBYENC_VERSION = '2.0.0'
def exec_rubyencoder(cmd)
if verbose?
system(cmd) || raise("Econding failed.")
else
raise("Econding failed.") if `#{cmd}` !~ /processed, 0 errors/
end
end
task :rgloader do
execute "Copying rgloader" do
FileUtils.rm_rf "#{Dir.pwd}/rgloader"
RGPATH = RUBYENCPATH + '/Loaders'
Dir.mkdir "#{Dir.pwd}/rgloader"
files = Dir[RGPATH + '/**/**']
files.delete_if {|v| v.match(/bsd/i) or v.match(/linux/i)}
files.keep_if {|v| v.match(/#{RUBYENC_VERSION.gsub('.','')[0..1]}/) or v.match(/loader.rb/) }
files.each do |f|
FileUtils.cp(f, Dir.pwd + '/rgloader')
end
end
end
task :bin do
execute "Encrypting bin folder" do
FileUtils.rm_rf("bin-release")
FileUtils.cp_r("bin", "bin-release")
Dir["bin-release/*"].each do |path|
extname = File.extname(path).downcase
is_ruby_script = (extname == ".rb") || (extname.empty? and File.read(path) =~ /\#\!.+ruby/i)
next unless is_ruby_script
exec_rubyencoder("#{RUBYENC} --stop-on-error --encoding UTF-8 -b- --ruby #{RUBYENC_VERSION} #{path}")
end
end
end
task :lib do
execute "Encrypting lib folder" do
Dir["lib/rcs-*"].each do |path|
component = File.basename(path)
FileUtils.rm_rf "lib/#{component}-release"
FileUtils.mkdir_p "lib/#{component}-release"
Dir.chdir(path)
exec_rubyencoder("#{RUBYENC} --stop-on-error --encoding UTF-8 -o ../#{component}-release --ruby #{RUBYENC_VERSION} *.rb")
Dir.chdir "../.."
end
end
end
end
desc "Remove the protected release code"
task :unprotect do
execute "Deleting the protected release folder" do
FileUtils.rm_rf('rgloader')
FileUtils.rm_rf('bin-release')
Dir["lib/rcs-*-release"].each { |path| FileUtils.rm_rf(path) }
end
end
desc "Create the encrypted code for release"
task :protect => [:unprotect, :'encode:rgloader', :'encode:bin', :'encode:lib']