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.
Files changed (109) hide show
  1. data/ChangeLog.markdown +141 -0
  2. data/LICENSE +20 -0
  3. data/README.markdown +182 -0
  4. data/bin/bueller +5 -0
  5. data/lib/bueller/commands/build_gem.rb +50 -0
  6. data/lib/bueller/commands/git_tag_release.rb +63 -0
  7. data/lib/bueller/commands/install_gem.rb +36 -0
  8. data/lib/bueller/commands/release_to_github.rb +41 -0
  9. data/lib/bueller/commands/release_to_rubygems.rb +26 -0
  10. data/lib/bueller/commands/version/base.rb +36 -0
  11. data/lib/bueller/commands/version/bump_major.rb +11 -0
  12. data/lib/bueller/commands/version/bump_minor.rb +12 -0
  13. data/lib/bueller/commands/version/bump_patch.rb +14 -0
  14. data/lib/bueller/commands/version/write.rb +21 -0
  15. data/lib/bueller/commands/write_gemspec.rb +29 -0
  16. data/lib/bueller/commands.rb +18 -0
  17. data/lib/bueller/errors.rb +8 -0
  18. data/lib/bueller/gemspec_helper.rb +83 -0
  19. data/lib/bueller/generator/application.rb +51 -0
  20. data/lib/bueller/generator/bacon_mixin.rb +43 -0
  21. data/lib/bueller/generator/github_mixin.rb +29 -0
  22. data/lib/bueller/generator/micronaut_mixin.rb +41 -0
  23. data/lib/bueller/generator/minitest_mixin.rb +42 -0
  24. data/lib/bueller/generator/options.rb +154 -0
  25. data/lib/bueller/generator/rdoc_mixin.rb +9 -0
  26. data/lib/bueller/generator/riot_mixin.rb +42 -0
  27. data/lib/bueller/generator/rspec_mixin.rb +50 -0
  28. data/lib/bueller/generator/shindo_mixin.rb +44 -0
  29. data/lib/bueller/generator/shoulda_mixin.rb +42 -0
  30. data/lib/bueller/generator/testspec_mixin.rb +42 -0
  31. data/lib/bueller/generator/testunit_mixin.rb +39 -0
  32. data/lib/bueller/generator/yard_mixin.rb +14 -0
  33. data/lib/bueller/generator.rb +291 -0
  34. data/lib/bueller/rubyforge_tasks.rb +88 -0
  35. data/lib/bueller/tasks.rb +133 -0
  36. data/lib/bueller/templates/.document +11 -0
  37. data/lib/bueller/templates/.gitignore +40 -0
  38. data/lib/bueller/templates/Gemfile +1 -0
  39. data/lib/bueller/templates/LICENSE +20 -0
  40. data/lib/bueller/templates/README.rdoc +17 -0
  41. data/lib/bueller/templates/Rakefile +20 -0
  42. data/lib/bueller/templates/bacon/flunking.rb +7 -0
  43. data/lib/bueller/templates/bacon/helper.rb +8 -0
  44. data/lib/bueller/templates/bueller_tasks.erb +10 -0
  45. data/lib/bueller/templates/features/default.feature +9 -0
  46. data/lib/bueller/templates/features/support/env.rb +16 -0
  47. data/lib/bueller/templates/gemspec +27 -0
  48. data/lib/bueller/templates/micronaut/flunking.rb +7 -0
  49. data/lib/bueller/templates/micronaut/helper.rb +17 -0
  50. data/lib/bueller/templates/minitest/flunking.rb +7 -0
  51. data/lib/bueller/templates/minitest/helper.rb +11 -0
  52. data/lib/bueller/templates/other_tasks.erb +84 -0
  53. data/lib/bueller/templates/riot/flunking.rb +11 -0
  54. data/lib/bueller/templates/riot/helper.rb +3 -0
  55. data/lib/bueller/templates/rspec/.rspec +1 -0
  56. data/lib/bueller/templates/rspec/flunking.rb +7 -0
  57. data/lib/bueller/templates/rspec/helper.rb +19 -0
  58. data/lib/bueller/templates/shindo/flunking.rb +8 -0
  59. data/lib/bueller/templates/shindo/helper.rb +5 -0
  60. data/lib/bueller/templates/shoulda/flunking.rb +7 -0
  61. data/lib/bueller/templates/shoulda/helper.rb +10 -0
  62. data/lib/bueller/templates/testspec/flunking.rb +7 -0
  63. data/lib/bueller/templates/testspec/helper.rb +7 -0
  64. data/lib/bueller/templates/testunit/flunking.rb +7 -0
  65. data/lib/bueller/templates/testunit/helper.rb +9 -0
  66. data/lib/bueller/version_helper.rb +59 -0
  67. data/lib/bueller.rb +139 -0
  68. data/spec/bueller/commands/build_gem_spec.rb +38 -0
  69. data/spec/bueller/commands/git_tag_release_spec.rb +79 -0
  70. data/spec/bueller/commands/install_gem_spec.rb +11 -0
  71. data/spec/bueller/commands/release_to_github_spec.rb +54 -0
  72. data/spec/bueller/commands/release_to_rubygems_spec.rb +15 -0
  73. data/spec/bueller/commands/version/bump_major_spec.rb +12 -0
  74. data/spec/bueller/commands/version/bump_minor_spec.rb +12 -0
  75. data/spec/bueller/commands/version/bump_patch_spec.rb +12 -0
  76. data/spec/bueller/commands/write_gemspec_spec.rb +32 -0
  77. data/spec/bueller/gemspec_helper_spec.rb +55 -0
  78. data/spec/bueller/generator/application_spec.rb +67 -0
  79. data/spec/bueller/generator/options_spec.rb +206 -0
  80. data/spec/bueller/generator_mixins_spec.rb +23 -0
  81. data/spec/bueller/generator_spec.rb +274 -0
  82. data/spec/bueller/tasks_spec.rb +29 -0
  83. data/spec/bueller/version_helper_spec.rb +57 -0
  84. data/spec/bueller_spec.rb +94 -0
  85. data/spec/fixtures/bar/bar.gemspec +41 -0
  86. data/spec/fixtures/bar/bin/foo_the_ultimate_bin +1 -0
  87. data/spec/fixtures/bar/hey_include_me_in_gemspec +0 -0
  88. data/spec/fixtures/bar/lib/foo_the_ultimate_lib.rb +1 -0
  89. data/spec/fixtures/existing-project/LICENSE +20 -0
  90. data/spec/fixtures/existing-project/README.rdoc +7 -0
  91. data/spec/fixtures/existing-project/Rakefile +69 -0
  92. data/spec/fixtures/existing-project/existing-project.gemspec +20 -0
  93. data/spec/fixtures/existing-project/lib/existing_project_with_version.rb +0 -0
  94. data/spec/fixtures/existing-project/test/existing_project_with_version_test.rb +7 -0
  95. data/spec/fixtures/existing-project/test/test_helper.rb +10 -0
  96. data/spec/fixtures/existing-project-with-version-constant/LICENSE +20 -0
  97. data/spec/fixtures/existing-project-with-version-constant/README.rdoc +7 -0
  98. data/spec/fixtures/existing-project-with-version-constant/Rakefile +69 -0
  99. data/spec/fixtures/existing-project-with-version-constant/existing-project-with-version.gemspec +19 -0
  100. data/spec/fixtures/existing-project-with-version-constant/lib/existing_project_with_version.rb +0 -0
  101. data/spec/fixtures/existing-project-with-version-constant/test/existing_project_with_version_test.rb +7 -0
  102. data/spec/fixtures/existing-project-with-version-constant/test/test_helper.rb +10 -0
  103. data/spec/spec_helper.rb +11 -0
  104. data/spec/support/application.rb +28 -0
  105. data/spec/support/file_system.rb +24 -0
  106. data/spec/support/gemspec.rb +28 -0
  107. data/spec/support/git.rb +19 -0
  108. data/spec/support/have_version.rb +18 -0
  109. metadata +381 -0
@@ -0,0 +1,11 @@
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
@@ -0,0 +1,54 @@
1
+ require 'spec_helper'
2
+
3
+ describe Bueller::Commands::ReleaseToGithub do
4
+ let(:bueller) { Bueller.new }
5
+ let(:command) { Bueller::Commands::ReleaseToGithub.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
+ end
36
+
37
+ describe '#clean_staging_area?' do
38
+ it 'should return true if there are no added, changed, or deleted files' do
39
+ command.should be_clean_staging_area
40
+ end
41
+ it 'should return false if there are added files' do
42
+ command.repo.status.stub!(:added).and_return ['Gemfile.lock']
43
+ command.should_not be_clean_staging_area
44
+ end
45
+ it 'should return false if there are changed files' do
46
+ command.repo.status.stub!(:changed).and_return ['Gemfile.lock']
47
+ command.should_not be_clean_staging_area
48
+ end
49
+ it 'should return false if there are deleted files' do
50
+ command.repo.status.stub!(:deleted).and_return ['Gemfile.lock']
51
+ command.should_not be_clean_staging_area
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,15 @@
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
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ describe Bueller::Commands::Version::BumpMajor do
4
+ it "should call bump_major on version_helper in update_version" do
5
+ bueller = Bueller.new FileSystem.fixture_path('existing-project')
6
+ command = Bueller::Commands::Version::BumpMajor.new bueller
7
+
8
+ command.update_version
9
+
10
+ command.version_helper.major.should == 2
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ describe Bueller::Commands::Version::BumpMinor do
4
+ it "should call bump_minor on version_helper in update_version" do
5
+ bueller = Bueller.new FileSystem.fixture_path('existing-project')
6
+ command = Bueller::Commands::Version::BumpMinor.new bueller
7
+
8
+ command.update_version
9
+
10
+ command.version_helper.minor.should == 6
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ describe Bueller::Commands::Version::BumpPatch do
4
+ it "should call bump_patch on version_helper in update_version" do
5
+ bueller = Bueller.new FileSystem.fixture_path('existing-project')
6
+ command = Bueller::Commands::Version::BumpPatch.new bueller
7
+
8
+ command.update_version
9
+
10
+ command.version_helper.patch.should == 4
11
+ end
12
+ end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe Bueller::Commands::WriteGemspec do
4
+ let(:bueller) { Bueller.new FileSystem.fixture_path('existing-project') }
5
+ let(:command) { Bueller::Commands::WriteGemspec.new(bueller) }
6
+ let(:now) { Time.now }
7
+
8
+ context "after run" do
9
+ before :each do
10
+ bueller.gemspec_helper.stub!(:write)
11
+ Time.stub!(:now).and_return Time.parse('2011-01-13 04:22:33')
12
+ end
13
+ it "should update gemspec version" do
14
+ bueller.version_helper.bump_major
15
+ command.run
16
+ bueller.gemspec_helper.version.to_s.should == '2.0.0'
17
+ end
18
+ it "should update gemspec date to the beginning of today" do
19
+ command.run
20
+ bueller.gemspec_helper.spec.date.to_s.should =~ /2011-01-13/
21
+ end
22
+ it "should write gemspec" do
23
+ bueller.gemspec_helper.should_receive :write
24
+ command.run
25
+ end
26
+ it "should output that the gemspec was written" do
27
+ bueller.output = StringIO.new
28
+ command.run
29
+ bueller.output.string.should =~ /Generated: .*existing-project\.gemspec/
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,55 @@
1
+ require 'spec_helper'
2
+
3
+ describe Bueller::GemSpecHelper do
4
+ let(:spec) { Gemspec.build }
5
+ let(:helper) { Bueller::GemSpecHelper.new('.') }
6
+
7
+ describe '#valid?' do
8
+ it 'should return true if the gemspec is valid' do
9
+ helper.should be_valid
10
+ end
11
+ it 'should return false if the gemspec is not valid' do
12
+ helper.stub!(:reload_spec).and_raise StandardError
13
+ helper.should_not be_valid
14
+ end
15
+ end
16
+
17
+ describe '#reload_spec' do
18
+ it 'should clear out the evaluated gemspec' do
19
+ helper.spec_source = '2 + 2'
20
+ helper.reload_spec
21
+ helper.spec.should == 4
22
+ end
23
+ end
24
+
25
+ describe "#write" do
26
+ it 'should include updates made to the gemspec' do
27
+ file = mock(File)
28
+ File.stub!(:open).and_yield file
29
+ helper.update_version '999.999.999'
30
+ file.should_receive(:puts).with(/999\.999\.999/)
31
+ helper.write
32
+ end
33
+ end
34
+
35
+ describe '#path' do
36
+ it 'should return the path to the gemspec' do
37
+ Dir.stub!(:glob).and_return [File.join(File.dirname(__FILE__), 'test.gemspec')]
38
+ helper.path.should == "spec/bueller/test.gemspec"
39
+ end
40
+ end
41
+
42
+ describe '#update_version' do
43
+ it 'should set the spec version to the new version' do
44
+ helper.update_version '999.999.999'
45
+ helper.version.to_s.should == '999.999.999'
46
+ end
47
+ it 'should raise an error if the spec has no existing version' do
48
+ s = Gem::Specification.new
49
+ helper.instance_variable_set :@spec, s
50
+ expect do
51
+ helper.update_version '9.9.9'
52
+ end.should raise_error(Bueller::GemSpecHelper::VersionMissing)
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,67 @@
1
+ require 'spec_helper'
2
+
3
+ describe Bueller::Generator::Application do
4
+ before :each do
5
+ # opts = {}
6
+ # opts.stub!(:opts).and_return({})
7
+ # Bueller::Generator::Options.stub!(:new).and_return(opts)
8
+ end
9
+
10
+ context "when options indicate help usage" do
11
+ let(:application) { App.run_application('-h') }
12
+
13
+ it "should exit with code 1" do
14
+ application.should == 1
15
+ end
16
+
17
+ it 'should should puts option usage' do
18
+ application
19
+ App.stderr.should =~ /Usage:/
20
+ end
21
+
22
+ it 'should not display anything on stdout' do
23
+ application
24
+ App.stdout.squeeze.strip.should == ''
25
+ end
26
+ end
27
+
28
+ context "when options indicate an invalid argument" do
29
+ let(:application) { App.run_application('--invalid-argument') }
30
+
31
+ it "should exit with code 1" do
32
+ application.should == 1
33
+ end
34
+
35
+ it 'should display invalid argument' do
36
+ application
37
+ App.stderr.should =~ /--invalid-argument/
38
+ end
39
+
40
+ it 'should display usage on stderr' do
41
+ application
42
+ App.stderr.should =~ /Usage:/
43
+ end
44
+
45
+ it 'should not display anything on stdout' do
46
+ App.stdout.squeeze.strip.should == ''
47
+ end
48
+ end
49
+
50
+ context "when options are good" do
51
+ let(:application) { App.run_application 'foo' }
52
+
53
+ before :each do
54
+ Bueller::Generator.stub!(:run)
55
+ end
56
+
57
+ it "should exit with code 1" do
58
+ application.should == 0
59
+ end
60
+
61
+ it "should run generator" do
62
+ Bueller::Generator.should_receive :run
63
+ application
64
+ end
65
+ end
66
+
67
+ end
@@ -0,0 +1,206 @@
1
+ require 'spec_helper'
2
+
3
+ describe Bueller::Generator::Options do
4
+ before :each do
5
+ GitSupport.stub_config GitSupport.valid_config
6
+ end
7
+
8
+ def self.should_have_docmentation_framework(documentation_framework)
9
+ it "should use #{documentation_framework} for documentation" do
10
+ @options[:documentation_framework].should == documentation_framework.to_sym
11
+ end
12
+ end
13
+
14
+ def setup_options(*arguments)
15
+ @options = Bueller::Generator::Options.new(["project_name"] + arguments)
16
+ end
17
+
18
+ def self.for_options(*options)
19
+ end
20
+
21
+ context "default options" do
22
+ before(:each) { setup_options }
23
+ should_have_docmentation_framework :rdoc
24
+
25
+ it "should use shoulda for testing" do
26
+ options = Bueller::Generator::Options.new(['project_name', '--shoulda'])
27
+ options[:testing_framework].should == :shoulda
28
+ end
29
+
30
+ it 'should not create repository' do
31
+ @options[:create_repo].should be_nil
32
+ end
33
+
34
+ it "should have project name" do
35
+ @options[:project_name].should == "project_name"
36
+ end
37
+
38
+ it "should use github username from git config" do
39
+ @options[:github_username].should == GitSupport.github_user
40
+ end
41
+
42
+ it "should use github token from git config" do
43
+ @options[:github_token].should == GitSupport.github_token
44
+ end
45
+
46
+ it "should use user name from git config" do
47
+ @options[:user_name].should == GitSupport.name
48
+ end
49
+
50
+ it "should use user email from git config" do
51
+ @options[:user_email].should == GitSupport.email
52
+ end
53
+ end
54
+
55
+
56
+ it "should use bacon for testing" do
57
+ options = Bueller::Generator::Options.new(['project_name', '--bacon'])
58
+ options[:testing_framework].should == :bacon
59
+ end
60
+
61
+ it "should use micronaut for testing" do
62
+ options = Bueller::Generator::Options.new(['project_name', '--micronaut'])
63
+ options[:testing_framework].should == :micronaut
64
+ end
65
+
66
+ it "should use minitest for testing" do
67
+ options = Bueller::Generator::Options.new(['project_name', '--minitest'])
68
+ options[:testing_framework].should == :minitest
69
+ end
70
+
71
+ it "should use rspec for testing" do
72
+ options = Bueller::Generator::Options.new(['project_name', '--rspec'])
73
+ options[:testing_framework].should == :rspec
74
+ end
75
+
76
+ it "should use shoulda for testing" do
77
+ options = Bueller::Generator::Options.new(['project_name', '--shoulda'])
78
+ options[:testing_framework].should == :shoulda
79
+ end
80
+
81
+ it "should use testunit for testing" do
82
+ options = Bueller::Generator::Options.new(['project_name', '--testunit'])
83
+ options[:testing_framework].should == :testunit
84
+ end
85
+
86
+ it "should use testspec for testing" do
87
+ options = Bueller::Generator::Options.new(['project_name', '--testspec'])
88
+ options[:testing_framework].should == :testspec
89
+ end
90
+
91
+ it "should use cucumber for testing" do
92
+ options = Bueller::Generator::Options.new(['project_name', '--cucumber'])
93
+ options[:use_cucumber].should be_true
94
+ end
95
+
96
+ it "should use reek" do
97
+ options = Bueller::Generator::Options.new(['project_name', '--reek'])
98
+ options[:use_reek].should be_true
99
+ end
100
+
101
+ it "should use roodi" do
102
+ options = Bueller::Generator::Options.new(['project_name', '--roodi'])
103
+ options[:use_roodi].should be_true
104
+ end
105
+
106
+ for_options '--create-repo' do
107
+ it 'should create repository' do
108
+ @options[:create_repo].should_not be_nil
109
+ end
110
+ end
111
+
112
+ for_options '--rdoc' do
113
+ should_have_docmentation_framework :rdoc
114
+ end
115
+
116
+ for_options '--yard' do
117
+ should_have_docmentation_framework :yard
118
+ end
119
+
120
+ for_options '--summary', 'zomg so awesome' do
121
+ it 'should have summary zomg so awesome' do
122
+ @options[:summary].should == 'zomg so awesome'
123
+ end
124
+ end
125
+
126
+ for_options '--description', 'Descriptive' do
127
+ it 'should have description Descriptive' do
128
+ @options[:description].should == 'Descriptive'
129
+ end
130
+ end
131
+
132
+ for_options '--directory', 'foo' do
133
+ it 'should have directory foo' do
134
+ @options[:directory].should == 'foo'
135
+ end
136
+ end
137
+
138
+ for_options '--help' do
139
+ it 'should show help' do
140
+ @options[:show_help].should_not be_nil
141
+ end
142
+ end
143
+
144
+ for_options '-h' do
145
+ it 'should show help' do
146
+ @options[:show_help].should_not be_nil
147
+ end
148
+ end
149
+
150
+ for_options '--zomg-invalid' do
151
+ it 'should be an invalid argument' do
152
+ @options[:invalid_argument].should_not be_nil
153
+ end
154
+ end
155
+
156
+ for_options '--user-name', 'myname' do
157
+ it "should set user name" do
158
+ @options[:user_name].should == 'myname'
159
+ end
160
+ end
161
+
162
+ for_options '--user-email', 'myname@mydomain.com' do
163
+ it "should set user email" do
164
+ @options[:user_email].should == 'myname@mydomain.com'
165
+ end
166
+ end
167
+
168
+ for_options '--homepage', 'http://zomg.com' do
169
+ it 'should set hoempage' do
170
+ @options[:homepage].should == 'http://zomg.com'
171
+ end
172
+ end
173
+
174
+ for_options '--git-remote', 'git@my-awesome-domain.com:zomg.git' do
175
+ it 'should set the git remote' do
176
+ @options[:git_remote].should == 'git@my-awesome-domain.com:zomg.git'
177
+ end
178
+ end
179
+
180
+ for_options '--github-username', 'mygithub' do
181
+ it "should set github username" do
182
+ @options[:github_username].should == 'mygithub'
183
+ end
184
+ end
185
+
186
+ for_options '--github-token', 'mygithubtoken' do
187
+ it "should set github token" do
188
+ @options[:github_token].should == 'mygithubtoken'
189
+ end
190
+ end
191
+
192
+ context "merging options" do
193
+ it "should take options from each" do
194
+ options = Bueller::Generator::Options.new(["--rspec"]).
195
+ merge Bueller::Generator::Options.new(["--create-repo"])
196
+ options[:testing_framework].should == :rspec
197
+ options[:create_repo].should_not be_nil
198
+ end
199
+
200
+ it "should shadow options" do
201
+ options = Bueller::Generator::Options.new(["--bacon"]).
202
+ merge Bueller::Generator::Options.new(["--rspec"])
203
+ options[:testing_framework].should == :rspec
204
+ end
205
+ end
206
+ end