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