lib/smallvictories.rb in smallvictories-0.0.2 vs lib/smallvictories.rb in smallvictories-0.0.3

- old
+ new

@@ -1,189 +1,13 @@ +libdir = File.dirname(__FILE__) +$LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir) + require "smallvictories/version" +require "smallvictories/constants" +require "smallvictories/logger" +require "smallvictories/configuration" +require "smallvictories/compiler" +require "smallvictories/watcher" require 'yaml' require 'sassc' require 'sprockets' require 'listen' - -module SmallVictories - extend self - DEFAULT_SASS_DIR = '_sass' - DEFAULT_STYLESHEET = '_sv_custom.css' - DEFAULT_CSS_DIR = '_css' - DEFAULT_SOURCE = '' - DEFAULT_DESTINATION = '_site' - ROOT = Dir.pwd - - def hello - "Hello World!" - end - - def config - if File.exists?('_config.yml') - YAML.load(File.read('_config.yml')) || {} - else - {} - end - end - - def config_folder key - config[key.to_s].chomp("/").reverse.chomp("/").reverse if config.has_key?(key.to_s) - end - - def source - config_folder(:source) || DEFAULT_SOURCE - end - - def full_source_path - "#{ROOT}/#{source}" - end - - def destination - config_folder(:destination) || DEFAULT_DESTINATION - end - - def full_destination_path - "#{ROOT}/#{destination}/" - end - - def css_dir - config_folder(:css_dir) || DEFAULT_CSS_DIR - end - - def full_css_path - "#{full_source_path}/#{css_dir}/" - end - - def stylesheet - config_folder(:stylesheet) || DEFAULT_STYLESHEET - end - - def full_stylesheet_path - "#{full_css_path}/#{stylesheet}" - end - - def sass_dir - config_folder(:sass_dir) || DEFAULT_SASS_DIR - end - - def full_sass_path - "#{full_source_path}/#{sass_dir}/" - end - - def full_sass_path - "#{full_source_path}/#{sass_dir}/" - end - - def build_listener - Listen.to( - full_source_path, - force_polling: true, - &(listen_handler) - ) - end - - def listen_handler - proc do |modified, added, removed| - paths = modified + added + removed - extensions = paths.map{ |path| File.extname(path) } - extensions.each do |ext| - case ext - when '.scss' - puts sass - puts compile - when '.sass' - puts sass - puts compile - else - end - end - end - end - - def setup - setup_stylesheet - end - - def watch - listener = build_listener - listener.start - puts "👀" - - trap("INT") do - listener.stop - puts "🔥 🔥 🔥 Halting auto-regeneration." - exit 0 - end - - sleep_forever - rescue ThreadError - # Ctrl-C - end - - def sass - errors, rendered = [], [] - Dir.glob([full_sass_path.concat('*.scss'), full_sass_path.concat('*.sass')]) do |path| - begin - file_name = Pathname.new(path).basename.to_s.split('.').first - next if file_name =~ /^_/ # do not render partials - file = File.open(path).read - engine = SassC::Engine.new(file, { style: :compressed, load_paths: [full_sass_path] }) - css = engine.render - output_file_name = file_name.concat('.css') - output_path = full_css_path.concat(output_file_name) - File.open(output_path, 'w') { |file| file.write(css) } - rendered << "👍 rendered #{destination.concat('/').concat(css_dir).concat('/').concat(output_file_name)}\n" - rescue => e - errors << "🔥 Sass 🔥 #{e}\n" - end - end - rendered.join(', ') + errors.join(', ') - end - - def compile - sprockets = Sprockets::Environment.new(ROOT) do |environment| - environment.js_compressor = :uglify - environment.css_compressor = :scss - end - - sprockets.append_path(full_css_path) - - errors, compiled = [], [] - begin - [stylesheet].each do |bundle| - assets = sprockets.find_asset(bundle) - prefix, basename = assets.pathname.to_s.split('/')[-2..-1] - FileUtils.mkpath full_destination_path.concat(prefix) - - assets.write_to(full_destination_path.concat(basename)) - compiled << "👍 compiled #{destination.concat('/').concat(basename)}\n" - end - rescue => e - puts e.class - errors << "🔥 Compile 🔥 #{e}\n" - end - compiled.join(', ') + errors.join(', ') - end - - def sleep_forever - loop { sleep 1000 } - end - - private - - def create_src_file source, destination - spec = Gem::Specification.find_by_name("smallvictories") - contents = File.open(spec.gem_dir.concat('/src/').concat(source)).read - File.open(destination, 'w') { |file| file.write(contents) } - end - - def setup_stylesheet - setup_directory(full_css_path) - unless File.exists?(full_stylesheet_path) - create_src_file('stylesheet.css', full_stylesheet_path) - end - end - - def setup_directory path - Dir.mkdir(path) unless File.exists?(path) - end -end