lib/work_bench/exporter.rb in work-bench-1.0.7 vs lib/work_bench/exporter.rb in work-bench-1.0.8
- old
+ new
@@ -1,76 +1,98 @@
module Workbench
+ # Export project to specific directory
class Exporter
- def initialize src, dest, fix = false
+ # @param [String] src source directory
+ # @param [String] dst destination directory
+ # @param [Boolean] fix fix relative url
+ def initialize src, dst, fix = false
@fix = fix
@src = src
- @dest = dest
- @browser = Rack::Test::Session.new(Rack::MockSession.new(Workbench::Application.new.app))
+ @dst = dst
+ @browser = Rack::Test::Session.new(Rack::MockSession.new(Workbench::Application.new(src).app))
end
+ # Process export
def process
- puts 'Export project'
+ puts 'Exporting project'.color(:green)
compile_sass
copy_public_folder
copy_views
end
private
+ # Save file to filesystem
+ #
+ # @param [String] path path to file
+ # @param [String] content file content
def save_file path, content
if @fix
content = content.gsub "url('/", "url('"
content = content.gsub 'src="/', 'src="'
content = content.gsub 'href="/', 'href="'
end
File.open(path, 'w+') { |f| f.puts content }
end
+ # Log action to STDOUT
+ #
+ # @param msg [String] message
def log_action msg
puts '=> ' + msg
end
+ # Virtually get URL without starting server
+ #
+ # @param [String] path path to file
def get_url path
@browser.get path, {}, {'REQUEST_URI' => ['http://example.org', path].join('/')}
response = @browser.last_response
response.body
end
+ # Compile SASS directory
def compile_sass
sass_files = get_file_list 'sass'
sass_files.each do |file|
ext = File.extname file
path = "css/#{file.gsub(ext, '.css')}"
body = get_url path
save_file "#{@src}/public/#{path}", body
end
end
+ # Export Public folder content
def copy_public_folder
- FileUtils.mkdir(@dest) unless Dir.exist? @dest
+ FileUtils.mkdir(@dst) unless Dir.exist? @dst
file_list = get_file_list 'public'
file_list.each do |filename|
- dirname = File.join(@dest, File.dirname(filename))
+ dirname = File.join(@dst, File.dirname(filename))
FileUtils.mkdir_p(dirname) unless Dir.exist? dirname
- FileUtils.cp( File.join(@src, 'public', filename), File.join(@dest, filename))
- log_action "Copy #{filename}"
+ FileUtils.cp( File.join(@src, 'public', filename), File.join(@dst, filename))
+ log_action "Copy #{filename.color(:blue)}"
end
end
+ # Parse views and compile to export folder
def copy_views
file_list = get_file_list 'haml'
file_list.each do |filename|
body = get_url filename
filename = filename.gsub('.haml', '.html')
- dirname = File.dirname(File.join(@dest, filename))
+ dirname = File.dirname(File.join(@dst, filename))
FileUtils.mkdir_p(dirname) unless Dir.exist? dirname
- save_file "#{@dest}/#{filename}", body
- log_action "Copy #{filename}"
+ save_file "#{@dst}/#{filename}", body
+ log_action "Copy #{filename.color(:blue)}"
end
end
+ # Recursively get file list
+ #
+ # @param [String] relative_path path to directory
+ # @return [Array] file list
def get_file_list relative_path
path = File.join(@src, relative_path)
result = nil
FileUtils.cd(path) do
result = Dir.glob("**/*", File::FNM_DOTMATCH)