class Tennpipes::Generators::Project

Responsible for generating new Tennpipes projects based on the specified project components.

Public Class Methods

banner() click to toggle source
source_root() click to toggle source
# File lib/tennpipes-init/generators/project.rb, line 12
def self.source_root; File.expand_path(File.dirname(__FILE__)); end

Public Instance Methods

bundle_dependencies() click to toggle source

Bundle all required components using bundler and Gemfile.

# File lib/tennpipes-init/generators/project.rb, line 123
def bundle_dependencies
  if options[:bundle]
    run_bundler
  end
end
finish_message() click to toggle source

Finish message.

# File lib/tennpipes-init/generators/project.rb, line 132
def finish_message
  say
  say '=' * 65, :green
  say "#{name} is ready for development!", :green
  say '=' * 65, :green
  say "$ cd #{options[:root]}/#{name}"
  say "$ bundle" unless options[:bundle]
  say "=" * 65, :green
  say
end
git_author_email() click to toggle source

Returns the git author email config or a fill-in value.

# File lib/tennpipes-init/generators/project.rb, line 154
def git_author_email
  git_author_email = `git config user.email`.chomp rescue ''
  git_author_email.empty? ? "TODO: Write your email address" : git_author_email
end
git_author_name() click to toggle source

Returns the git author name config or a fill-in value.

# File lib/tennpipes-init/generators/project.rb, line 146
def git_author_name
  git_author_name = `git config user.name`.chomp rescue ''
  git_author_name.empty? ? "TODO: Write your name" : git_author_name
end
setup_components() click to toggle source

For each component, retrieve a valid choice and then execute the associated generator.

# File lib/tennpipes-init/generators/project.rb, line 82
def setup_components
  return if options[:template]
  @_components = options.dup.slice(*self.class.component_types)
  self.class.component_types.each do |comp|
    choice = @_components[comp] = resolve_valid_choice(comp)
    execute_component_setup(comp, choice)
  end
  store_component_config('.components')
  store_component_choice(:namespace, @project_name)
  store_component_choice(:migration_format, options[:migration_format])
end
setup_project() click to toggle source

Copies over the Tennpipes base application app.

# File lib/tennpipes-init/generators/project.rb, line 44
def setup_project
  valid_constant? name
  app = (options[:app] || "App")

  @project_name = name.gsub(/\W/, '_').underscore.camelize
  @app_name = app.gsub(/\W/, '_').camelize
  self.destination_root = File.join(options[:root], name)
  if options[:template]
    execute_runner(:template, options[:template])
  else
    directory('project/', destination_root)
    empty_directory destination_root('public/images')
    empty_directory destination_root('public/javascripts')
    empty_directory destination_root('public/stylesheets')
    store_component_config('.components')
    unless options[:lean]
      app_skeleton('app', options[:tiny])
      append_file destination_root('config/apps.rb'), "Tennpipes.mount('#{@project_name}::#{@app_name}', :app_file => Tennpipes.root('app/app.rb')).to('/')\n"
    end
    template 'templates/Gemfile.tt', destination_root('Gemfile')
    template 'templates/Rakefile.tt', destination_root('Rakefile')
    template 'templates/project_bin.tt', destination_root("bin/#{name}")
    File.chmod(0755, destination_root("bin/#{name}"))
    if options.gem?
      template 'templates/gem/gemspec.tt', destination_root(name + '.gemspec')
      template 'templates/gem/README.md.tt', destination_root('README.md')
      template 'templates/gem/lib/libname.tt', destination_root("lib/#{name}.rb")
      template 'templates/gem/lib/libname/version.tt', destination_root("lib/#{name}/version.rb")
    else
      empty_directory_with_keep_file destination_root('tmp')
      empty_directory_with_keep_file destination_root('log')
    end
  end
end
setup_test_files() click to toggle source

Generates test files for tiny app skeleton.

# File lib/tennpipes-init/generators/project.rb, line 97
def setup_test_files
  if options[:tiny] && @_components[:test] != :none
    test_component = @_components[:test]
    test_component = "rspec" if test_component == "cucumber"
    uppercase_test_component = test_component.upcase
    controller_template_name = "#{uppercase_test_component}_CONTROLLER_TEST"
    helper_template_name     = "#{uppercase_test_component}_HELPER_TEST"
    return unless defined?(controller_template_name)

    controller_content = instance_eval(controller_template_name).gsub(/!PATH!/, "Controller").gsub(/!NAME!/, "").gsub(/!EXPANDED_PATH!/, "/")
    helper_content     = instance_eval(helper_template_name).gsub(/!NAME!/, "#{@project_name}::#{@app_name}::#{DEFAULT_HELPER_NAME}")

    proc{|*args| args.map{|str| str.gsub!(/!PATH!/, recognize_path)} }.call(controller_content, helper_content)

    directory_name = [:rspec, :steak].include?(test_component.to_sym) ? "spec" : "test"
    base_path      = File.join(directory_name, "app")
    create_file destination_root("#{base_path}/controllers/controllers_#{directory_name}.rb"), controller_content, :skip => true
    create_file destination_root("#{base_path}/helpers/helpers_#{directory_name}.rb"),         helper_content,     :skip => true
    helper_path = destination_root(File.join(directory_name, "#{directory_name == "spec" ? "spec_helper" : "test_config"}.rb"))
    gsub_file helper_path, %r{helpers/\*\*/\*\.rb}, "helpers.rb"
  end
end