bueller 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.markdown CHANGED
@@ -1,12 +1,13 @@
1
- # Bueller: Craft the absolute perfect RubyGem
1
+ # Bueller: A Tool for Crafting Gems Along With Bundler
2
2
 
3
3
  Bueller provides two things:
4
4
 
5
- * Rake tasks for managing gems and versioning of a <a href="http://github.com">GitHub</a> project
6
5
  * A generator for creating/kickstarting a new project
6
+ * Rake tasks for managing gems and versioning of a <a href="http://github.com">GitHub</a> project
7
7
 
8
8
  ## Quick Links
9
9
 
10
+ * [Web](http://dkastner.github.com/bueller)
10
11
  * [Wiki](http://wiki.github.com/dkastner/bueller)
11
12
  * [Bugs](http://github.com/dkastner/bueller/issues)
12
13
 
@@ -37,10 +38,10 @@ This will prepare a project in the 'the-perfect-gem' directory, setup to use Bue
37
38
  It supports a number of options. Here's a taste, but `bueller --help` will give you the most up-to-date listing:
38
39
 
39
40
  * --create-repo: in addition to preparing a project, it create an repo up on GitHub and enable RubyGem generation
41
+ * --rspec: generate spec_helper.rb and spec ready for rspec (this is the default TDD framework)
40
42
  * --testunit: generate test_helper.rb and test ready for test/unit
41
43
  * --minitest: generate test_helper.rb and test ready for minitest
42
44
  * --shoulda: generate test_helper.rb and test ready for shoulda
43
- * --rspec: generate spec_helper.rb and spec ready for rspec (this is the default)
44
45
  * --bacon: generate spec_helper.rb and spec ready for bacon
45
46
  * --gemcutter: setup releasing to gemcutter
46
47
  * --rubyforge: setup releasing to rubyforge
@@ -87,13 +88,6 @@ Initially, your project starts out at 0.0.0. Bueller provides Rake tasks for bum
87
88
  rake version:bump:minor
88
89
  rake version:bump:patch
89
90
 
90
- You can also programmatically set the version if you wish. Typically, you use this to have a module with the version info so clients can access it. The only downside here is you no longer can use the version:bump tasks.
91
-
92
- Gem::Specification.new do |s|
93
- s.version = MyProject::VERSION
94
- # more stuff
95
- end
96
-
97
91
  ### Prerelease versioning
98
92
 
99
93
  Major, minor, and patch versions have a distant cousin: build. You can use this to add an arbitrary (or you know, regular type) version. This is particularly useful for prereleases.
@@ -117,63 +111,15 @@ It does the following for you:
117
111
 
118
112
  As is though, it doesn't actually get your gem anywhere. To do that, you'll need to use rubyforge or gemcutter.
119
113
 
120
- ### Releasing to Gemcutter
121
-
122
- Bueller can also handle releasing to [Gemcutter](http://gemcutter.org). There are a few steps you need to do before doing any Gemcutter releases with Bueller:
123
-
124
- * [Create an account on Gemcutter](http://gemcutter.org/sign_up)
125
- * Install the Gemcutter gem: gem install gemcutter
126
- * Run 'gem tumble' to set up RubyGems to use gemcutter as the default source if you haven't already
127
- * Update your Rakefile to make an instance of `Bueller::GemcutterTasks`
128
-
129
-
130
- A Rakefile setup for gemcutter would include something like this:
131
-
132
- begin
133
- require 'bueller'
134
- Bueller::Tasks.new
135
- Bueller::GemcutterTasks.new
136
- rescue LoadError
137
- puts "Bueller (or a dependency) not available. Install it with: gem install bueller"
138
- end
114
+ ### Releasing to Rubygems
139
115
 
116
+ Bueller can also handle releasing to [Rubygems](http://rubygems.org). You must [create an account](http://rubygems.org/sign_up) on Rubygems before doing any Rubygems releases with Bueller.
140
117
 
141
118
  After you have configured this, `rake release` will now also release to Gemcutter.
142
119
 
143
120
  If you need to release it without the rest of the release task, you can run:
144
121
 
145
- $ rake gemcutter:release
146
-
147
- ### Releasing to RubyForge
148
-
149
- Bueller can also handle releasing to [RubyForge](http://rubyforge.org). There are a few steps you need to do before doing any RubyForge releases with Bueller:
150
-
151
- * [Create an account on RubyForge](http://rubyforge.org/account/register.php)
152
- * Request a project on RubyForge.
153
- * Install the RubyForge gem: gem install rubyforge
154
- * Run 'rubyforge setup' and fill in your username and password for RubyForge
155
- * Run 'rubyforge config' to pull down information about your projects
156
- * Run 'rubyforge login' to make sure you are able to login
157
- * In Bueller::Tasks, you must set `rubyforge_project` to the project you just created
158
- * Add Bueller::RubyforgeTasks to bring in the appropriate tasks.
159
- * Note, using `bueller --rubyforge` when generating the project does this for you automatically.
160
-
161
- A gemspec setup for rubyforge would include something like this:
162
-
163
- Gem::Specification.new do |s|
164
- # ommitted for brevity
165
- gemspec.rubyforge_project = 'the-perfect-gem' # This line would be new
166
- end
167
-
168
- Now you must initially create a 'package' for your gem in your RubyForge 'project':
169
-
170
- $ rake rubyforge:setup
171
-
172
- After you have configured this, `rake release` will now also release to RubyForge.
173
-
174
- If you need to release it without the rest of the release task, you can run:
175
-
176
- $ rake rubyforge:release
122
+ $ rake rubygems:release
177
123
 
178
124
  ## Development and Release Workflow
179
125
 
@@ -1,10 +1,5 @@
1
1
  class Bueller
2
2
  module Commands
3
- autoload :BuildGem, 'bueller/commands/build_gem'
4
- autoload :InstallGem, 'bueller/commands/install_gem'
5
- autoload :GitTagRelease, 'bueller/commands/git_tag_release'
6
- autoload :ReleaseToGithub, 'bueller/commands/release_to_github'
7
- autoload :ReleaseToRubygems, 'bueller/commands/release_to_rubygems'
8
3
  autoload :WriteGemspec, 'bueller/commands/write_gemspec'
9
4
 
10
5
  module Version
data/lib/bueller/tasks.rb CHANGED
@@ -32,22 +32,14 @@ class Bueller
32
32
  private
33
33
 
34
34
  def define
35
+ gem_helper = Bundler::GemHelper.install_tasks
36
+
35
37
  task :gemspec_required do
36
38
  unless File.exist?(bueller.gemspec_helper.path)
37
39
  abort "Expected #{bueller.gemspec_helper.path} to exist. See 'rake gemspec:write' to create it"
38
40
  end
39
41
  end
40
42
 
41
- desc "Build gem"
42
- task :build do
43
- bueller.build_gem
44
- end
45
-
46
- desc "Install gem"
47
- task :install => [:build] do
48
- bueller.install_gem
49
- end
50
-
51
43
  namespace :gemspec do
52
44
  desc 'Validates the gemspec'
53
45
  task :validate => :gemspec_required do
@@ -95,27 +87,12 @@ class Bueller
95
87
  end
96
88
  end
97
89
 
98
- desc "Release gem"
99
- task :release do
100
- end
101
-
102
- namespace :git do
103
- desc "Tag a release and push to origin"
104
- task :release do
105
- bueller.git_tag_release
106
- end
107
- end
108
-
109
- task :release => 'git:release'
110
-
111
90
  namespace :rubygems do
112
91
  desc "Release gem to Rubygems"
113
92
  task :release => :build do
114
- bueller.release_gem_to_rubygems
93
+ gem_helper.rubygem_push bueller.gemspec_helper.gem_path
115
94
  end
116
95
  end
117
-
118
- task :release => 'rubygems:release'
119
96
  end
120
97
  end
121
98
  end
data/lib/bueller.rb CHANGED
@@ -3,10 +3,7 @@ require 'git'
3
3
 
4
4
  # Bueller helps you craft the perfect Rubygem. Give him a gemspec, and he takes care of the rest.
5
5
  #
6
- # See Bueller::Tasks for examples of how to get started. Additionally, resources are available on the wiki:
7
- #
8
- # * http://wiki.github.com/technicalpickles/bueller/create-a-new-project
9
- # * http://wiki.github.com/technicalpickles/bueller/configure-an-existing-project
6
+ # See Bueller::Tasks for examples of how to get started.
10
7
  class Bueller
11
8
  require 'bueller/errors'
12
9
  require 'rubygems/user_interaction'
@@ -75,16 +72,6 @@ class Bueller
75
72
  Bueller::Commands::WriteGemspec.run_for self
76
73
  end
77
74
 
78
- # Build a gem using the project's latest Gem::Specification
79
- def build_gem
80
- Bueller::Commands::BuildGem.run_for self
81
- end
82
-
83
- # Install a previously built gem
84
- def install_gem
85
- Bueller::Commands::InstallGem.run_for self
86
- end
87
-
88
75
  # Bumps the patch version.
89
76
  #
90
77
  # 1.5.1 -> 1.5.2
@@ -111,14 +98,6 @@ class Bueller
111
98
  Bueller::Commands::Version::Write.run_for self, major, minor, patch, build
112
99
  end
113
100
 
114
- def git_tag_release
115
- Bueller::Commands::GitTagRelease.run_for self
116
- end
117
-
118
- def release_gem_to_rubygems
119
- Bueller::Commands::ReleaseToRubygems.run_for self
120
- end
121
-
122
101
  def git_base_dir(base_dir = nil)
123
102
  if base_dir
124
103
  base_dir = File.dirname(base_dir)
data/spec/bueller_spec.rb CHANGED
@@ -36,22 +36,6 @@ describe Bueller do
36
36
  end
37
37
  end
38
38
 
39
- describe '#build_gem' do
40
- it 'should build and run build gem command when building gem' do
41
- Bueller::Commands::BuildGem.should_receive(:run_for).with(bueller)
42
-
43
- bueller.build_gem
44
- end
45
- end
46
-
47
- describe '#install_gem' do
48
- it 'should build and run build gem command when installing gem' do
49
- Bueller::Commands::InstallGem.should_receive(:run_for).with(bueller)
50
-
51
- bueller.install_gem
52
- end
53
- end
54
-
55
39
  describe '#bump_major_version' do
56
40
  it 'should build and run bump major version command when bumping major version' do
57
41
  Bueller::Commands::Version::BumpMajor.should_receive(:run_for).with(bueller)
@@ -75,12 +59,4 @@ describe Bueller do
75
59
  bueller.write_version(1, 5, 2, 'a1')
76
60
  end
77
61
  end
78
-
79
- describe '#git_tag_release' do
80
- it 'should build and tag the release' do
81
- Bueller::Commands::GitTagRelease.should_receive(:run_for).with(bueller)
82
-
83
- bueller.git_tag_release
84
- end
85
- end
86
62
  end
@@ -1,5 +1,5 @@
1
1
  Gem::Specification.new do |s|
2
- s.name = %q{bueller}
2
+ s.name = %q{bar}
3
3
  s.version = "0.0.1"
4
4
  s.date = '2010-02-15'
5
5
  s.authors = ['Josh Nichols', 'Derek Kastner']
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 3
9
- version: 0.0.3
8
+ - 4
9
+ version: 0.0.4
10
10
  platform: ruby
11
11
  authors:
12
12
  - Derek Kastner
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-01-21 00:00:00 -05:00
17
+ date: 2011-01-27 00:00:00 -05:00
18
18
  default_executable: bueller
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -27,8 +27,8 @@ dependencies:
27
27
  segments:
28
28
  - 1
29
29
  - 0
30
- - 0
31
- version: 1.0.0
30
+ - 9
31
+ version: 1.0.9
32
32
  type: :runtime
33
33
  prerelease: false
34
34
  version_requirements: *id001
@@ -197,10 +197,6 @@ files:
197
197
  - lib/bueller/tasks.rb
198
198
  - lib/bueller/rubyforge_tasks.rb
199
199
  - lib/bueller/generator.rb
200
- - lib/bueller/commands/build_gem.rb
201
- - lib/bueller/commands/release_to_rubygems.rb
202
- - lib/bueller/commands/install_gem.rb
203
- - lib/bueller/commands/git_tag_release.rb
204
200
  - lib/bueller/commands/write_gemspec.rb
205
201
  - lib/bueller/commands/version/bump_patch.rb
206
202
  - lib/bueller/commands/version/bump_major.rb
@@ -283,11 +279,7 @@ files:
283
279
  - spec/fixtures/bar/lib/foo_the_ultimate_lib.rb
284
280
  - spec/fixtures/bar/bar.gemspec
285
281
  - spec/bueller/gemspec_helper_spec.rb
286
- - spec/bueller/commands/git_tag_release_spec.rb
287
- - spec/bueller/commands/release_to_rubygems_spec.rb
288
- - spec/bueller/commands/build_gem_spec.rb
289
282
  - spec/bueller/commands/write_gemspec_spec.rb
290
- - spec/bueller/commands/install_gem_spec.rb
291
283
  - spec/bueller/commands/version/bump_patch_spec.rb
292
284
  - spec/bueller/commands/version/bump_minor_spec.rb
293
285
  - spec/bueller/commands/version/bump_major_spec.rb
@@ -312,7 +304,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
312
304
  requirements:
313
305
  - - ">="
314
306
  - !ruby/object:Gem::Version
315
- hash: -1018017907
307
+ hash: 879101009
316
308
  segments:
317
309
  - 0
318
310
  version: "0"
@@ -359,11 +351,7 @@ test_files:
359
351
  - spec/fixtures/bar/lib/foo_the_ultimate_lib.rb
360
352
  - spec/fixtures/bar/bar.gemspec
361
353
  - spec/bueller/gemspec_helper_spec.rb
362
- - spec/bueller/commands/git_tag_release_spec.rb
363
- - spec/bueller/commands/release_to_rubygems_spec.rb
364
- - spec/bueller/commands/build_gem_spec.rb
365
354
  - spec/bueller/commands/write_gemspec_spec.rb
366
- - spec/bueller/commands/install_gem_spec.rb
367
355
  - spec/bueller/commands/version/bump_patch_spec.rb
368
356
  - spec/bueller/commands/version/bump_minor_spec.rb
369
357
  - spec/bueller/commands/version/bump_major_spec.rb
@@ -1,50 +0,0 @@
1
- class Bueller
2
- module Commands
3
- class BuildGem
4
- def self.run_for(bueller)
5
- command = new bueller
6
- command.run
7
- command
8
- end
9
-
10
- attr_reader :bueller
11
-
12
- def initialize(bueller)
13
- @bueller = bueller
14
- end
15
-
16
- def base_dir
17
- bueller.base_dir
18
- end
19
- def gemspec_helper
20
- bueller.gemspec_helper
21
- end
22
- def version_helper
23
- bueller.version_helper
24
- end
25
-
26
- def run
27
- make_package_directory
28
- move_gem_file
29
- end
30
-
31
- def pkg_dir
32
- @pkg_dir ||= File.join(base_dir, 'pkg')
33
- end
34
-
35
- def make_package_directory
36
- FileUtils.mkdir_p pkg_dir
37
- end
38
-
39
- def build_gem
40
- Gem::Builder.new(gemspec_helper.spec).build
41
- end
42
-
43
- def move_gem_file
44
- gem_file_name = build_gem
45
- gem_file_path = File.join(base_dir, gem_file_name)
46
- FileUtils.mv gem_file_path, pkg_dir
47
- end
48
- end
49
- end
50
- end
@@ -1,69 +0,0 @@
1
- class Bueller
2
- module Commands
3
- class GitTagRelease
4
- def self.run_for(bueller)
5
- command = new bueller
6
- command.run
7
- command
8
- end
9
-
10
- attr_accessor :repo, :output
11
- attr_reader :bueller
12
-
13
- def initialize(bueller, attributes = {})
14
- self.output = $stdout
15
- @bueller = bueller
16
-
17
- attributes.each_pair do |key, value|
18
- send("#{key}=", value)
19
- end
20
- end
21
-
22
- def base_dir; bueller.base_dir; end
23
- def version; bueller.version; end
24
- def repo; bueller.repo; end
25
-
26
- def run
27
- run = true
28
- unless clean_staging_area?
29
- output.puts "There are some modified files that haven't been committed. Proceed anyway?"
30
- run = $stdin.gets =~ /(y|yes)/i ? true : false
31
- end
32
-
33
- if run
34
- repo.checkout('master')
35
-
36
- unless release_tagged?
37
- output.puts "Tagging #{release_tag}"
38
- repo.add_tag release_tag
39
- end
40
- output.puts "Pushing #{release_tag} to origin"
41
- repo.push 'origin', release_tag
42
- else
43
- raise "Release cancelled"
44
- end
45
- end
46
-
47
- def clean_staging_area?
48
- status.added.empty? && status.deleted.empty? && status.changed.empty?
49
- end
50
-
51
- def status
52
- repo.status
53
- end
54
-
55
- def release_tag
56
- "v#{version}"
57
- end
58
-
59
- def release_tagged?
60
- begin
61
- repo.tag(release_tag)
62
- true
63
- rescue
64
- false
65
- end
66
- end
67
- end
68
- end
69
- end
@@ -1,36 +0,0 @@
1
- class Bueller
2
- module Commands
3
- class InstallGem
4
- def self.run_for(bueller)
5
- command = new bueller
6
- command.run
7
- command
8
- end
9
-
10
- attr_reader :bueller
11
-
12
- def initialize(bueller)
13
- @bueller = bueller
14
- bueller.output = $stdout
15
- end
16
-
17
- def output
18
- bueller.output
19
- end
20
- def gemspec_helper
21
- bueller.gemspec_helper
22
- end
23
-
24
- def run
25
- command = "#{gem_command} install #{gemspec_helper.gem_path}"
26
- output.puts "Executing #{command.inspect}:"
27
-
28
- sh command
29
- end
30
-
31
- def gem_command
32
- "bundle exec gem"
33
- end
34
- end
35
- end
36
- end
@@ -1,26 +0,0 @@
1
- class Bueller
2
- module Commands
3
- class ReleaseToRubygems
4
- attr_reader :bueller
5
-
6
- def initialize(bueller)
7
- @bueller = bueller
8
- end
9
-
10
- def gemspec_helper; bueller.gemspec_helper; end
11
- def version; bueller.version; end
12
-
13
- def run
14
- command = "gem push #{gemspec_helper.gem_path}"
15
- $stdout.puts "Executing #{command.inspect}:"
16
- sh command
17
- end
18
-
19
- def self.run_for(bueller)
20
- command = new bueller
21
- command.run
22
- command
23
- end
24
- end
25
- end
26
- end
@@ -1,38 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Bueller::Commands::BuildGem do
4
- let(:bueller) { Bueller.new }
5
- let(:command) { Bueller::Commands::BuildGem.new bueller }
6
-
7
- describe '#run' do
8
- it 'should make the gem' do
9
- command.should_receive :make_package_directory
10
- command.run
11
- end
12
-
13
- it 'should move the gem into the package directory' do
14
- command.should_receive :move_gem_file
15
- command.run
16
- end
17
- end
18
-
19
- describe '#base_dir' do
20
- it "should delegate to bueller" do
21
- command.base_dir.should == '.'
22
- end
23
- end
24
-
25
- describe '#gemspec_helper' do
26
- it "should delegate to bueller" do
27
- command.gemspec_helper.should == bueller.gemspec_helper
28
- end
29
- end
30
-
31
- describe '#make_package_directory' do
32
- it 'should make a package directory' do
33
- command = Bueller::Commands::BuildGem.new bueller
34
- FileUtils.should_receive(:mkdir_p).with './pkg'
35
- command.make_package_directory
36
- end
37
- end
38
- end
@@ -1,87 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Bueller::Commands::GitTagRelease do
4
- let(:bueller) { Bueller.new }
5
- let(:command) { Bueller::Commands::GitTagRelease.new bueller, :output => StringIO.new }
6
-
7
- before :each do
8
- status = mock(Object)
9
- bueller.repo = mock(Git, :status => status)
10
-
11
- command.repo.status.stub!(:added).and_return []
12
- command.repo.status.stub!(:changed).and_return []
13
- command.repo.status.stub!(:deleted).and_return []
14
- end
15
-
16
- describe '#run' do
17
- before :each do
18
- command.repo.stub! :checkout
19
- command.repo.stub! :push
20
- command.repo.stub! :add_tag
21
- command.stub!(:clean_staging_area?).and_return true
22
- command.stub!(:release_tagged?).and_return true
23
- end
24
-
25
- it 'should not run if the staging area is unclean and user does not confirm' do
26
- command.stub!(:clean_staging_area?).and_return false
27
- $stdin.stub!(:gets).and_return 'no'
28
- expect { command.run }.should raise_error
29
- end
30
- it 'should run if the staging area is unclean and user confirms' do
31
- command.stub!(:clean_staging_area?).and_return false
32
- $stdin.stub!(:gets).and_return 'yes'
33
- command.repo.should_receive :checkout
34
- command.run
35
- end
36
- it 'should check out master' do
37
- command.repo.should_receive(:checkout).with 'master'
38
- command.run
39
- end
40
- it 'should push' do
41
- command.repo.should_receive :push
42
- command.run
43
- end
44
- it 'should not push tags if the release is already tagged' do
45
- command.repo.should_not_receive :add_tag
46
- command.repo.should_receive :push
47
-
48
- command.run
49
- end
50
- it 'should push tags if the release is not tagged' do
51
- command.stub!(:release_tagged?).and_return false
52
- command.repo.should_receive :add_tag
53
- command.repo.should_receive :push
54
-
55
- command.run
56
- end
57
- end
58
-
59
- describe "#release_tagged?" do
60
- it 'should be true if a tag exists' do
61
- command.repo.stub!(:tag).and_raise RuntimeError
62
- command.release_tagged?.should be_false
63
- end
64
- it 'should be false if no tag exists' do
65
- command.repo.stub!(:tag)
66
- command.release_tagged?.should be_true
67
- end
68
- end
69
-
70
- describe '#clean_staging_area?' do
71
- it 'should return true if there are no added, changed, or deleted files' do
72
- command.should be_clean_staging_area
73
- end
74
- it 'should return false if there are added files' do
75
- command.repo.status.stub!(:added).and_return ['Gemfile.lock']
76
- command.should_not be_clean_staging_area
77
- end
78
- it 'should return false if there are changed files' do
79
- command.repo.status.stub!(:changed).and_return ['Gemfile.lock']
80
- command.should_not be_clean_staging_area
81
- end
82
- it 'should return false if there are deleted files' do
83
- command.repo.status.stub!(:deleted).and_return ['Gemfile.lock']
84
- command.should_not be_clean_staging_area
85
- end
86
- end
87
- end
@@ -1,11 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Bueller::Commands::InstallGem do
4
-
5
- it "should call sh with gem install" do
6
- bueller = Bueller.new FileSystem.fixture_path('existing-project')
7
- command = Bueller::Commands::InstallGem.new bueller
8
- command.should_receive(:sh).with /bundle exec gem install .*\/pkg\/existing-project-1.5.3.gem/
9
- command.run
10
- end
11
- end
@@ -1,15 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Bueller::Commands::ReleaseToRubygems do
4
- let(:gemspec_helper) { mock(Bueller::GemSpecHelper) }
5
- let(:bueller) { mock(Bueller, :gemspec_helper => gemspec_helper) }
6
- let(:command) { Bueller::Commands::ReleaseToRubygems.new bueller }
7
-
8
- describe '.run' do
9
- it "should push to gemcutter" do
10
- command.gemspec_helper.stub!(:gem_path).and_return 'pkg/zomg-1.2.3.gem'
11
- command.should_receive(:sh).with(/gem push pkg\/zomg-1\.2\.3\.gem/)
12
- command.run
13
- end
14
- end
15
- end