module Toppings::Helper::SassConversionHelper

Public Instance Methods

convert_to_scss(content) click to toggle source
# File lib/toppings/helper/sass_conversion_helper.rb, line 16
def convert_to_scss(content)
  init_tempfiles_for_conversion(content)

  # convert source content to the target format, placed in the target file
  # TODO: make conversion more dynamic, by allowing conversion from scss to sass too.
  ::Sass::Util.silence_sass_warnings do
    Sass::Exec::SassConvert.new(['-F', 'sass', '-T', 'scss', source_file, target_file]).parse
  end

  converted_content
ensure
  [source_file, target_file].each(&:close)
  [source_file, target_file].each(&:unlink)
end
load_compass_paths() click to toggle source
# File lib/toppings/helper/sass_conversion_helper.rb, line 50
def load_compass_paths
  load_paths.merge Compass.configuration.sass_load_paths
end
load_dependencies(file_path = nil) click to toggle source
# File lib/toppings/helper/sass_conversion_helper.rb, line 44
def load_dependencies(file_path = nil)
  Toppings::SASS_DEPENDENCIES.each { |dep| require dep.to_s }
  load_compass_paths
  load_paths << file_path if file_path
end
load_paths() click to toggle source
# File lib/toppings/helper/sass_conversion_helper.rb, line 54
def load_paths
  sass_engine_options[:load_paths] ||= Set.new
end
sass_engine_options() click to toggle source
# File lib/toppings/helper/sass_conversion_helper.rb, line 58
def sass_engine_options
  @sass_engine_options ||= {}
end
valid_sass?(content, file_path = nil) click to toggle source
# File lib/toppings/helper/sass_conversion_helper.rb, line 31
def valid_sass?(content, file_path = nil)
  load_dependencies(file_path)

  ::Sass::Util.silence_sass_warnings do
    begin
      Sass::Engine.new(content, sass_engine_options.merge(check_syntax: true)).render
    rescue ::Sass::SyntaxError => e
      say e.message
      false
    end
  end
end

Private Instance Methods

converted_content() click to toggle source
# File lib/toppings/helper/sass_conversion_helper.rb, line 77
def converted_content
  target_file.rewind
  target_file.read
end
init_tempfiles_for_conversion(content) click to toggle source
# File lib/toppings/helper/sass_conversion_helper.rb, line 64
def init_tempfiles_for_conversion(content)
  file_name    = Digest::MD5.new.update(content)
  @source_file = Tempfile.new("#{file_name}_source")
  @target_file = Tempfile.new("#{file_name}_target")

  write_source(content)
end
write_source(content) click to toggle source
# File lib/toppings/helper/sass_conversion_helper.rb, line 72
def write_source(content)
  source_file.write(content)
  source_file.rewind
end