Class: Jeweler::Generator

Inherits:
Object
  • Object
show all
Defined in:
lib/jeweler/generator.rb,
lib/jeweler/generator/options.rb,
lib/jeweler/generator/rdoc_mixin.rb,
lib/jeweler/generator/riot_mixin.rb,
lib/jeweler/generator/yard_mixin.rb,
lib/jeweler/generator/application.rb,
lib/jeweler/generator/bacon_mixin.rb,
lib/jeweler/generator/rspec_mixin.rb,
lib/jeweler/generator/github_mixin.rb,
lib/jeweler/generator/shindo_mixin.rb,
lib/jeweler/generator/shoulda_mixin.rb,
lib/jeweler/generator/minitest_mixin.rb,
lib/jeweler/generator/testspec_mixin.rb,
lib/jeweler/generator/testunit_mixin.rb,
lib/jeweler/generator/micronaut_mixin.rb

Overview

Generator for creating a jeweler-enabled project

Defined Under Namespace

Modules: BaconMixin, GithubMixin, MicronautMixin, MinitestMixin, RdocMixin, RiotMixin, RspecMixin, ShindoMixin, ShouldaMixin, TestspecMixin, TestunitMixin, YardMixin Classes: Application, Options

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Generator

Returns a new instance of Generator.

Raises:



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# File 'lib/jeweler/generator.rb', line 60

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

Instance Attribute Details

#descriptionObject

Returns the value of attribute description.



50
51
52
# File 'lib/jeweler/generator.rb', line 50

def description
  @description
end

#development_dependenciesObject

Returns the value of attribute development_dependencies.



50
51
52
# File 'lib/jeweler/generator.rb', line 50

def development_dependencies
  @development_dependencies
end

#documentation_frameworkObject

Returns the value of attribute documentation_framework.



50
51
52
# File 'lib/jeweler/generator.rb', line 50

def documentation_framework
  @documentation_framework
end

#git_remoteObject

Returns the value of attribute git_remote.



50
51
52
# File 'lib/jeweler/generator.rb', line 50

def git_remote
  @git_remote
end

#github_usernameObject

Returns the value of attribute github_username.



50
51
52
# File 'lib/jeweler/generator.rb', line 50

def github_username
  @github_username
end

#homepageObject

Returns the value of attribute homepage.



50
51
52
# File 'lib/jeweler/generator.rb', line 50

def homepage
  @homepage
end

#optionsObject

Returns the value of attribute options.



50
51
52
# File 'lib/jeweler/generator.rb', line 50

def options
  @options
end

#project_nameObject

Returns the value of attribute project_name.



50
51
52
# File 'lib/jeweler/generator.rb', line 50

def project_name
  @project_name
end

#repoObject

Returns the value of attribute repo.



50
51
52
# File 'lib/jeweler/generator.rb', line 50

def repo
  @repo
end

#should_create_remote_repoObject

Returns the value of attribute should_create_remote_repo.



50
51
52
# File 'lib/jeweler/generator.rb', line 50

def should_create_remote_repo
  @should_create_remote_repo
end

#should_setup_rubyforgeObject

Returns the value of attribute should_setup_rubyforge.



50
51
52
# File 'lib/jeweler/generator.rb', line 50

def should_setup_rubyforge
  @should_setup_rubyforge
end

#should_use_bundlerObject

Returns the value of attribute should_use_bundler.



50
51
52
# File 'lib/jeweler/generator.rb', line 50

def should_use_bundler
  @should_use_bundler
end

#should_use_cucumberObject

Returns the value of attribute should_use_cucumber.



50
51
52
# File 'lib/jeweler/generator.rb', line 50

def should_use_cucumber
  @should_use_cucumber
end

#should_use_reekObject

Returns the value of attribute should_use_reek.



50
51
52
# File 'lib/jeweler/generator.rb', line 50

def should_use_reek
  @should_use_reek
end

#should_use_roodiObject

Returns the value of attribute should_use_roodi.



50
51
52
# File 'lib/jeweler/generator.rb', line 50

def should_use_roodi
  @should_use_roodi
end

#summaryObject

Returns the value of attribute summary.



50
51
52
# File 'lib/jeweler/generator.rb', line 50

def summary
  @summary
end

#target_dirObject

Returns the value of attribute target_dir.



50
51
52
# File 'lib/jeweler/generator.rb', line 50

def target_dir
  @target_dir
end

#testing_frameworkObject

Returns the value of attribute testing_framework.



50
51
52
# File 'lib/jeweler/generator.rb', line 50

def testing_framework
  @testing_framework
end

#user_emailObject

Returns the value of attribute user_email.



50
51
52
# File 'lib/jeweler/generator.rb', line 50

def user_email
  @user_email
end

#user_nameObject

Returns the value of attribute user_name.



50
51
52
# File 'lib/jeweler/generator.rb', line 50

def user_name
  @user_name
end

Instance Method Details

#constant_nameObject



137
138
139
# File 'lib/jeweler/generator.rb', line 137

def constant_name
  project_name.split(/[-_]/).collect(&:capitalize).join
end

#feature_filenameObject



157
158
159
# File 'lib/jeweler/generator.rb', line 157

def feature_filename
  "#{project_name}.feature"
end

#features_dirObject



165
166
167
# File 'lib/jeweler/generator.rb', line 165

def features_dir
  'features'
end

#features_steps_dirObject



173
174
175
# File 'lib/jeweler/generator.rb', line 173

def features_steps_dir
  File.join(features_dir, 'step_definitions')
end

#features_support_dirObject



169
170
171
# File 'lib/jeweler/generator.rb', line 169

def features_support_dir
  File.join(features_dir, 'support')
end

#file_name_prefixObject



149
150
151
# File 'lib/jeweler/generator.rb', line 149

def file_name_prefix
  project_name.tr('-', '_')
end

#lib_dirObject



153
154
155
# File 'lib/jeweler/generator.rb', line 153

def lib_dir
  'lib'
end

#lib_filenameObject



141
142
143
# File 'lib/jeweler/generator.rb', line 141

def lib_filename
  "#{project_name}.rb"
end

#require_nameObject



145
146
147
# File 'lib/jeweler/generator.rb', line 145

def require_name
  project_name
end

#runObject



127
128
129
130
131
132
133
134
135
# File 'lib/jeweler/generator.rb', line 127

def run
  create_files
  create_version_control
  $stdout.puts "Jeweler has prepared your gem in #{target_dir}"
  if should_create_remote_repo
    create_and_push_repo
    $stdout.puts "Jeweler has pushed your repo to #{git_remote}"
  end
end

#steps_filenameObject



161
162
163
# File 'lib/jeweler/generator.rb', line 161

def steps_filename
  "#{project_name}_steps.rb"
end