class NeptuneCoffee::Generator
Constants
- SAFE_GENERATE_FIRST_LINE
Attributes
current_files[RW]
dirs[RW]
force[RW]
generated_files[RW]
overwrite[RW]
quiet[RW]
root[R]
skipped_files[RW]
to_generate_files[RW]
verbose[RW]
Public Class Methods
new(options)
click to toggle source
# File lib/neptune_coffee/generator.rb, line 14 def initialize(options) raise ArgumentError.new(":root option required, must be a string and valid path") unless Pathname.new(options[:root]).directory? @root = Pathname.new options[:root] @force = options[:force] @verbose = options[:verbose] @overwrite = options[:overwrite] @quiet = options[:quiet] reset_file_info end
Public Instance Methods
error(message)
click to toggle source
# File lib/neptune_coffee/generator.rb, line 32 def error(message) Guard::UI.error "NeptuneCoffee: "+message; end
file_was_generated_by_neptune_coffee(file)
click to toggle source
# File lib/neptune_coffee/generator.rb, line 69 def file_was_generated_by_neptune_coffee file !file.exist? || (file.read(SAFE_GENERATE_FIRST_LINE.length) == SAFE_GENERATE_FIRST_LINE) end
generate_all()
click to toggle source
returns:
{ current_files: [Pathnames...] generated_files: [Pathnames...] skipped_files: [Pathnames...] }
# File lib/neptune_coffee/generator.rb, line 48 def generate_all reset_file_info load_dirs success "generating all files in: #{root}" success "#{@dirs.length} directories found" @dirs.all.each do |dir| generate_module dir unless dir == root generate_namespace dir end success "#{@current_files.length}/#{@to_generate_files.length} files current" success "#{@generated_files.length} files generated" # if @generated_files.length > 0 warning "#{@skipped_files.length} files skipped (this is a name conflict. We recommend renaming your source file(s)." if @skipped_files.length> 0 return { current_files: @current_files.keys, generated_files: @generated_files.keys, skipped_files: @skipped_files.keys } end
generate_module(dir)
click to toggle source
# File lib/neptune_coffee/generator.rb, line 103 def generate_module dir subdirs = @dirs.subdirs(dir) files = dir.children.select {|f| f.extname.downcase == ".js" && !subdirs.index(f.sub_ext(""))} safe_generate(dir.sub_ext(".js")) {JavascriptGenerator.new(root, dir).module(@dirs.subdirs(dir), files)} end
generate_namespace(dir)
click to toggle source
# File lib/neptune_coffee/generator.rb, line 109 def generate_namespace dir safe_generate(dir + "namespace.js") {JavascriptGenerator.new(root, dir).namespace(@dirs.subdirs(dir))} end
info(message)
click to toggle source
# File lib/neptune_coffee/generator.rb, line 30 def info(message) Guard::UI.info "NeptuneCoffee: "+message unless @quiet; end
load_dirs()
click to toggle source
# File lib/neptune_coffee/generator.rb, line 24 def load_dirs @dirs = SimpleDirectoryStructure.new @root @dirs.add_all end
reset_file_info()
click to toggle source
# File lib/neptune_coffee/generator.rb, line 34 def reset_file_info @generated_files = {} @to_generate_files = {} @current_files = {} @skipped_files = {} end
safe_generate(file) { || ... }
click to toggle source
writes to “file” whatever the block yields IF
the file was originally generated by NeptuneCoffee (unless @overwrite) the file contents changed (unless @force)
# File lib/neptune_coffee/generator.rb, line 81 def safe_generate file @to_generate_files[file] = true info_file = file #join @root, file.split(@root)[-1] if @overwrite || file_was_generated_by_neptune_coffee(file) new_contents = SAFE_GENERATE_FIRST_LINE + " #{NeptuneCoffee::VERSION}\n" + "// path: #{file.relative_path_from @root}\n" + yield if @force || !file.exist? || file.read != new_contents @generated_files[file] = true success "generating: #{info_file}" show_generated new_contents if @verbose file.open("w") {|f| f.write new_contents} else @current_files[file] = true end else @skipped_files[file] = true warning "skipping: #{info_file}" end end
show_generated(contents)
click to toggle source
# File lib/neptune_coffee/generator.rb, line 73 def show_generated contents highlighted = CodeRay.scan(new_contents, :javascript).terminal info "output:\n "+highlighted.gsub("\n","\n ") end
success(message)
click to toggle source
# File lib/neptune_coffee/generator.rb, line 31 def success(message) Guard::UI.success "NeptuneCoffee: "+message unless @quiet; end
warning(message)
click to toggle source
# File lib/neptune_coffee/generator.rb, line 29 def warning(message) Guard::UI.warning "NeptuneCoffee: "+message unless @quiet; end