bueller 0.0.1
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/ChangeLog.markdown +141 -0
- data/LICENSE +20 -0
- data/README.markdown +182 -0
- data/bin/bueller +5 -0
- data/lib/bueller/commands/build_gem.rb +50 -0
- data/lib/bueller/commands/git_tag_release.rb +63 -0
- data/lib/bueller/commands/install_gem.rb +36 -0
- data/lib/bueller/commands/release_to_github.rb +41 -0
- data/lib/bueller/commands/release_to_rubygems.rb +26 -0
- data/lib/bueller/commands/version/base.rb +36 -0
- data/lib/bueller/commands/version/bump_major.rb +11 -0
- data/lib/bueller/commands/version/bump_minor.rb +12 -0
- data/lib/bueller/commands/version/bump_patch.rb +14 -0
- data/lib/bueller/commands/version/write.rb +21 -0
- data/lib/bueller/commands/write_gemspec.rb +29 -0
- data/lib/bueller/commands.rb +18 -0
- data/lib/bueller/errors.rb +8 -0
- data/lib/bueller/gemspec_helper.rb +83 -0
- data/lib/bueller/generator/application.rb +51 -0
- data/lib/bueller/generator/bacon_mixin.rb +43 -0
- data/lib/bueller/generator/github_mixin.rb +29 -0
- data/lib/bueller/generator/micronaut_mixin.rb +41 -0
- data/lib/bueller/generator/minitest_mixin.rb +42 -0
- data/lib/bueller/generator/options.rb +154 -0
- data/lib/bueller/generator/rdoc_mixin.rb +9 -0
- data/lib/bueller/generator/riot_mixin.rb +42 -0
- data/lib/bueller/generator/rspec_mixin.rb +50 -0
- data/lib/bueller/generator/shindo_mixin.rb +44 -0
- data/lib/bueller/generator/shoulda_mixin.rb +42 -0
- data/lib/bueller/generator/testspec_mixin.rb +42 -0
- data/lib/bueller/generator/testunit_mixin.rb +39 -0
- data/lib/bueller/generator/yard_mixin.rb +14 -0
- data/lib/bueller/generator.rb +291 -0
- data/lib/bueller/rubyforge_tasks.rb +88 -0
- data/lib/bueller/tasks.rb +133 -0
- data/lib/bueller/templates/.document +11 -0
- data/lib/bueller/templates/.gitignore +40 -0
- data/lib/bueller/templates/Gemfile +1 -0
- data/lib/bueller/templates/LICENSE +20 -0
- data/lib/bueller/templates/README.rdoc +17 -0
- data/lib/bueller/templates/Rakefile +20 -0
- data/lib/bueller/templates/bacon/flunking.rb +7 -0
- data/lib/bueller/templates/bacon/helper.rb +8 -0
- data/lib/bueller/templates/bueller_tasks.erb +10 -0
- data/lib/bueller/templates/features/default.feature +9 -0
- data/lib/bueller/templates/features/support/env.rb +16 -0
- data/lib/bueller/templates/gemspec +27 -0
- data/lib/bueller/templates/micronaut/flunking.rb +7 -0
- data/lib/bueller/templates/micronaut/helper.rb +17 -0
- data/lib/bueller/templates/minitest/flunking.rb +7 -0
- data/lib/bueller/templates/minitest/helper.rb +11 -0
- data/lib/bueller/templates/other_tasks.erb +84 -0
- data/lib/bueller/templates/riot/flunking.rb +11 -0
- data/lib/bueller/templates/riot/helper.rb +3 -0
- data/lib/bueller/templates/rspec/.rspec +1 -0
- data/lib/bueller/templates/rspec/flunking.rb +7 -0
- data/lib/bueller/templates/rspec/helper.rb +19 -0
- data/lib/bueller/templates/shindo/flunking.rb +8 -0
- data/lib/bueller/templates/shindo/helper.rb +5 -0
- data/lib/bueller/templates/shoulda/flunking.rb +7 -0
- data/lib/bueller/templates/shoulda/helper.rb +10 -0
- data/lib/bueller/templates/testspec/flunking.rb +7 -0
- data/lib/bueller/templates/testspec/helper.rb +7 -0
- data/lib/bueller/templates/testunit/flunking.rb +7 -0
- data/lib/bueller/templates/testunit/helper.rb +9 -0
- data/lib/bueller/version_helper.rb +59 -0
- data/lib/bueller.rb +139 -0
- data/spec/bueller/commands/build_gem_spec.rb +38 -0
- data/spec/bueller/commands/git_tag_release_spec.rb +79 -0
- data/spec/bueller/commands/install_gem_spec.rb +11 -0
- data/spec/bueller/commands/release_to_github_spec.rb +54 -0
- data/spec/bueller/commands/release_to_rubygems_spec.rb +15 -0
- data/spec/bueller/commands/version/bump_major_spec.rb +12 -0
- data/spec/bueller/commands/version/bump_minor_spec.rb +12 -0
- data/spec/bueller/commands/version/bump_patch_spec.rb +12 -0
- data/spec/bueller/commands/write_gemspec_spec.rb +32 -0
- data/spec/bueller/gemspec_helper_spec.rb +55 -0
- data/spec/bueller/generator/application_spec.rb +67 -0
- data/spec/bueller/generator/options_spec.rb +206 -0
- data/spec/bueller/generator_mixins_spec.rb +23 -0
- data/spec/bueller/generator_spec.rb +274 -0
- data/spec/bueller/tasks_spec.rb +29 -0
- data/spec/bueller/version_helper_spec.rb +57 -0
- data/spec/bueller_spec.rb +94 -0
- data/spec/fixtures/bar/bar.gemspec +41 -0
- data/spec/fixtures/bar/bin/foo_the_ultimate_bin +1 -0
- data/spec/fixtures/bar/hey_include_me_in_gemspec +0 -0
- data/spec/fixtures/bar/lib/foo_the_ultimate_lib.rb +1 -0
- data/spec/fixtures/existing-project/LICENSE +20 -0
- data/spec/fixtures/existing-project/README.rdoc +7 -0
- data/spec/fixtures/existing-project/Rakefile +69 -0
- data/spec/fixtures/existing-project/existing-project.gemspec +20 -0
- data/spec/fixtures/existing-project/lib/existing_project_with_version.rb +0 -0
- data/spec/fixtures/existing-project/test/existing_project_with_version_test.rb +7 -0
- data/spec/fixtures/existing-project/test/test_helper.rb +10 -0
- data/spec/fixtures/existing-project-with-version-constant/LICENSE +20 -0
- data/spec/fixtures/existing-project-with-version-constant/README.rdoc +7 -0
- data/spec/fixtures/existing-project-with-version-constant/Rakefile +69 -0
- data/spec/fixtures/existing-project-with-version-constant/existing-project-with-version.gemspec +19 -0
- data/spec/fixtures/existing-project-with-version-constant/lib/existing_project_with_version.rb +0 -0
- data/spec/fixtures/existing-project-with-version-constant/test/existing_project_with_version_test.rb +7 -0
- data/spec/fixtures/existing-project-with-version-constant/test/test_helper.rb +10 -0
- data/spec/spec_helper.rb +11 -0
- data/spec/support/application.rb +28 -0
- data/spec/support/file_system.rb +24 -0
- data/spec/support/gemspec.rb +28 -0
- data/spec/support/git.rb +19 -0
- data/spec/support/have_version.rb +18 -0
- metadata +381 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
--color
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require 'bundler'
|
|
2
|
+
begin
|
|
3
|
+
Bundler.setup
|
|
4
|
+
rescue Bundler::BundlerError => e
|
|
5
|
+
$stderr.puts e.message
|
|
6
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
|
7
|
+
exit e.status_code
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
require 'rspec'
|
|
11
|
+
require '<%= require_name %>'
|
|
12
|
+
|
|
13
|
+
# Requires supporting files with custom matchers and macros, etc,
|
|
14
|
+
# in ./support/ and its subdirectories.
|
|
15
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
|
16
|
+
|
|
17
|
+
RSpec.configure do |config|
|
|
18
|
+
|
|
19
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
require 'yaml'
|
|
2
|
+
|
|
3
|
+
class Bueller
|
|
4
|
+
class VersionHelper
|
|
5
|
+
class VersionMissing < StandardError; end
|
|
6
|
+
class MalformattedVersion < StandardError; end
|
|
7
|
+
|
|
8
|
+
attr_accessor :gemspec_helper
|
|
9
|
+
attr_reader :major, :minor, :patch, :build
|
|
10
|
+
|
|
11
|
+
def initialize(gemspec_helper)
|
|
12
|
+
self.gemspec_helper = gemspec_helper
|
|
13
|
+
parse_version
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def parse_version
|
|
17
|
+
# http://rubular.com/regexes/10467 -> 3.5.4.a1
|
|
18
|
+
# http://rubular.com/regexes/10468 -> 3.5.4
|
|
19
|
+
raise VersionMissing unless gemspec_helper.has_version?
|
|
20
|
+
if gemspec_helper.version.to_s =~ /^(\d+)\.(\d+)\.(\d+)(?:\.(.*?))?$/
|
|
21
|
+
@major = $1.to_i
|
|
22
|
+
@minor = $2.to_i
|
|
23
|
+
@patch = $3.to_i
|
|
24
|
+
@build = $4
|
|
25
|
+
else
|
|
26
|
+
raise MalformattedVersion, "Version doesn't match expected format: #{gemspec_helper.version}"
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def bump_major
|
|
31
|
+
@major += 1
|
|
32
|
+
@minor = 0
|
|
33
|
+
@patch = 0
|
|
34
|
+
@build = nil
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def bump_minor
|
|
38
|
+
@minor += 1
|
|
39
|
+
@patch = 0
|
|
40
|
+
@build = nil
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def bump_patch
|
|
44
|
+
@patch += 1
|
|
45
|
+
@build = nil
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def update_to(major, minor, patch, build=nil)
|
|
49
|
+
@major = major
|
|
50
|
+
@minor = minor
|
|
51
|
+
@patch = patch
|
|
52
|
+
@build = build
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def to_s
|
|
56
|
+
[major, minor, patch, build].compact.join('.')
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
data/lib/bueller.rb
ADDED
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
require 'date'
|
|
2
|
+
|
|
3
|
+
# Bueller helps you craft the perfect Rubygem. Give him a gemspec, and he takes care of the rest.
|
|
4
|
+
#
|
|
5
|
+
# See Bueller::Tasks for examples of how to get started. Additionally, resources are available on the wiki:
|
|
6
|
+
#
|
|
7
|
+
# * http://wiki.github.com/technicalpickles/bueller/create-a-new-project
|
|
8
|
+
# * http://wiki.github.com/technicalpickles/bueller/configure-an-existing-project
|
|
9
|
+
class Bueller
|
|
10
|
+
require 'bueller/errors'
|
|
11
|
+
require 'rubygems/user_interaction'
|
|
12
|
+
|
|
13
|
+
autoload :Generator, 'bueller/generator'
|
|
14
|
+
|
|
15
|
+
autoload :Commands, 'bueller/commands'
|
|
16
|
+
|
|
17
|
+
autoload :VersionHelper, 'bueller/version_helper'
|
|
18
|
+
autoload :GemSpecHelper, 'bueller/gemspec_helper'
|
|
19
|
+
|
|
20
|
+
autoload :Tasks, 'bueller/tasks'
|
|
21
|
+
autoload :RubyforgeTasks, 'bueller/rubyforge_tasks'
|
|
22
|
+
|
|
23
|
+
attr_accessor :base_dir, :output, :repo, :gemspec_helper, :version_helper, :commit
|
|
24
|
+
|
|
25
|
+
def initialize(base_dir = '.')
|
|
26
|
+
self.base_dir = base_dir
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def gemspec_helper
|
|
30
|
+
@gemspec_helper ||= GemSpecHelper.new base_dir
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def version_helper
|
|
34
|
+
@version_helper ||= Bueller::VersionHelper.new gemspec_helper
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def repo
|
|
38
|
+
@repo ||= Git.open(git_base_dir) if in_git_repo?
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def commit
|
|
42
|
+
@commit = @commit.nil? ? true : @commit
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def output
|
|
46
|
+
@output ||= $stdout
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Major version, as defined by the gemspec's Version module.
|
|
50
|
+
# For 1.5.3, this would return 1.
|
|
51
|
+
def major_version
|
|
52
|
+
@version_helper.major
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Minor version, as defined by the gemspec's Version module.
|
|
56
|
+
# For 1.5.3, this would return 5.
|
|
57
|
+
def minor_version
|
|
58
|
+
@version_helper.minor
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Patch version, as defined by the gemspec's Version module.
|
|
62
|
+
# For 1.5.3, this would return 5.
|
|
63
|
+
def patch_version
|
|
64
|
+
@version_helper.patch
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Human readable version, which is used in the gemspec.
|
|
68
|
+
def version
|
|
69
|
+
gemspec_helper.version || @version_helper.to_s
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Writes out the gemspec
|
|
73
|
+
def write_gemspec
|
|
74
|
+
Bueller::Commands::WriteGemspec.run_for self
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# Build a gem using the project's latest Gem::Specification
|
|
78
|
+
def build_gem
|
|
79
|
+
Bueller::Commands::BuildGem.run_for self
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Install a previously built gem
|
|
83
|
+
def install_gem
|
|
84
|
+
Bueller::Commands::InstallGem.run_for self
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Bumps the patch version.
|
|
88
|
+
#
|
|
89
|
+
# 1.5.1 -> 1.5.2
|
|
90
|
+
def bump_patch_version
|
|
91
|
+
Bueller::Commands::Version::BumpPatch.run_for self
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# Bumps the minor version.
|
|
95
|
+
#
|
|
96
|
+
# 1.5.1 -> 1.6.0
|
|
97
|
+
def bump_minor_version
|
|
98
|
+
Bueller::Commands::Version::BumpMinor.run_for self
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# Bumps the major version.
|
|
102
|
+
#
|
|
103
|
+
# 1.5.1 -> 2.0.0
|
|
104
|
+
def bump_major_version
|
|
105
|
+
Bueller::Commands::Version::BumpMajor.run_for self
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
# Bumps the version, to the specific major/minor/patch version, writing out the appropriate version.rb, and then reloads it.
|
|
109
|
+
def write_version(major, minor, patch, build)
|
|
110
|
+
Bueller::Commands::Version::Write.run_for self, major, minor, patch, build
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def release_gem_to_github
|
|
114
|
+
Bueller::Commands::ReleaseToGithub.run_for self
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def git_tag_release
|
|
118
|
+
Bueller::Commands::GitTagRelease.run_for self
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def release_gem_to_rubygems
|
|
122
|
+
Bueller::Commands::ReleaseToRubygems.run_for self
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def git_base_dir(base_dir = nil)
|
|
126
|
+
if base_dir
|
|
127
|
+
base_dir = File.dirname(base_dir)
|
|
128
|
+
else
|
|
129
|
+
base_dir = File.expand_path(self.base_dir || ".")
|
|
130
|
+
end
|
|
131
|
+
return nil if base_dir==File.dirname("/")
|
|
132
|
+
return base_dir if File.exists?(File.join(base_dir, '.git'))
|
|
133
|
+
git_base_dir(base_dir)
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def in_git_repo?
|
|
137
|
+
!git_base_dir.nil?
|
|
138
|
+
end
|
|
139
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
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
|
|
@@ -0,0 +1,79 @@
|
|
|
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.stub!(:release_tagged?).and_return true
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it 'should raise an error if the staging area is unclean' do
|
|
24
|
+
command.stub!(:clean_staging_area?).and_return false
|
|
25
|
+
expect { command.run }.should raise_error(RuntimeError, /try committing/i)
|
|
26
|
+
end
|
|
27
|
+
it 'should check out master' do
|
|
28
|
+
command.repo.should_receive(:checkout).with 'master'
|
|
29
|
+
command.run
|
|
30
|
+
end
|
|
31
|
+
it 'should push' do
|
|
32
|
+
command.repo.should_receive :push
|
|
33
|
+
command.run
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it 'should not push tags if the release is already tagged' do
|
|
37
|
+
command.repo.should_not_receive :add_tag
|
|
38
|
+
command.repo.should_receive(:push).once
|
|
39
|
+
|
|
40
|
+
command.run
|
|
41
|
+
end
|
|
42
|
+
it 'should push tags if the release is not tagged' do
|
|
43
|
+
command.stub!(:release_tagged?).and_return false
|
|
44
|
+
command.repo.should_receive :add_tag
|
|
45
|
+
command.repo.should_receive(:push).twice
|
|
46
|
+
|
|
47
|
+
command.run
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
describe "#release_tagged?" do
|
|
52
|
+
it 'should be true if a tag exists' do
|
|
53
|
+
command.repo.stub!(:tag).and_raise RuntimeError
|
|
54
|
+
command.release_tagged?.should be_true
|
|
55
|
+
end
|
|
56
|
+
it 'should be false if no tag exists' do
|
|
57
|
+
command.repo.stub!(:tag)
|
|
58
|
+
command.release_tagged?.should be_false
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
describe '#clean_staging_area?' do
|
|
63
|
+
it 'should return true if there are no added, changed, or deleted files' do
|
|
64
|
+
command.should be_clean_staging_area
|
|
65
|
+
end
|
|
66
|
+
it 'should return false if there are added files' do
|
|
67
|
+
command.repo.status.stub!(:added).and_return ['Gemfile.lock']
|
|
68
|
+
command.should_not be_clean_staging_area
|
|
69
|
+
end
|
|
70
|
+
it 'should return false if there are changed files' do
|
|
71
|
+
command.repo.status.stub!(:changed).and_return ['Gemfile.lock']
|
|
72
|
+
command.should_not be_clean_staging_area
|
|
73
|
+
end
|
|
74
|
+
it 'should return false if there are deleted files' do
|
|
75
|
+
command.repo.status.stub!(:deleted).and_return ['Gemfile.lock']
|
|
76
|
+
command.should_not be_clean_staging_area
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|