namespace :ext do
rootdir = Pathname('extensions') desc 'Build Chrome Extension' task chrome: 'chrome:build' namespace :chrome do dist = Pathname('dist/crx') extdir = rootdir.join(dist) manifest_json = rootdir.join('chrome/manifest.json') directory extdir task build: [ extdir, 'lib:templates' ] do cd rootdir do cp_r [ 'img/', 'tmp/lib/' ], dist %x`cd chrome && git ls-files`.split("\n").each do |src| dest = dist.join(src) mkdir_p dest.dirname cp Pathname('chrome').join(src), dest end end end # Generate a .crx file. task crx: [ :build, :npm ] do out = "crx-web-console-#{JSON.parse(File.read(manifest_json))["version"]}.crx" cd(extdir) { sh "node \"$(npm bin)/crx\" pack ./ -p ../crx-web-console.pem -o ../#{out}" } end # Generate a .zip file for Chrome Web Store. task zip: [ :build ] do version = JSON.parse(File.read(manifest_json))["version"] cd(extdir) { sh "zip -r ../crx-web-console-#{version}.zip ./" } end desc 'Launch a browser with the chrome extension.' task run: [ :build ] do cd(rootdir) { sh "sh ./script/run_chrome.sh --load-extension=#{dist}" } end end task :npm do cd(rootdir) { sh "npm install --silent" } end namespace :lib do templates = Pathname('lib/web_console/templates') tmplib = rootdir.join('tmp/lib/') js_erb = FileList.new(templates.join('**/*.js.erb')) dirs = js_erb.pathmap("%{^#{templates},#{tmplib}}d") task templates: dirs + js_erb.pathmap("%{^#{templates},#{tmplib}}X") dirs.each { |d| directory d } rule '.js' => [ "%{^#{tmplib},#{templates}}X.js.erb" ] do |t| File.write(t.name, WebConsole::Testing::ERBPrecompiler.new(t.source).build) end end
end