class UserStylesheet

Attributes

env[R]
file_info[R]
scss_file[R]
scss_info[R]
scss_variables[R]

Public Class Methods

new(env:, scss_variables:, file_info:, scss_info: {}) click to toggle source
# File lib/user_stylesheet.rb, line 4
def initialize(env:, scss_variables:, file_info:, scss_info: {})
  @env = env
  @scss_variables = OpenStruct.new(scss_variables)
  @file_info = file_info
  @scss_info = scss_info.empty? ? default_scss_info : scss_info
end

Public Instance Methods

compile() click to toggle source
# File lib/user_stylesheet.rb, line 11
def compile
  overwrite_scss
  File.write(scss_file.path, render_css)
  newpath = File.join(file_info[:tmp_dir], "#{file_info[:file_name]}.css")
  File.rename(scss_file.path, newpath)
  File.new(newpath)
end

Private Instance Methods

asset_source() click to toggle source
# File lib/user_stylesheet.rb, line 47
def asset_source
  if env.find_asset(file_info[:file_name])
    env.find_asset(file_info[:file_name]).source
  else
    unloaded_asset
  end
end
default_scss_info() click to toggle source
# File lib/user_stylesheet.rb, line 21
def default_scss_info
  {
    syntax: :scss,
    cache: false,
    read_cache: false,
    style: :compressed
  }
end
overwrite_scss() click to toggle source
# File lib/user_stylesheet.rb, line 30
def overwrite_scss
  template_body = ERB.new(File.read(File.expand_path(file_info[:template_file_path]))).result(binding)
  @scss_file = File.open(scss_file_path, 'w') { |f| f.write(template_body); f.flush }
end
render_css() click to toggle source
# File lib/user_stylesheet.rb, line 43
def render_css
  Sass::Engine.new(asset_source, scss_info).render
end
scss_file_dir() click to toggle source
# File lib/user_stylesheet.rb, line 35
def scss_file_dir
  @scss_file_path ||= File.expand_path(file_info[:tmp_dir])
end
scss_file_path() click to toggle source
# File lib/user_stylesheet.rb, line 39
def scss_file_path
  @scss_file_path ||= File.join(scss_file_dir, "#{file_info[:file_name]}.scss")
end
unloaded_asset() click to toggle source
# File lib/user_stylesheet.rb, line 55
def unloaded_asset
  uri = Sprockets::URIUtils.build_asset_uri(scss_file.path, type: 'text/css')
  asset = Sprockets::UnloadedAsset.new(uri, env)
  env.load(asset.uri).source
end