technicalpickles-jeweler 0.7.2 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,14 @@
1
+ # jeweler 0.8.0
2
+
3
+ * Generator:
4
+ * Supports these new testing frameworks:
5
+ * test/unit
6
+ * minitest
7
+ * rspec
8
+ * Added support for cucumber
9
+ * Creating a new gem is now more verbose, and will show files/directories created
10
+ * Binaries will now be automatically detected in 'bin'
11
+
1
12
  # jeweler 0.7.2
2
13
 
3
14
  * Added rake task 'version:bump' which is shorthand for 'version:bump:patch'
@@ -37,8 +37,11 @@ This will prepare a project in the 'the-perfect-gem' directory, setup to use Jew
37
37
  It supports a number of options:
38
38
 
39
39
  * --create-repo: in addition to preparing a project, it create an repo up on GitHub and enable RubyGem generation
40
- * --shoulda: generate test_helper.rb and empty test ready for shoulda (this is the default)
41
- * --bacon: generate spec_helper.rb and empty spec ready for bacon
40
+ * --testunit: generate test_helper.rb and test ready for test/unit
41
+ * --minitest: generate test_helper.rb and test ready for minitest
42
+ * --shoulda: generate test_helper.rb and test ready for shoulda (this is the default)
43
+ * --rspec: generate spec_helper.rb and spec ready for rspec
44
+ * --bacon: generate spec_helper.rb and spec ready for bacon
42
45
 
43
46
  ## Gemspec
44
47
 
data/Rakefile CHANGED
@@ -6,7 +6,6 @@ rescue LoadError
6
6
  require 'rake/rdoctask'
7
7
  end
8
8
 
9
- require 'rcov/rcovtask'
10
9
 
11
10
  $:.unshift('lib')
12
11
 
@@ -14,7 +13,6 @@ begin
14
13
  require 'jeweler'
15
14
  Jeweler::Tasks.new do |s|
16
15
  s.name = "jeweler"
17
- s.executables = "jeweler"
18
16
  s.summary = "Simple and opinionated helper for creating Rubygem projects on GitHub"
19
17
  s.email = "josh@technicalpickles.com"
20
18
  s.homepage = "http://github.com/technicalpickles/jeweler"
@@ -38,6 +36,19 @@ Rake::RDocTask.new do |rdoc|
38
36
  rdoc.rdoc_files.include('lib/**/*.rb')
39
37
  end
40
38
 
41
- Rcov::RcovTask.new
39
+ begin
40
+ require 'rcov/rcovtask'
41
+ Rcov::RcovTask.new
42
+ rescue LoadError
43
+ puts "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
44
+ end
45
+
46
+ begin
47
+ require 'cucumber/rake/task'
48
+ Cucumber::Rake::Task.new(:features)
49
+ rescue LoadError
50
+ puts "Cucumber is not available. In order to run features, you must: sudo gem install cucumber"
51
+ end
52
+
42
53
 
43
- task :default => :rcov
54
+ task :default => [:test, :features]
data/TODO CHANGED
@@ -5,9 +5,7 @@
5
5
  * use Net::HTTP.post_form instead of `` for enabling gem creation
6
6
  * Generators
7
7
  * Rails generator for making a plugin that's Jeweler enabled
8
- * Support rspec?
9
- * Support test/unit
10
8
  * Change generated test filename (test_foo not foo_test)
11
9
  * Releasing
12
10
  * Open hasmygembuiltyet.org
13
- * enable runcoderun by default
11
+ * Enable runcoderun by default
@@ -1,4 +1,4 @@
1
1
  ---
2
- :patch: 2
2
+ :patch: 0
3
3
  :major: 0
4
- :minor: 7
4
+ :minor: 8
@@ -11,17 +11,29 @@ class JewelerOpts < Hash
11
11
  def initialize(args)
12
12
  super()
13
13
 
14
- self[:test_style] = :shoulda
14
+ self[:testing_framework] = :shoulda
15
15
 
16
16
  @opts = OptionParser.new do |o|
17
17
  o.banner = "Usage: #{File.basename($0)} [options] reponame\ne.g. #{File.basename($0)} the-perfect-gem"
18
18
 
19
19
  o.on('--bacon', 'generate bacon specs') do
20
- self[:test_style] = :bacon
20
+ self[:testing_framework] = :bacon
21
21
  end
22
22
 
23
23
  o.on('--shoulda', 'generate shoulda tests') do
24
- self[:test_style] = :shoulda
24
+ self[:testing_framework] = :shoulda
25
+ end
26
+
27
+ o.on('--testunit', 'generate test/unit tests') do
28
+ self[:testing_framework] = :testunit
29
+ end
30
+
31
+ o.on('--miniunit', 'generate mini/unit tests') do
32
+ self[:testing_framework] = :miniunit
33
+ end
34
+
35
+ o.on('--rspec', 'generate rspec tests') do
36
+ self[:testing_framework] = :rspec
25
37
  end
26
38
 
27
39
  o.on('--create-repo', 'create the repository on GitHub') do
@@ -23,6 +23,12 @@ class Jeweler
23
23
  @gemspec.files = FileList["[A-Z]*.*", "{bin,generators,lib,test,spec}/**/*"]
24
24
  end
25
25
 
26
+ if @gemspec.executables.nil? || @gemspec.executables.empty?
27
+ @gemspec.executables = Dir["#{@base_dir}/bin/*"].map do |f|
28
+ File.basename(f)
29
+ end
30
+ end
31
+
26
32
  @gemspec.has_rdoc = true
27
33
  @gemspec.rdoc_options << '--inline-source' << '--charset=UTF-8'
28
34
  @gemspec.extra_rdoc_files ||= FileList["[A-Z]*.*"]
@@ -21,57 +21,142 @@ class Jeweler
21
21
  end
22
22
 
23
23
  class Generator
24
- attr_accessor :target_dir, :user_name, :user_email, :summary,
25
- :github_repo_name, :github_remote, :github_url,
26
- :github_username, :github_token,
27
- :lib_dir, :constant_name, :file_name_prefix, :config, :test_style,
24
+ attr_accessor :target_dir, :user_name, :user_email, :summary, :testing_framework,
25
+ :github_repo_name, :github_username, :github_token,
28
26
  :repo, :should_create_repo
29
27
 
30
28
  def initialize(github_repo_name, options = {})
31
- check_user_git_config()
32
-
33
29
  if github_repo_name.nil?
34
30
  raise NoGitHubRepoNameGiven
35
31
  end
36
- self.github_repo_name = github_repo_name
37
32
 
38
- self.github_remote = "git@github.com:#{github_username}/#{github_repo_name}.git"
39
- self.github_url = "http://github.com/#{github_username}/#{github_repo_name}"
33
+ use_user_git_config
34
+
35
+ self.github_repo_name = github_repo_name
36
+
37
+ self.testing_framework = options[:testing_framework] || :shoulda
38
+ self.target_dir = options[:directory] || self.github_repo_name
40
39
 
41
- self.test_style = options[:test_style] || :shoulda
42
- self.target_dir = options[:directory] || self.github_repo_name
43
- self.lib_dir = File.join(target_dir, 'lib')
44
- self.constant_name = self.github_repo_name.split(/[-_]/).collect{|each| each.capitalize }.join
45
- self.file_name_prefix = self.github_repo_name.gsub('-', '_')
46
40
  self.should_create_repo = options[:create_repo]
47
- self.summary = options[:summary] || 'TODO'
41
+ self.summary = options[:summary] || 'TODO'
48
42
  end
49
43
 
50
44
  def run
51
45
  create_files
52
46
  gitify
53
- puts "Jeweler has prepared your gem in #{github_repo_name}"
47
+ $stdout.puts "Jeweler has prepared your gem in #{github_repo_name}"
54
48
  if should_create_repo
55
49
  create_and_push_repo
56
- puts "Jeweler has pushed your repo to #{github_url}"
50
+ $stdout.puts "Jeweler has pushed your repo to #{github_url}"
57
51
  enable_gem_for_repo
58
- puts "Jeweler has enabled gem building for your repo"
52
+ $stdout.puts "Jeweler has enabled gem building for your repo"
59
53
  end
60
54
  end
61
55
 
62
- def testspec
63
- case test_style
64
- when :shoulda
65
- 'test'
66
- when :bacon
67
- 'spec'
56
+
57
+ def test_dir
58
+ test_or_spec
59
+ end
60
+
61
+ def feature_support_require
62
+ case testing_framework.to_sym
63
+ when :testunit, :shoulda, :bacon # NOTE bacon doesn't really work inside of cucumber
64
+ 'test/unit/assertions'
65
+ when :minitest
66
+ 'mini/test'
67
+ when :rspec
68
+ 'spec/expectations'
69
+ else
70
+ raise "Don't know what to require for #{testing_framework}"
68
71
  end
69
72
  end
70
73
 
74
+ def feature_support_extend
75
+ case testing_framework.to_sym
76
+ when :testunit, :shoulda, :bacon # NOTE bacon doesn't really work inside of cucumber
77
+ 'Test::Unit::Assertions'
78
+ when :minitest
79
+ 'Mini::Test::Assertions'
80
+ when :rspec
81
+ nil
82
+ else
83
+ raise "Don't know what to extend for #{testing_framework}"
84
+ end
85
+ end
86
+
87
+ def github_remote
88
+ "git@github.com:#{github_username}/#{github_repo_name}.git"
89
+ end
90
+
91
+ def github_url
92
+ "http://github.com/#{github_username}/#{github_repo_name}"
93
+ end
94
+
95
+
96
+ def constant_name
97
+ self.github_repo_name.split(/[-_]/).collect{|each| each.capitalize }.join
98
+ end
99
+
100
+ def file_name_prefix
101
+ self.github_repo_name.gsub('-', '_')
102
+ end
103
+
104
+ def lib_dir
105
+ 'lib'
106
+ end
107
+
71
108
  def test_dir
72
- File.join(target_dir, testspec)
109
+ test_or_spec
110
+ end
111
+
112
+ def test_filename
113
+ "#{file_name_prefix}_#{test_or_spec}.rb"
114
+ end
115
+
116
+ def test_helper_filename
117
+ "#{test_or_spec}_helper.rb"
118
+ end
119
+
120
+ def feature_filename
121
+ "#{file_name_prefix}.feature"
122
+ end
123
+
124
+ def steps_filename
125
+ "#{file_name_prefix}_steps.rb"
126
+ end
127
+
128
+ def features_dir
129
+ 'features'
130
+ end
131
+
132
+ def features_support_dir
133
+ File.join(features_dir, 'support')
134
+ end
135
+
136
+ def features_steps_dir
137
+ File.join(features_dir, 'steps')
73
138
  end
74
139
 
140
+ protected
141
+
142
+ # This is in a separate method so we can stub it out during testing
143
+ def read_git_config
144
+ # we could just use Git::Base's .config, but that relies on a repo being around already
145
+ # ... which we don't have yet, since this is part of a sanity check
146
+ lib = Git::Lib.new(nil, nil)
147
+ config = lib.parse_config '~/.gitconfig'
148
+ end
149
+
150
+ def test_or_spec
151
+ case testing_framework.to_sym
152
+ when :shoulda, :testunit, :minitest
153
+ 'test'
154
+ when :bacon, :rspec
155
+ 'spec'
156
+ else
157
+ raise "Unknown test style: #{testing_framework}"
158
+ end
159
+ end
75
160
 
76
161
  private
77
162
  def create_files
@@ -81,48 +166,84 @@ class Jeweler
81
166
  raise FileInTheWay, "The directory #{target_dir} already exists, aborting. Maybe move it out of the way before continuing?"
82
167
  end
83
168
 
84
- FileUtils.mkdir lib_dir
85
- FileUtils.mkdir test_dir
86
169
 
87
- output_template_in_target('.gitignore')
88
- output_template_in_target('Rakefile')
89
- output_template_in_target('LICENSE')
90
- output_template_in_target('README')
91
- output_template_in_target("#{test_style}/#{testspec}_helper.rb", "#{testspec}/#{testspec}_helper.rb")
92
- output_template_in_target("#{test_style}/flunking_#{testspec}.rb", "#{testspec}/#{file_name_prefix}_#{testspec}.rb")
170
+ output_template_in_target '.gitignore'
171
+ output_template_in_target 'Rakefile'
172
+ output_template_in_target 'LICENSE'
173
+ output_template_in_target 'README'
174
+
175
+ mkdir_in_target lib_dir
176
+ touch_in_target File.join(lib_dir, "#{file_name_prefix}.rb")
177
+
178
+ mkdir_in_target test_dir
179
+ output_template_in_target File.join(testing_framework.to_s, 'helper.rb'), File.join(test_dir, test_helper_filename)
180
+ output_template_in_target File.join(testing_framework.to_s, 'flunking.rb'), File.join(test_dir, test_filename)
181
+
182
+ mkdir_in_target features_dir
183
+ output_template_in_target File.join(%w(features default.feature)), File.join('features', feature_filename)
184
+
185
+ mkdir_in_target features_support_dir
186
+ output_template_in_target File.join(features_support_dir, 'env.rb')
187
+
188
+ mkdir_in_target features_steps_dir
189
+ output_template_in_target File.join(features_steps_dir, 'default_steps.rb'), File.join('features', 'steps', steps_filename)
93
190
 
94
- FileUtils.touch File.join(lib_dir, "#{file_name_prefix}.rb")
95
191
  end
96
192
 
97
- def check_user_git_config
98
- self.config = read_git_config
99
-
100
- unless config.has_key? 'user.name'
193
+ def use_user_git_config
194
+ git_config = self.read_git_config
195
+
196
+ unless git_config.has_key? 'user.name'
101
197
  raise NoGitUserName
102
198
  end
103
199
 
104
- unless config.has_key? 'user.email'
200
+ unless git_config.has_key? 'user.email'
105
201
  raise NoGitUserEmail
106
202
  end
107
203
 
108
- unless config.has_key? 'github.user'
204
+ unless git_config.has_key? 'github.user'
109
205
  raise NoGitHubUser
110
206
  end
111
207
 
112
- unless config.has_key? 'github.token'
208
+ unless git_config.has_key? 'github.token'
113
209
  raise NoGitHubToken
114
210
  end
115
211
 
116
- self.user_name = config['user.name']
117
- self.user_email = config['user.email']
118
- self.github_username = config['github.user']
119
- self.github_token = config['github.token']
212
+ self.user_name = git_config['user.name']
213
+ self.user_email = git_config['user.email']
214
+ self.github_username = git_config['github.user']
215
+ self.github_token = git_config['github.token']
120
216
  end
121
217
 
122
218
  def output_template_in_target(source, destination = source)
123
- template = ERB.new(File.read(File.join(File.dirname(__FILE__), 'templates', source)))
219
+ final_destination = File.join(target_dir, destination)
220
+
221
+ template_contents = File.read(File.join(template_dir, source))
222
+ template = ERB.new(template_contents, nil, '<>')
223
+
224
+ template_result = template.result(binding)
225
+
226
+ File.open(final_destination, 'w') {|file| file.write(template_result)}
124
227
 
125
- File.open(File.join(target_dir, destination), 'w') {|file| file.write(template.result(binding))}
228
+ $stdout.puts "\tcreate\t#{destination}"
229
+ end
230
+
231
+ def template_dir
232
+ File.join(File.dirname(__FILE__), 'templates')
233
+ end
234
+
235
+ def mkdir_in_target(directory)
236
+ final_destination = File.join(target_dir, directory)
237
+
238
+ FileUtils.mkdir final_destination
239
+
240
+ $stdout.puts "\tcreate\t#{directory}"
241
+ end
242
+
243
+ def touch_in_target(destination)
244
+ final_destination = File.join(target_dir, destination)
245
+ FileUtils.touch final_destination
246
+ $stdout.puts "\tcreate\t#{destination}"
126
247
  end
127
248
 
128
249
  def gitify
@@ -165,7 +286,7 @@ class Jeweler
165
286
  'token' => github_token,
166
287
  'repository[description]' => summary,
167
288
  'repository[name]' => github_repo_name
168
- sleep 2
289
+ # TODO do a HEAD request to see when it's ready
169
290
  @repo.push('origin')
170
291
  end
171
292
 
@@ -180,11 +301,5 @@ class Jeweler
180
301
  #'value' => '1'
181
302
  end
182
303
 
183
- def read_git_config
184
- # we could just use Git::Base's .config, but that relies on a repo being around already
185
- # ... which we don't have yet, since this is part of a sanity check
186
- lib = Git::Lib.new(nil, nil)
187
- config = lib.parse_config '~/.gitconfig'
188
- end
189
304
  end
190
305
  end
@@ -1,6 +1,4 @@
1
1
  require 'rake'
2
- require 'rake/testtask'
3
- require 'rake/rdoctask'
4
2
 
5
3
  begin
6
4
  require 'jeweler'
@@ -16,28 +14,58 @@ rescue LoadError
16
14
  puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
17
15
  end
18
16
 
19
- Rake::TestTask.new do |t|
20
- t.libs << 'lib'
21
- t.pattern = '<%= testspec %>/**/*_<%= testspec %>.rb'
22
- t.verbose = false
23
- end
24
-
17
+ require 'rake/rdoctask'
25
18
  Rake::RDocTask.new do |rdoc|
26
19
  rdoc.rdoc_dir = 'rdoc'
27
- rdoc.title = '<%= github_repo_name %>'
20
+ rdoc.title = '<%= github_repo_name %>'
28
21
  rdoc.options << '--line-numbers' << '--inline-source'
29
22
  rdoc.rdoc_files.include('README*')
30
23
  rdoc.rdoc_files.include('lib/**/*.rb')
31
24
  end
32
25
 
26
+ <% if testing_framework.to_sym == :rspec %>
27
+ require 'spec/rake/spectask'
28
+ Spec::Rake::SpecTask.new(:spec) do |t|
29
+ t.libs << 'lib' << 'spec'
30
+ t.spec_files = FileList['spec/**/*_spec.rb']
31
+ end
32
+ <% else %>
33
+ require 'rake/testtask'
34
+ Rake::TestTask.new(:<%= test_or_spec %>) do |t|
35
+ t.libs << 'lib' << '<%= test_or_spec %>'
36
+ t.pattern = '<%= test_or_spec %>/**/*_<%= test_or_spec %>.rb'
37
+ t.verbose = false
38
+ end
39
+ <% end %>
40
+
41
+ <% if testing_framework.to_sym == :rspec %>
42
+ Spec::Rake::SpecTask.new(:rcov) do |t|
43
+ t.libs << 'lib' << 'spec'
44
+ t.spec_files = FileList['spec/**/*_spec.rb']
45
+ t.rcov = true
46
+ end
47
+ <% else %>
33
48
  begin
34
49
  require 'rcov/rcovtask'
35
50
  Rcov::RcovTask.new do |t|
36
- t.libs << '<%= testspec %>'
37
- t.test_files = FileList['<%= testspec %>/**/*_<%= testspec %>.rb']
51
+ t.libs << '<%= test_or_spec %>'
52
+ t.test_files = FileList['<%= test_or_spec %>/**/*_<%= test_or_spec %>.rb']
38
53
  t.verbose = true
39
54
  end
40
55
  rescue LoadError
56
+ puts "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
57
+ end
58
+ <% end %>
59
+
60
+ begin
61
+ require 'cucumber/rake/task'
62
+ Cucumber::Rake::Task.new(:features)
63
+ rescue LoadError
64
+ puts "Cucumber is not available. In order to run features, you must: sudo gem install cucumber"
41
65
  end
42
66
 
67
+ <% if testing_framework.to_sym == :rspec %>
68
+ task :default => :spec
69
+ <% else %>
43
70
  task :default => :test
71
+ <% end %>
@@ -0,0 +1,9 @@
1
+ Feature: something something
2
+ In order to something something
3
+ A user something something
4
+ something something something
5
+
6
+ Scenario: something something
7
+ Given inspiration
8
+ When I create a sweet new gem
9
+ Then everyone should see how awesome I am
@@ -0,0 +1,13 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../../lib')
2
+ require '<%= file_name_prefix %>'
3
+
4
+ require '<%= feature_support_require %>'
5
+
6
+ require 'test/unit/assertions'
7
+
8
+ World do |world|
9
+ <% if feature_support_extend %>
10
+ world.extend(<%= feature_support_extend %>)
11
+ <% end %>
12
+ world
13
+ end
@@ -0,0 +1,7 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class <%= constant_name %>Test < Mini::Test::TestCase
4
+ def test_something_for_real
5
+ flunk "hey buddy, you should probably rename this file and start testing for real"
6
+ end
7
+ end
@@ -0,0 +1,10 @@
1
+ require 'rubygems'
2
+ require 'mini/test'
3
+
4
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
5
+ require '<%= file_name_prefix %>'
6
+
7
+ class Mini::Test::TestCase
8
+ end
9
+
10
+ Mini::Test.autorun
@@ -0,0 +1,7 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe "<%= constant_name %>" do
4
+ it "fails" do
5
+ fail "hey buddy, you should probably rename this file and start specing for real"
6
+ end
7
+ end
@@ -0,0 +1,9 @@
1
+ require 'spec'
2
+
3
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
4
+
5
+ require '<%= file_name_prefix %>'
6
+
7
+ Spec::Runner.configure do |config|
8
+
9
+ end
@@ -0,0 +1,7 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class <%= constant_name %>Test < Test::Unit::TestCase
4
+ def test_something_for_real
5
+ flunk "hey buddy, you should probably rename this file and start testing for real"
6
+ end
7
+ end
@@ -0,0 +1,9 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'mocha'
4
+
5
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
6
+ require '<%= file_name_prefix %>'
7
+
8
+ class Test::Unit::TestCase
9
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: technicalpickles-jeweler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.2
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Nichols
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-01-29 00:00:00 -08:00
12
+ date: 2009-02-03 00:00:00 -08:00
13
13
  default_executable: jeweler
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -44,14 +44,29 @@ files:
44
44
  - lib/jeweler/tasks.rb
45
45
  - lib/jeweler/templates
46
46
  - lib/jeweler/templates/bacon
47
- - lib/jeweler/templates/bacon/flunking_spec.rb
48
- - lib/jeweler/templates/bacon/spec_helper.rb
47
+ - lib/jeweler/templates/bacon/flunking.rb
48
+ - lib/jeweler/templates/bacon/helper.rb
49
+ - lib/jeweler/templates/features
50
+ - lib/jeweler/templates/features/default.feature
51
+ - lib/jeweler/templates/features/steps
52
+ - lib/jeweler/templates/features/steps/default_steps.rb
53
+ - lib/jeweler/templates/features/support
54
+ - lib/jeweler/templates/features/support/env.rb
49
55
  - lib/jeweler/templates/LICENSE
56
+ - lib/jeweler/templates/minitest
57
+ - lib/jeweler/templates/minitest/flunking.rb
58
+ - lib/jeweler/templates/minitest/helper.rb
50
59
  - lib/jeweler/templates/Rakefile
51
60
  - lib/jeweler/templates/README
61
+ - lib/jeweler/templates/rspec
62
+ - lib/jeweler/templates/rspec/flunking.rb
63
+ - lib/jeweler/templates/rspec/helper.rb
52
64
  - lib/jeweler/templates/shoulda
53
- - lib/jeweler/templates/shoulda/flunking_test.rb
54
- - lib/jeweler/templates/shoulda/test_helper.rb
65
+ - lib/jeweler/templates/shoulda/flunking.rb
66
+ - lib/jeweler/templates/shoulda/helper.rb
67
+ - lib/jeweler/templates/testunit
68
+ - lib/jeweler/templates/testunit/flunking.rb
69
+ - lib/jeweler/templates/testunit/helper.rb
55
70
  - lib/jeweler/version.rb
56
71
  - lib/jeweler.rb
57
72
  - test/fixtures
@@ -63,7 +78,6 @@ files:
63
78
  - test/shoulda_macros
64
79
  - test/shoulda_macros/jeweler_macros.rb
65
80
  - test/test_gemspec.rb
66
- - test/test_generator.rb
67
81
  - test/test_helper.rb
68
82
  - test/test_jeweler.rb
69
83
  - test/test_tasks.rb
@@ -1,269 +0,0 @@
1
- require File.dirname(__FILE__) + '/test_helper'
2
-
3
- class TestGenerator < Test::Unit::TestCase
4
- def self.should_create_directory(directory)
5
- should "create #{directory} directory" do
6
- assert File.exists?(File.join(@tmp_dir, directory))
7
- assert File.directory?(File.join(@tmp_dir, directory))
8
- end
9
- end
10
-
11
- def self.should_create_files(*files)
12
- should "create #{files.join ', '}" do
13
- files.each do |file|
14
- assert File.exists?(File.join(@tmp_dir, file))
15
- assert File.file?(File.join(@tmp_dir, file))
16
- end
17
- end
18
- end
19
-
20
- def self.should_be_checked_in(*files)
21
- should "have #{files.join ', '} checked in" do
22
- files.each do |file|
23
- status = @repo.status[file]
24
- assert_not_nil status, "wasn't able to get status for #{file}"
25
- assert ! status.untracked, "#{file} was untracked"
26
- assert_nil status.type, "#{file} had a type. it should have been nil"
27
- end
28
- end
29
- end
30
-
31
- def self.should_have_sane_license
32
- context "LICENSE" do
33
- setup do
34
- @content = File.read((File.join(@tmp_dir, 'LICENSE')))
35
- end
36
-
37
- should "include copyright for this year with user's name" do
38
- assert_match 'Copyright (c) 2008 foo', @content
39
- end
40
- end
41
- end
42
-
43
- def self.should_have_sane_gitignore
44
- context ".gitignore" do
45
- setup do
46
- @content = File.read((File.join(@tmp_dir, '.gitignore')))
47
- end
48
-
49
- should "include vim swap files" do
50
- assert_match '*.sw?', @content
51
- end
52
-
53
- should "include coverage" do
54
- assert_match 'coverage', @content
55
- end
56
-
57
- should "include .DS_Store" do
58
- assert_match '.DS_Store', @content
59
- end
60
- end
61
- end
62
-
63
- def self.should_have_sane_rakefile(options)
64
- context "Rakefile" do
65
- setup do
66
- @content = File.read((File.join(@tmp_dir, 'Rakefile')))
67
- end
68
-
69
- should "include repo's name as the gem's name" do
70
- assert_match 's.name = "the-perfect-gem"', @content
71
- end
72
-
73
- should "include the user's email as the gem's email" do
74
- assert_match 's.email = "bar@example.com"', @content
75
- end
76
-
77
- should "include the summary in the gem" do
78
- assert_match %Q{s.summary = %Q{zomg, so good}}, @content
79
- end
80
-
81
- should "include the github repo's url as the gem's url" do
82
- assert_match 's.homepage = "http://github.com/technicalpickles/the-perfect-gem"', @content
83
- end
84
-
85
- should "include #{options[:pattern]} in the TestTask" do
86
- assert_match "t.pattern = '#{options[:pattern]}'", @content
87
- end
88
-
89
- should "include #{options[:pattern]} in the RcovTask" do
90
- assert_match "t.test_files = FileList['#{options[:pattern]}']", @content
91
- end
92
-
93
- should "push #{options[:libs]} dir into RcovTask libs" do
94
- assert_match "t.libs << '#{options[:libs]}'", @content
95
- end
96
- end
97
- end
98
-
99
- def self.should_have_sane_origin_remote
100
- should "have git@github.com:technicalpickles/the-perfect-gem.git as origin remote" do
101
- assert_equal 1, @repo.remotes.size
102
- remote = @repo.remotes.first
103
- assert_equal 'origin', remote.name
104
- assert_equal 'git@github.com:technicalpickles/the-perfect-gem.git', remote.url
105
- end
106
- end
107
-
108
- context "with valid git user configuration" do
109
- setup do
110
- Jeweler::Generator.any_instance.stubs(:read_git_config).
111
- returns({'user.name' => 'foo', 'user.email' => 'bar@example.com', 'github.user' => 'technicalpickles', 'github.token' => 'zomgtoken'})
112
- end
113
-
114
- context "and cleaned out tmp directory" do
115
- setup do
116
- @tmp_dir = File.join(File.dirname(__FILE__), 'tmp')
117
- FileUtils.rm_rf(@tmp_dir)
118
-
119
- assert ! File.exists?(@tmp_dir)
120
- end
121
-
122
- teardown do
123
- FileUtils.rm_rf(@tmp_dir)
124
- end
125
-
126
- context "for generating technicalpickles's the-perfect-gem repo in 'tmp'" do
127
- setup do
128
- @generator = Jeweler::Generator.new('the-perfect-gem', :directory => @tmp_dir, :summary => 'zomg, so good')
129
- end
130
-
131
- should "use tmp for target directory" do
132
- assert_equal @tmp_dir, @generator.target_dir
133
- end
134
-
135
- context "running with default test style" do
136
- setup do
137
- @output = catch_out { @generator.run }
138
- end
139
-
140
- should 'create target directory' do
141
- assert File.exists?(@tmp_dir)
142
- end
143
-
144
- should_create_directory 'lib'
145
- should_create_directory 'test'
146
-
147
- should_create_files 'LICENSE', 'README', 'lib/the_perfect_gem.rb', 'test/test_helper.rb', 'test/the_perfect_gem_test.rb', '.gitignore'
148
-
149
- should_have_sane_rakefile :libs => 'test', :pattern => 'test/**/*_test.rb'
150
- should_have_sane_license
151
- should_have_sane_gitignore
152
-
153
-
154
- context "test/the_perfect_gem_test.rb" do
155
- setup do
156
- @content = File.read((File.join(@tmp_dir, 'test', 'the_perfect_gem_test.rb')))
157
- end
158
-
159
- should "have class of ThePerfectGemTest" do
160
- assert_match 'class ThePerfectGemTest < Test::Unit::TestCase', @content
161
- end
162
- end
163
-
164
-
165
- context "created git repo" do
166
- setup do
167
- @repo = Git.open(@tmp_dir)
168
- end
169
-
170
- should "have one commit log an initial commit message" do
171
- assert_equal 1, @repo.log.size
172
- # TODO message seems to include leading whitespace, could probably fix that in ruby-git
173
- assert_match 'Initial commit to the-perfect-gem.', @repo.log.first.message
174
- end
175
-
176
- should_be_checked_in 'README', 'Rakefile', 'LICENSE', 'lib/the_perfect_gem.rb', 'test/test_helper.rb', 'test/the_perfect_gem_test.rb', '.gitignore'
177
-
178
- should "have no untracked files" do
179
- assert_equal 0, @repo.status.untracked.size
180
- end
181
-
182
- should "have no changed files" do
183
- assert_equal 0, @repo.status.changed.size
184
- end
185
-
186
- should "have no added files" do
187
- assert_equal 0, @repo.status.added.size
188
- end
189
-
190
- should "have no deleted files" do
191
- assert_equal 0, @repo.status.deleted.size
192
- end
193
-
194
- should_have_sane_origin_remote
195
- end
196
- end
197
-
198
- context "running with bacon test style" do
199
- setup do
200
- @generator.test_style = :bacon
201
- @output = catch_out {
202
- @generator.run
203
- }
204
- end
205
-
206
- should 'create target directory' do
207
- assert File.exists?(@tmp_dir)
208
- end
209
-
210
- should_create_directory 'lib'
211
- should_create_directory 'spec'
212
-
213
- should_create_files 'LICENSE', 'README', 'lib/the_perfect_gem.rb', 'spec/spec_helper.rb', 'spec/the_perfect_gem_spec.rb', '.gitignore'
214
-
215
- should_have_sane_rakefile :libs => 'spec', :pattern => 'spec/**/*_spec.rb'
216
- should_have_sane_license
217
- should_have_sane_gitignore
218
-
219
-
220
- context "spec/the_perfect_gem_spec.rb" do
221
- setup do
222
- @content = File.read((File.join(@tmp_dir, 'spec', 'the_perfect_gem_spec.rb')))
223
- end
224
-
225
- should "describe ThePerfectGem" do
226
- assert_match 'describe "ThePerfectGem" do', @content
227
- end
228
- end
229
-
230
-
231
- context "created git repo" do
232
- setup do
233
- @repo = Git.open(@tmp_dir)
234
- end
235
-
236
- should 'have one commit log' do
237
- assert_equal 1, @repo.log.size
238
- end
239
-
240
- should "have one commit log an initial commit message" do
241
- # TODO message seems to include leading whitespace, could probably fix that in ruby-git
242
- assert_match 'Initial commit to the-perfect-gem.', @repo.log.first.message
243
- end
244
-
245
- should_be_checked_in 'README', 'Rakefile', 'LICENSE', 'lib/the_perfect_gem.rb', 'spec/spec_helper.rb', 'spec/the_perfect_gem_spec.rb', '.gitignore'
246
-
247
- should "have no untracked files" do
248
- assert_equal 0, @repo.status.untracked.size
249
- end
250
-
251
- should "have no changed files" do
252
- assert_equal 0, @repo.status.changed.size
253
- end
254
-
255
- should "have no added files" do
256
- assert_equal 0, @repo.status.added.size
257
- end
258
-
259
- should "have no deleted files" do
260
- assert_equal 0, @repo.status.deleted.size
261
- end
262
-
263
- should_have_sane_origin_remote
264
- end
265
- end
266
- end
267
- end
268
- end
269
- end