# frozen_string_literal: true require "sassc" require "isodoc/sassc_importer" require "rake/clean" module IsoDoc module GemTasks extend Rake::DSL if defined? Rake::DSL @@css_list = [] module_function def self.css_list @@css_list end def install rule ".css" => [proc { |tn| tn.sub(/\.css$/, ".scss") }] do |current_task| puts(current_task) compile_scss_task(current_task) rescue StandardError => e notify_broken_compilation(e, current_task) end scss_files = Rake::FileList["lib/**/*.scss"] source_files = scss_files.ext(".css") task :comment_out_liquid do process_css_files(scss_files) do |file_name| comment_out_liquid(File.read(file_name, encoding: "UTF-8")) end end task build_scss: [:comment_out_liquid].push(*source_files) do process_css_files(scss_files) do |file_name| uncomment_out_liquid(File.read(file_name, encoding: "UTF-8")) end git_cache_compiled_files && puts("Built scss!") end Rake::Task["build"].enhance [:build_scss] do git_rm_compiled_files Rake::Task[:clean].invoke end end def interactive? ENV["CI"] == nil end def notify_broken_compilation(error, current_task) puts("Cannot compile #{current_task} because of #{error.message}") return unless interactive? puts("continue anyway[y|n]?") answer = $stdin.gets.strip exit(0) unless %w[y yes].include?(answer.strip.downcase) end def git_cache_compiled_files @@css_list.each do |css_file| sh "git add #{css_file}" end end def git_rm_compiled_files @@css_list.each do |css_file| sh "git rm --cached #{css_file}" end end def process_css_files(scss_files) scss_files.each do |file_name| result = yield(file_name) File.open(file_name, "w", encoding: "UTF-8") do |file| file.puts(result) end end end def comment_out_liquid(text) text.split("\n").map do |line| if line.match?(/(?