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
- .compile_all(root_dir = Dir.pwd) ⇒ Object
- .compile_file(scss_file, output_dir, base_dir) ⇒ Object
- .compile_scss(content, base_dir) ⇒ Object
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.}") 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 |