module IsoDoc::GemTasks

Public Instance Methods

comment_out_liquid(text) click to toggle source
# File lib/isodoc/gem_tasks.rb, line 75
def comment_out_liquid(text)
  text.split("\n").map do |line|
    if line.match?(/{({|%).+(}|%)}/)
      "/* LIQUID_COMMENT#{line}LIQUID_COMMENT */"
    else
      line
    end
  end.join("\n")
end
compile_scss(filename) click to toggle source
# File lib/isodoc/gem_tasks.rb, line 104
def compile_scss(filename)
  require "sassc"

  isodoc_path = if Gem.loaded_specs["isodoc"]
                  File.join(Gem.loaded_specs["isodoc"].full_gem_path,
                            "lib", "isodoc")
                else
                  File.join("lib", "isodoc")
                end
  [isodoc_path,
   File.dirname(filename)].each do |name|
    SassC.load_paths << name
  end
  sheet_content = File.read(filename, encoding: "UTF-8")
  SassC::Engine.new(fonts_placeholder + sheet_content,
                    syntax: :scss,
                    importer: SasscImporter)
    .render
end
compile_scss_task(current_task) click to toggle source
# File lib/isodoc/gem_tasks.rb, line 124
def compile_scss_task(current_task)
  filename = current_task.source
  basename = File.basename(filename, ".*")
  compiled_path = File.join(File.dirname(filename), "#{basename}.css")
  content = uncomment_out_liquid(compile_scss(filename))
  File.open(compiled_path, "w:UTF-8") do |f|
    f.write(content)
  end
  CLEAN << compiled_path
end
fonts_placeholder() click to toggle source
# File lib/isodoc/gem_tasks.rb, line 92
    def fonts_placeholder
      <<~TEXT
        $bodyfont: "{{bodyfont}}";
        $headerfont: "{{headerfont}}";
        $monospacefont: "{{monospacefont}}";
        $normalfontsize: "{{normalfontsize}}";
        $smallerfontsize: "{{smallerfontsize}}";
        $footnotefontsize: "{{footnotefontsize}}";
        $monospacefontsize: "{{monospacefontsize}}";
      TEXT
    end
git_cache_compiled_files() click to toggle source
# File lib/isodoc/gem_tasks.rb, line 54
def git_cache_compiled_files
  CLEAN.each do |css_file|
    sh "git add #{css_file}"
  end
end
git_rm_compiled_files() click to toggle source
# File lib/isodoc/gem_tasks.rb, line 60
def git_rm_compiled_files
  CLEAN.each do |css_file|
    sh "git rm --cached #{css_file}"
  end
end
install() click to toggle source
# File lib/isodoc/gem_tasks.rb, line 13
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_borken_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
notify_borken_compilation(error, current_task) click to toggle source
# File lib/isodoc/gem_tasks.rb, line 43
def notify_borken_compilation(error, current_task)
  puts("Cannot compile #{current_task} because of #{error.message}")
  puts("continue anyway[y|n]?")
  answer = STDIN.gets.strip
  if %w[y yes].include?(answer.strip.downcase)
    puts("Cannot compile #{current_task} because of #{error.message}")
  else
    exit(0)
  end
end
process_css_files(scss_files) { |file_name| ... } click to toggle source
# File lib/isodoc/gem_tasks.rb, line 66
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
uncomment_out_liquid(text) click to toggle source
# File lib/isodoc/gem_tasks.rb, line 85
def uncomment_out_liquid(text)
  text
    .gsub("/* LIQUID_COMMENT", "")
    .gsub("LIQUID_COMMENT */", "")
    .gsub('"{{', "{{").gsub('}}"', "}}")
end