class BlastWolf
Public Class Methods
new( user_config={} )
click to toggle source
# File lib/blastwolf.rb, line 12 def initialize( user_config={} ) @config = { :template_dir => 'blastwolf/templates', :default_scss => ['html.syntax', '_colours', '_layout'], :build_folder => File.join(PROJECT_ROOT, '_build'), :patterns_folder => File.join(PROJECT_ROOT, 'examples'), :basepath => '' } @config.merge!( user_config ) setup_build_folders( @config[:build_folder] ) end
Public Instance Methods
build_artifact( type )
click to toggle source
# File lib/blastwolf.rb, line 85 def build_artifact( type ) contents = '' Dir.glob(examples_path type) do |file| contents << File.read( file ) contents << "\n\t/* -------------------------- */\n" end contents end
build_global_scss()
click to toggle source
# File lib/blastwolf.rb, line 114 def build_global_scss includes = @config[:default_scss] includes << "patterns" file_contents = includes.map { |inc| "@import '#{inc}';\n" }.join() write_file( :global_scss, file_contents ) end
build_image_dir()
click to toggle source
# File lib/blastwolf.rb, line 69 def build_image_dir img_dir = File.join(@config[:build_folder], 'img') Dir.glob(File.join(examples_path, "*.{jpg,png,gif}")) do |file| puts file FileUtils.cp file, img_dir end end
build_js()
click to toggle source
# File lib/blastwolf.rb, line 96 def build_js js = "$(document).ready(function() {\n\n" js << build_artifact(:js) js << "});" write_file( :js, js ) end
build_patterns_artifacts()
click to toggle source
# File lib/blastwolf.rb, line 63 def build_patterns_artifacts write_file( :scss, build_artifact( :scss ) ) build_js build_image_dir end
compile_css()
click to toggle source
# File lib/blastwolf.rb, line 104 def compile_css scss_path = File.join(@config[:build_folder], 'scss') file = File.join(scss_path, 'global.scss') template = File.read(file) sass_engine = Sass::Engine.new(template, { :load_paths => [scss_path], :syntax => :scss,}) output = sass_engine.render write_file( :css, output ) end
copy_folders( folders, src, dest )
click to toggle source
# File lib/blastwolf.rb, line 40 def copy_folders( folders, src, dest ) folders.each do |f| FileUtils.cp_r( File.join(src, f), dest ) end end
copy_markup(src, dest)
click to toggle source
# File lib/blastwolf.rb, line 34 def copy_markup(src, dest) Dir.glob(File.join(src, '*.html')).each do |file| FileUtils.cp file, dest end end
do_it_all()
click to toggle source
# File lib/blastwolf.rb, line 27 def do_it_all generate_homepage generate_doc_pages build_patterns_artifacts build_global_scss end
examples_path( filetype=nil )
click to toggle source
# File lib/blastwolf.rb, line 191 def examples_path( filetype=nil ) path = '' if [:html, :scss, :js].include? filetype path = File.join(@config[:patterns_folder], '*', '*.' + filetype.to_s) else path = File.join(@config[:patterns_folder], '*') end path end
generate_doc_pages()
click to toggle source
# File lib/blastwolf.rb, line 77 def generate_doc_pages get_patterns.each do |pattern| doc = render( 'doc_page', pattern['title'], pattern ) filename = File.join(@config[:build_folder], pattern['filename']) File.open(filename, "w") { |file| file.write(doc) } end end
generate_homepage()
click to toggle source
# File lib/blastwolf.rb, line 56 def generate_homepage title = "Index of examples" patterns = get_patterns html = render( 'index', title, patterns ) write_file( :home, html ) end
get_filename( absolute_file_path )
click to toggle source
# File lib/blastwolf.rb, line 186 def get_filename( absolute_file_path ) Pathname.new( absolute_file_path ).basename.to_s end
get_patterns()
click to toggle source
# File lib/blastwolf.rb, line 125 def get_patterns patterns = [] Dir.glob(examples_path :html ).each do |file| patterns << { 'title' => get_title( file ), 'filename' => get_filename( file ), 'contents' => File.read( file ) } end patterns end
get_template( filename )
click to toggle source
# File lib/blastwolf.rb, line 152 def get_template( filename ) template_filename = filename + '.liquid' template_dir = File.join(File.dirname(__FILE__), 'blastwolf', 'templates') File.read(File.join(template_dir, template_filename)) end
get_title( file )
click to toggle source
# File lib/blastwolf.rb, line 181 def get_title( file ) get_filename( file ).gsub(/\..*$/, '').gsub(/_(.)/) {|s| " #{s.upcase}" } end
render( template_file, page_title, vars )
click to toggle source
# File lib/blastwolf.rb, line 137 def render( template_file, page_title, vars ) contents = Liquid::Template.parse( get_template( template_file ) ) layout = Liquid::Template.parse( get_template('layout') ) vars = { 'patterns' => vars } if vars.kind_of?(Array) vars[:basepath] = @config[:basepath] rendered_page = layout.render( 'title' => page_title, 'content' => contents.render( vars ) ) end
setup_build_folders( target_folder )
click to toggle source
# File lib/blastwolf.rb, line 46 def setup_build_folders( target_folder ) # FileUtils.rm_r target_folder unless File.directory?( target_folder ) FileUtils.mkdir(target_folder) unless File.directory?( target_folder ) ['css', 'js', 'scss', 'img'].each do |dir| subdir = File.join(target_folder, dir) FileUtils.mkdir( subdir ) unless File.directory?( subdir ) end end
write_file( file_descriptor, contents )
click to toggle source
# File lib/blastwolf.rb, line 158 def write_file( file_descriptor, contents ) case file_descriptor when :scss filename = 'scss/patterns.scss' when :js filename = 'js/patterns.js' when :home filename = 'index.html' when :global_scss filename = 'scss/global.scss' when :css filename = 'css/global.css' else raise "I've no idea what file you want me to write" end filename = File.join(@config[:build_folder], filename) puts filename File.open(filename, 'w') { |file| file.write(contents) } end