class AtomicSass::SassGenerator

Public Class Methods

source_paths() click to toggle source
# File lib/atomic_sass.rb, line 179
def self.source_paths
  [File.join(File.expand_path(File.dirname(__FILE__)), 'atomic_sass', 'templates')]
end
source_root() click to toggle source
# File lib/atomic_sass.rb, line 175
def self.source_root
  File.dirname(__FILE__)
end

Public Instance Methods

_build_application_sass(entries) click to toggle source
# File lib/atomic_sass.rb, line 99
def _build_application_sass(entries)
  ext = settings.sass_syntax
  create_file("#{settings.source_dir}/application.#{ext}") do
    entries.map do |entry|
      _sass_import("#{entry.pluralize}/#{entry}_manifest")
    end.join("\n")
  end
end
_build_empty_dirs(entries) click to toggle source
# File lib/atomic_sass.rb, line 108
def _build_empty_dirs(entries)
  entries.each do |entry|
    empty_directory("#{settings.source_dir}/#{entry.pluralize}")
  end
end
_build_manifest_entries(entries) click to toggle source
# File lib/atomic_sass.rb, line 120
def _build_manifest_entries(entries)
  ext = settings.sass_syntax
  entries.each do |entry|
    template("#{entry}_manifest.tt", "#{settings.source_dir}/#{entry.pluralize}/#{entry}_manifest.#{ext}")
  end
end
_compile_sass(watch = false) click to toggle source
# File lib/atomic_sass.rb, line 88
def _compile_sass(watch = false)
  ext = settings.sass_syntax
  if ext == 'sass'
    ::Sass::Exec::Sass.new(%W[ #{settings.source_dir}/application.#{ext}:#{settings.dest_dir}/application.css ]).parse
    ::Sass::Exec::Sass.new(%W[ #{settings.source_dir}/application.#{ext}:#{settings.dest_dir}/application.css ]).parse if watch
  else
    ::Sass::Exec::Scss.new(%W[ #{settings.source_dir}/application.#{ext}:#{settings.dest_dir}/application.css ]).parse
    ::Sass::Exec::Scss.new(%W[ #{settings.source_dir}/application.#{ext}:#{settings.dest_dir}/application.css ]).parse if watch
  end
end
_escape_file_path(path) click to toggle source
# File lib/atomic_sass.rb, line 127
def _escape_file_path(path)
  nesting_count = path.split('/').length
  if nesting_count == 0
    return ''
  else
    return '../' * nesting_count
  end
end
_extract_and_create_dirs(path, prefix) click to toggle source
# File lib/atomic_sass.rb, line 114
def _extract_and_create_dirs(path, prefix)
  enclosing_dirs = File.dirname(path) if File.dirname(path) != '.'
  empty_directory("#{prefix}/#{enclosing_dirs}") if enclosing_dirs
  return [File.basename(path), enclosing_dirs ? "#{enclosing_dirs}/" : '']
end
_include_atoms(include_types, atoms) click to toggle source
# File lib/atomic_sass.rb, line 136
def _include_atoms(include_types, atoms)
  ext = settings.sass_syntax
  include_types.each do |type, filenames|
    filenames.each do |filename|
      file_path, enclosing_dirs = _extract_and_create_dirs(filename, "#{settings.source_dir}/#{type.pluralize}")
      inject_into_file("#{settings.source_dir}/#{type.pluralize}/#{enclosing_dirs}_#{file_path}.#{ext}", before: "\n//--- END IMPORTS") do
        atoms.map do |atom|
          _sass_import("../#{_escape_file_path(enclosing_dirs)}atoms/#{atom}")
        end.join("\n").prepend("\n")
      end
    end
  end
end
_only_file_options() click to toggle source
# File lib/atomic_sass.rb, line 158
def _only_file_options
  options.reject { |key, value| key.match /include/ }
end
_only_include_options() click to toggle source
# File lib/atomic_sass.rb, line 162
def _only_include_options
  filtered_options = options.select { |key, value| key.match /include/ }
  if filtered_options.length > 0
    normalized_hash = {}
    normalized_hash['molecule'] = filtered_options['include'] if filtered_options['include']
    normalized_hash['quark'] = filtered_options['include-quark'] if filtered_options['include-quark']
    return normalized_hash
  else
    return nil
  end
end
_sass_import(file_path) click to toggle source
# File lib/atomic_sass.rb, line 150
def _sass_import(file_path)
  if settings.sass_syntax == 'sass'
    return "@import #{file_path}"
  else
    return "@import \"#{file_path}\";"
  end
end
append_to_manifest(manifest_type, generated_filenames) click to toggle source
# File lib/atomic_sass.rb, line 67
def append_to_manifest(manifest_type, generated_filenames)
  ext = settings.sass_syntax
  unless manifest_type == 'atom'
    inject_into_file("#{settings.source_dir}/#{manifest_type.pluralize}/#{manifest_type}_manifest.#{ext}", before: "\n//--- END IMPORTS") do
      generated_filenames.map do |filename|
        _sass_import(filename)
      end.join("\n").prepend("\n")
    end
  end
end
build() click to toggle source
# File lib/atomic_sass.rb, line 20
def build
  build_base_structure
end
build_base_structure() click to toggle source
# File lib/atomic_sass.rb, line 78
def build_base_structure
  entries = %w[ utility quark molecule atom ]
  manifest_entries = entries.reject { |e| e == 'atom' }
  empty_directory(settings.source_dir)
  empty_directory(settings.dest_dir)
  _build_application_sass(manifest_entries)
  _build_empty_dirs(entries)
  _build_manifest_entries(manifest_entries)
end
compile() click to toggle source
# File lib/atomic_sass.rb, line 42
def compile
  if options[:watch]
    _compile_sass(true)
  else
    _compile_sass
  end
end
create_sass_doc(path, key) click to toggle source
# File lib/atomic_sass.rb, line 56
def create_sass_doc(path, key)
  ext = settings.sass_syntax
  if not key.match /molecule|quark/
    create_file("#{path}.#{ext}")
  else
    create_file("#{path}.#{ext}") do
      ["//--- BEGIN IMPORTS", "//--- END IMPORTS", "\n"].join("\n")
    end
  end
end
generate() click to toggle source
# File lib/atomic_sass.rb, line 29
def generate
  _only_file_options.each do |key, values|
    values.each do |value|
      file_path, enclosing_dirs = _extract_and_create_dirs(value, "#{settings.source_dir}/#{key.pluralize}")
      create_sass_doc("#{settings.source_dir}/#{key.pluralize}/#{enclosing_dirs}_#{file_path}", key)
    end
    append_to_manifest(key, values)
  end
  _include_atoms(_only_include_options, options[:atom]) if _only_include_options && options[:atom]
end
init() click to toggle source
# File lib/atomic_sass.rb, line 15
def init
  template('settings.tt', '.atomic_sass.yml')
end
settings() click to toggle source
# File lib/atomic_sass.rb, line 52
def settings
  @settings ||= AtomicSass::Settings.new
end