Module: Tina4::ScssCompiler

Defined in:
lib/tina4/scss_compiler.rb

Constant Summary collapse

SCSS_DIRS =
%w[src/scss scss src/styles styles].freeze
CSS_OUTPUT =
"public/css"

Class Method Summary collapse

Class Method Details

.compile_all(root_dir = Dir.pwd) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/tina4/scss_compiler.rb', line 10

def compile_all(root_dir = Dir.pwd)
  output_dir = File.join(root_dir, CSS_OUTPUT)
  FileUtils.mkdir_p(output_dir)

  SCSS_DIRS.each do |dir|
    scss_dir = File.join(root_dir, dir)
    next unless Dir.exist?(scss_dir)

    Dir.glob(File.join(scss_dir, "**/*.scss")).each do |scss_file|
      next if File.basename(scss_file).start_with?("_") # Skip partials
      compile_file(scss_file, output_dir, scss_dir)
    end
  end
end

.compile_file(scss_file, output_dir, base_dir) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/tina4/scss_compiler.rb', line 25

def compile_file(scss_file, output_dir, base_dir)
  relative = scss_file.sub(base_dir, "").sub(/\.scss$/, ".css")
  css_file = File.join(output_dir, relative)
  FileUtils.mkdir_p(File.dirname(css_file))

  scss_content = File.read(scss_file)
  css_content = compile_scss(scss_content, File.dirname(scss_file))
  File.write(css_file, css_content)

  Tina4::Log.debug("Compiled SCSS: #{scss_file} -> #{css_file}")
rescue => e
  Tina4::Log.error("SCSS compilation failed: #{scss_file} - #{e.message}")
end

.compile_scss(content, base_dir) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/tina4/scss_compiler.rb', line 39

def compile_scss(content, base_dir)
  # Try sassc gem first
  begin
    require "sassc"
    return SassC::Engine.new(content, style: :expanded, load_paths: [base_dir]).render
  rescue LoadError
    # Fall through to basic compiler
  end

  # Basic SCSS to CSS conversion (handles common patterns)
  basic_compile(content, base_dir)
end