js_dir = 'vendor/assets/javascripts/' current_path = File.expand_path(File.dirname(__FILE__)) require 'fileutils' require 'open-uri' desc 'Copy over source from own pruned angular.code.js repo' task :copy do |t| version = ENV['VERSION'] || '' source_dir = ENV['SOURCE_DIR'] source_dir ||= '/opt/code.angularjs.org' source_dir = File.expand_path source_dir if !File.exists?(source_dir) || File.file?(source_dir) p 'SOURCE_DIR is not a directory or does not exist' next end if version.empty? || !File.exist?(File.join(source_dir, version)) p 'VERSION must target existing version in SOURCE_DIR' next end puts "Target version: #{version.chomp('/')}" source_version = File.join(source_dir, version) cp_r source_version, js_dir rm_rf File.join(js_dir, version, 'docs') rm_rf File.join(js_dir, version, 'i18n') Dir.chdir(File.join(js_dir, version)) do %w(zip min.js json txt js.map css).each do |file_ext| rm Dir.glob("*.#{file_ext}") end end end desc 'Fetches angular.js file from code.angular.js' task :download do |t| version = ENV['VERSION'] version ||= 'latest' puts "Target version: #{version.chomp('/')}" angular_root = "https://code.angularjs.org" response = open(angular_root) doc = Nokogiri::HTML(response) links = doc.css('a') known_versions = links.map {|link| link.attribute('href').to_s}.uniq.sort.reverse known_versions.delete_if do |href| href.empty? || (href =~ /^([0-9]).*\/$/).nil? end if !(known_versions.include? version + "/") puts "WARN: Specified version='#{version}' not found, setting to latest version: '#{known_versions.first}'" version = known_versions.first end # Download all the files Dir.mkdir(File.join(js_dir, version)) unless Dir.exist?(File.join(js_dir, version)) Dir.chdir(File.join(js_dir, version)) do response = open("#{angular_root}/#{version}/") doc = Nokogiri::HTML(response) links = doc.css('a') files = links.map {|link| link.attribute('href').to_s} # Select everything apart from the zip file and directories # files = files.find_all{|item| !item.end_with?('/') && !item.end_with?('.zip')} files = files.find_all{|item| !item.end_with?('min.js') && item.end_with?('.js')} files.each do |file| next if File.exists?(file) path = "#{angular_root}/#{version}/#{file}" puts "Creating #{file}" File.open(file, 'wb') do |filer| filer.write open(path).read end end end end