class Jeweler::Generator

def initialize(options = {})

def initialize(options = {})
  self.options = options
  extracted_directory = nil
  self.project_name   = options[:project_name]
  if project_name.nil? || project_name.squeeze.strip == ''
    raise NoGitHubRepoNameGiven
  else
    path = File.split(project_name)
    if path.size > 1
      extracted_directory = File.join(path[0..-1])
      self.project_name = path.last
    end
  end
  self.development_dependencies = []
  self.testing_framework = options[:testing_framework]
  self.documentation_framework = options[:documentation_framework]
  begin
    generator_mixin_name = "#{testing_framework.to_s.capitalize}Mixin"
    generator_mixin = self.class.const_get(generator_mixin_name)
    extend generator_mixin
  rescue NameError => e
    raise ArgumentError, "Unsupported testing framework (#{testing_framework})"
  end
  begin
    generator_mixin_name = "#{documentation_framework.to_s.capitalize}Mixin"
    generator_mixin = self.class.const_get(generator_mixin_name)
    extend generator_mixin
  rescue NameError => e
    raise ArgumentError, "Unsupported documentation framework (#{documentation_framework})"
  end
  self.target_dir             = options[:directory] || extracted_directory || project_name
  self.summary                = options[:summary] || 'TODO: one-line summary of your gem'
  self.description            = options[:description] || 'TODO: longer description of your gem'
  self.should_use_cucumber    = options[:use_cucumber]
  self.should_use_reek        = options[:use_reek]
  self.should_use_roodi       = options[:use_roodi]
  self.should_setup_rubyforge = options[:rubyforge]
  self.should_use_bundler     = options[:use_bundler]
  development_dependencies << ['cucumber', '>= 0'] if should_use_cucumber
  # TODO: make bundler optional?
  development_dependencies << ['bundler', '~> 1.0']
  development_dependencies << ['jeweler', "~> #{Jeweler::Version::STRING}"]
  development_dependencies << ['simplecov', '>= 0']
  development_dependencies << ['reek', '~> 1.2.8'] if should_use_reek
  development_dependencies << ['roodi', '~> 2.1.0'] if should_use_roodi
  self.user_name       = options[:user_name]
  self.user_email      = options[:user_email]
  self.homepage        = options[:homepage]
  self.git_remote      = options[:git_remote]
  raise NoGitUserName unless user_name
  raise NoGitUserEmail unless user_email
  extend GithubMixin
end