Class: Juwelier::Generator

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

Overview

Generator for creating a juwelier-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
126
127
128
129
130
# File 'lib/juwelier/generator.rb', line 60

def initialize(options = {})
  self.options = options
  extracted_directory = nil

  self.project_name   = options[:project_name]
  if self.project_name.nil? || self.project_name.squeeze.strip == ""
    raise NoGitHubRepoNameGiven
  else
    path = File.split(self.project_name)

    if path.size > 1
      extracted_directory = File.join(path[0..-1])
      self.project_name = path.last
    end
  end

  self.development_dependencies = []
  self.production_dependencies = []
  self.testing_framework  = options[:testing_framework]
  self.documentation_framework = options[:documentation_framework]
  begin
    generator_mixin_name = "#{self.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 = "#{self.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 || self.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]
  self.should_use_semver      = options[:use_semver]
  self.require_ruby_version   = options[:use_required_version]
  self.should_create_bin      = options[:create_bin]

  development_dependencies << ["cucumber", ">= 0"] if should_use_cucumber

  development_dependencies << ["bundler", "~> 1.0"]
  development_dependencies << ["juwelier", "~> #{Juwelier::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
  
  production_dependencies << ["semver", "~> 1.0.1"] if should_use_semver

  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 self.user_name
  raise NoGitUserEmail unless self.user_email

  extend GithubMixin
end

Instance Attribute Details

#descriptionObject

Returns the value of attribute description.



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

def description
  @description
end

#development_dependenciesObject

Returns the value of attribute development_dependencies.



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

def development_dependencies
  @development_dependencies
end

#documentation_frameworkObject

Returns the value of attribute documentation_framework.



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

def documentation_framework
  @documentation_framework
end

#git_remoteObject

Returns the value of attribute git_remote.



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

def git_remote
  @git_remote
end

#github_usernameObject

Returns the value of attribute github_username.



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

def github_username
  @github_username
end

#homepageObject

Returns the value of attribute homepage.



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

def homepage
  @homepage
end

#optionsObject

Returns the value of attribute options.



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

def options
  @options
end

#production_dependenciesObject

Returns the value of attribute production_dependencies.



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

def production_dependencies
  @production_dependencies
end

#project_nameObject

Returns the value of attribute project_name.



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

def project_name
  @project_name
end

#repoObject

Returns the value of attribute repo.



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

def repo
  @repo
end

#require_ruby_versionObject

Returns the value of attribute require_ruby_version.



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

def require_ruby_version
  @require_ruby_version
end

#should_create_binObject

Returns the value of attribute should_create_bin.



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

def should_create_bin
  @should_create_bin
end

#should_create_remote_repoObject

Returns the value of attribute should_create_remote_repo.



50
51
52
# File 'lib/juwelier/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/juwelier/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/juwelier/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/juwelier/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/juwelier/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/juwelier/generator.rb', line 50

def should_use_roodi
  @should_use_roodi
end

#should_use_semverObject

Returns the value of attribute should_use_semver.



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

def should_use_semver
  @should_use_semver
end

#summaryObject

Returns the value of attribute summary.



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

def summary
  @summary
end

#target_dirObject

Returns the value of attribute target_dir.



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

def target_dir
  @target_dir
end

#testing_frameworkObject

Returns the value of attribute testing_framework.



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

def testing_framework
  @testing_framework
end

#user_emailObject

Returns the value of attribute user_email.



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

def user_email
  @user_email
end

#user_nameObject

Returns the value of attribute user_name.



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

def user_name
  @user_name
end

Instance Method Details

#bin_dirObject



166
167
168
# File 'lib/juwelier/generator.rb', line 166

def bin_dir
  'bin'
end

#bin_filenameObject



150
151
152
# File 'lib/juwelier/generator.rb', line 150

def bin_filename
  "#{should_create_bin}"
end

#constant_nameObject



142
143
144
# File 'lib/juwelier/generator.rb', line 142

def constant_name
  self.project_name.split(/[-_]/).collect{|each| each.capitalize }.join
end

#feature_filenameObject



170
171
172
# File 'lib/juwelier/generator.rb', line 170

def feature_filename
  "#{project_name}.feature"
end

#features_dirObject



178
179
180
# File 'lib/juwelier/generator.rb', line 178

def features_dir
  'features'
end

#features_steps_dirObject



186
187
188
# File 'lib/juwelier/generator.rb', line 186

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

#features_support_dirObject



182
183
184
# File 'lib/juwelier/generator.rb', line 182

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

#file_name_prefixObject



158
159
160
# File 'lib/juwelier/generator.rb', line 158

def file_name_prefix
  self.project_name.gsub('-', '_')
end

#lib_dirObject



162
163
164
# File 'lib/juwelier/generator.rb', line 162

def lib_dir
  'lib'
end

#lib_filenameObject



146
147
148
# File 'lib/juwelier/generator.rb', line 146

def lib_filename
  "#{project_name}.rb"
end

#require_nameObject



154
155
156
# File 'lib/juwelier/generator.rb', line 154

def require_name
  self.project_name
end

#runObject



132
133
134
135
136
137
138
139
140
# File 'lib/juwelier/generator.rb', line 132

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

#steps_filenameObject



174
175
176
# File 'lib/juwelier/generator.rb', line 174

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