shuhari 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. data/.gitignore +18 -0
  2. data/Gemfile +14 -0
  3. data/Guardfile +6 -0
  4. data/LICENSE +22 -0
  5. data/README.md +50 -0
  6. data/Rakefile +8 -0
  7. data/bin/shuhari +10 -0
  8. data/cucumber.yml +11 -0
  9. data/features/cucumber_kata.feature +89 -0
  10. data/features/getting_help.feature +41 -0
  11. data/features/minitest_kata.feature +89 -0
  12. data/features/minitest_spec_kata.feature +89 -0
  13. data/features/rspec_kata.feature +93 -0
  14. data/features/step_definitions/steps.rb +5 -0
  15. data/features/support/env.rb +3 -0
  16. data/features/testunit_kata.feature +88 -0
  17. data/lib/shuhari.rb +9 -0
  18. data/lib/shuhari/app.rb +87 -0
  19. data/lib/shuhari/platform.rb +32 -0
  20. data/lib/shuhari/platform_gems.rb +41 -0
  21. data/lib/shuhari/project_generation.rb +58 -0
  22. data/lib/shuhari/version.rb +3 -0
  23. data/shuhari.gemspec +19 -0
  24. data/templates/base/.rvmrc.tt +1 -0
  25. data/templates/base/lib/kata.rb.tt +2 -0
  26. data/templates/base/shuhari.yml.tt +2 -0
  27. data/templates/cucumber/Gemfile.tt +8 -0
  28. data/templates/cucumber/Guardfile +5 -0
  29. data/templates/cucumber/features/kata.feature.tt +1 -0
  30. data/templates/cucumber/features/step_definitions/steps.rb +0 -0
  31. data/templates/cucumber/features/support/env.rb.tt +4 -0
  32. data/templates/minitest/Gemfile.tt +7 -0
  33. data/templates/minitest/Guardfile +5 -0
  34. data/templates/minitest/test/test_helper.rb.tt +5 -0
  35. data/templates/minitest/test/test_kata.rb.tt +4 -0
  36. data/templates/minitest_spec/Gemfile.tt +7 -0
  37. data/templates/minitest_spec/Guardfile +5 -0
  38. data/templates/minitest_spec/spec/kata_spec.rb.tt +4 -0
  39. data/templates/minitest_spec/spec/spec_helper.rb.tt +5 -0
  40. data/templates/rspec/Gemfile.tt +7 -0
  41. data/templates/rspec/Guardfile +5 -0
  42. data/templates/rspec/spec/kata_spec.rb.tt +4 -0
  43. data/templates/rspec/spec/spec_helper.rb.tt +9 -0
  44. data/templates/testunit/Gemfile.tt +7 -0
  45. data/templates/testunit/Guardfile +5 -0
  46. data/templates/testunit/test/kata_test.rb.tt +4 -0
  47. data/templates/testunit/test/test_helper.rb.tt +4 -0
  48. metadata +119 -0
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ .rvmrc
data/Gemfile ADDED
@@ -0,0 +1,14 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in shuhari.gemspec
4
+ gemspec
5
+
6
+ group :test do
7
+ gem 'cucumber'
8
+ gem 'rspec'
9
+ gem 'aruba'
10
+ gem 'guard-cucumber'
11
+ gem 'coolline', :require => false
12
+ gem 'growl', :require => false
13
+ gem 'rb-fsevent', :require => false
14
+ end
@@ -0,0 +1,6 @@
1
+ guard 'cucumber', :cli => '--color --format progress --strict' do
2
+ watch(%r{^lib/.+\.rb$}) { 'features' }
3
+ watch(%r{^templates/.+$}) { 'features' }
4
+ watch(%r{^features/.+\.feature$})
5
+ watch(%r{^features/(support|step_definitions)/.+$}) { 'features' }
6
+ end
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Jason Arhart
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,50 @@
1
+ # Shuhari
2
+
3
+ Shuhari generates new projects for doing TDD Kata.
4
+
5
+ ## Installation
6
+
7
+ Switch to your global gemset if you're using rvm:
8
+
9
+ $ rvm use @global
10
+
11
+ Install the gem:
12
+
13
+ $ gem install shuhari
14
+
15
+ ## Usage
16
+
17
+ Get help on shuhari commands:
18
+
19
+ $ shuhari help
20
+
21
+ Create your kata project:
22
+
23
+ $ shuhari new MyAwesomeKata
24
+
25
+ Bundle your gems:
26
+
27
+ $ cd my_awesome_kata
28
+ $ bundle
29
+
30
+ Start guard to run your tests automatically:
31
+
32
+ $ guard
33
+
34
+ Do your kata! Guard will monitor your files and run your tests automatically
35
+ whenever you make a change.
36
+
37
+ When you finish your kata:
38
+
39
+ $ shuhari empty
40
+
41
+ Your project is empty again (your tests and code are removed) and you can
42
+ restart your kata!
43
+
44
+ ## Contributing
45
+
46
+ 1. Fork it
47
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
48
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
49
+ 4. Push to the branch (`git push origin my-new-feature`)
50
+ 5. Create new Pull Request
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
+ require 'cucumber'
4
+ require 'cucumber/rake/task'
5
+
6
+ task :default => :features
7
+
8
+ Cucumber::Rake::Task.new :features
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ require "rubygems"
3
+ require "thor"
4
+
5
+ lib_dir = File.expand_path('../lib', File.dirname(__FILE__))
6
+ $:.unshift lib_dir unless $:.include? lib_dir
7
+
8
+ require "shuhari"
9
+
10
+ Shuhari::App.start
@@ -0,0 +1,11 @@
1
+ <%
2
+ std_opts = '--format progress'
3
+
4
+ platform_opts = case RUBY_PLATFORM
5
+ when /darwin/ then '--tags ~@linux --tags ~@windows'
6
+ when /linux/ then '--tags ~@osx --tags ~@windows'
7
+ when /win32/, /mingw32/ then '--tags ~@osx --tags ~@linux'
8
+ else '--tags ~@osx --tags ~@linux --tags ~@windows'
9
+ end
10
+ %>
11
+ default: <%= std_opts %> <%= platform_opts %>
@@ -0,0 +1,89 @@
1
+ Feature: Cucumber Kata Generation
2
+
3
+ Scenario: All Platforms
4
+ When I run `shuhari new FizzBuzz --cucumber`
5
+ Then a directory named "fizz_buzz" should exist
6
+ And the following files should exist:
7
+ |fizz_buzz/Gemfile |
8
+ |fizz_buzz/Guardfile |
9
+ |fizz_buzz/lib/fizz_buzz.rb |
10
+ |fizz_buzz/features/fizz_buzz.feature |
11
+ |fizz_buzz/features/support/env.rb |
12
+ |fizz_buzz/features/step_definitions/steps.rb |
13
+ |fizz_buzz/shuhari.yml |
14
+ And the file "fizz_buzz/features/fizz_buzz.feature" should contain:
15
+ """
16
+ Feature: Fizz Buzz
17
+ """
18
+ And the file "fizz_buzz/lib/fizz_buzz.rb" should contain:
19
+ """
20
+ class FizzBuzz
21
+ end
22
+ """
23
+ And the file "fizz_buzz/features/support/env.rb" should contain:
24
+ """
25
+ $LOAD_PATH.unshift File.expand_path('../../lib', File.dirname(__FILE__))
26
+
27
+ require 'fizz_buzz'
28
+ require 'rspec/expectations'
29
+ """
30
+ And the file "fizz_buzz/Guardfile" should contain:
31
+ """
32
+ guard 'cucumber' do
33
+ watch(%r{^lib/.+\.rb$}) { 'features' }
34
+ watch(%r{^features/.+\.feature$})
35
+ watch(%r{^features/(support|step_definitions)/.+$}) { 'features' }
36
+ end
37
+ """
38
+ And the file "fizz_buzz/shuhari.yml" should contain:
39
+ """
40
+ project_name: FizzBuzz
41
+ test_framework: cucumber
42
+ """
43
+
44
+ @osx
45
+ Scenario: OS X
46
+ When I run `shuhari new FizzBuzz --cucumber`
47
+ Then the file "fizz_buzz/Gemfile" should contain:
48
+ """
49
+ group :development do
50
+ gem 'cucumber'
51
+ gem 'rspec'
52
+ gem 'guard-cucumber'
53
+ gem 'coolline', :require => false
54
+ gem 'growl'
55
+ # gem 'growl_notify'
56
+ # gem 'ruby_gntp'
57
+ gem 'rb-fsevent'
58
+ end
59
+ """
60
+
61
+ @linux
62
+ Scenario: Linux
63
+ When I run `shuhari new FizzBuzz --cucumber`
64
+ Then the file "fizz_buzz/Gemfile" should contain:
65
+ """
66
+ group :development do
67
+ gem 'cucumber'
68
+ gem 'rspec'
69
+ gem 'guard-cucumber'
70
+ gem 'coolline', :require => false
71
+ gem 'libnotify'
72
+ gem 'rb-inotify'
73
+ end
74
+ """
75
+
76
+ @windows
77
+ Scenario: Windows
78
+ When I run `shuhari new FizzBuzz --cucumber`
79
+ Then the file "fizz_buzz/Gemfile" should contain:
80
+ """
81
+ group :development do
82
+ gem 'cucumber'
83
+ gem 'rspec'
84
+ gem 'guard-cucumber'
85
+ gem 'rb-notifu'
86
+ gem 'win32console'
87
+ gem 'wdm'
88
+ end
89
+ """
@@ -0,0 +1,41 @@
1
+ Feature: Getting Help
2
+
3
+ Scenario: General help
4
+ When I run `shuhari help`
5
+ Then the output should contain:
6
+ """
7
+ Tasks:
8
+ shuhari empty # Restart the Kata with empty mind and project
9
+ shuhari help [TASK] # Describe available tasks or one specific task
10
+ shuhari new [NAME] # Create a new Kata project
11
+ """
12
+
13
+ Scenario: Help about the "new" task
14
+ When I run `shuhari help new`
15
+ Then the output should contain:
16
+ """
17
+ Usage:
18
+ shuhari new [NAME]
19
+
20
+ Options:
21
+ -r, [--rspec] # Test using RSpec
22
+ # Default: true
23
+ -m, [--minitest] # Test using Minitest::Unit
24
+ -s, [--minitest-spec] # Test using Minitest::Spec
25
+ -t, [--testunit] # Test using Test::Unit
26
+ -c, [--cucumber] # Test using Cucumber
27
+ -g, [--gemset] # Create .rvmrc to use a gemset
28
+ # Default: true
29
+
30
+ Create a new Kata project
31
+ """
32
+
33
+ Scenario: Help about the "empty" task
34
+ When I run `shuhari help empty`
35
+ Then the output should contain:
36
+ """
37
+ Usage:
38
+ shuhari empty
39
+
40
+ Restart the Kata with empty mind and project
41
+ """
@@ -0,0 +1,89 @@
1
+ Feature: Minitest Kata Generation
2
+
3
+ Scenario: All Platforms
4
+ When I run `shuhari new FizzBuzz --minitest`
5
+ Then a directory named "fizz_buzz" should exist
6
+ And the following files should exist:
7
+ |fizz_buzz/Gemfile |
8
+ |fizz_buzz/Guardfile |
9
+ |fizz_buzz/lib/fizz_buzz.rb |
10
+ |fizz_buzz/test/test_helper.rb |
11
+ |fizz_buzz/test/test_fizz_buzz.rb |
12
+ |fizz_buzz/shuhari.yml |
13
+ And the file "fizz_buzz/test/test_fizz_buzz.rb" should contain:
14
+ """
15
+ require File.expand_path('test_helper', File.dirname(__FILE__))
16
+
17
+ class TestFizzBuzz < MiniTest::Unit::TestCase
18
+ end
19
+ """
20
+ And the file "fizz_buzz/lib/fizz_buzz.rb" should contain:
21
+ """
22
+ class FizzBuzz
23
+ end
24
+ """
25
+ And the file "fizz_buzz/test/test_helper.rb" should contain:
26
+ """
27
+ $LOAD_PATH.unshift File.expand_path('../lib', File.dirname(__FILE__))
28
+
29
+ require 'fizz_buzz'
30
+ require 'minitest/autorun'
31
+ require 'minitest/pride'
32
+ """
33
+ And the file "fizz_buzz/Guardfile" should contain:
34
+ """
35
+ guard 'minitest' do
36
+ watch(%r|^test/test_(.*)\.rb|)
37
+ watch(%r|^lib/(.*)\.rb|) { |m| "test/test_#{m[1]}.rb" }
38
+ watch(%r|^test/test_helper\.rb|) { "test" }
39
+ end
40
+ """
41
+ And the file "fizz_buzz/shuhari.yml" should contain:
42
+ """
43
+ project_name: FizzBuzz
44
+ test_framework: minitest
45
+ """
46
+
47
+ @osx
48
+ Scenario: OS X
49
+ When I run `shuhari new FizzBuzz --minitest`
50
+ Then the file "fizz_buzz/Gemfile" should contain:
51
+ """
52
+ group :development do
53
+ gem 'minitest'
54
+ gem 'guard-minitest'
55
+ gem 'coolline', :require => false
56
+ gem 'growl'
57
+ # gem 'growl_notify'
58
+ # gem 'ruby_gntp'
59
+ gem 'rb-fsevent'
60
+ end
61
+ """
62
+
63
+ @linux
64
+ Scenario: Linux
65
+ When I run `shuhari new FizzBuzz --minitest`
66
+ Then the file "fizz_buzz/Gemfile" should contain:
67
+ """
68
+ group :development do
69
+ gem 'minitest'
70
+ gem 'guard-minitest'
71
+ gem 'coolline', :require => false
72
+ gem 'libnotify'
73
+ gem 'rb-inotify'
74
+ end
75
+ """
76
+
77
+ @windows
78
+ Scenario: Windows
79
+ When I run `shuhari new FizzBuzz --minitest`
80
+ Then the file "fizz_buzz/Gemfile" should contain:
81
+ """
82
+ group :development do
83
+ gem 'minitest'
84
+ gem 'guard-minitest'
85
+ gem 'rb-notifu'
86
+ gem 'win32console'
87
+ gem 'wdm'
88
+ end
89
+ """
@@ -0,0 +1,89 @@
1
+ Feature: Minitest::Spec Kata Generation
2
+
3
+ Scenario: All Platforms
4
+ When I run `shuhari new FizzBuzz --minitest_spec`
5
+ Then a directory named "fizz_buzz" should exist
6
+ And the following files should exist:
7
+ |fizz_buzz/Gemfile |
8
+ |fizz_buzz/Guardfile |
9
+ |fizz_buzz/lib/fizz_buzz.rb |
10
+ |fizz_buzz/spec/spec_helper.rb |
11
+ |fizz_buzz/spec/fizz_buzz_spec.rb |
12
+ |fizz_buzz/shuhari.yml |
13
+ And the file "fizz_buzz/spec/fizz_buzz_spec.rb" should contain:
14
+ """
15
+ require File.expand_path('spec_helper', File.dirname(__FILE__))
16
+
17
+ describe FizzBuzz do
18
+ end
19
+ """
20
+ And the file "fizz_buzz/lib/fizz_buzz.rb" should contain:
21
+ """
22
+ class FizzBuzz
23
+ end
24
+ """
25
+ And the file "fizz_buzz/spec/spec_helper.rb" should contain:
26
+ """
27
+ $LOAD_PATH.unshift File.expand_path('../lib', File.dirname(__FILE__))
28
+
29
+ require 'fizz_buzz'
30
+ require 'minitest/autorun'
31
+ require 'minitest/pride'
32
+ """
33
+ And the file "fizz_buzz/Guardfile" should contain:
34
+ """
35
+ guard 'minitest' do
36
+ watch(%r|^spec/(.*)_spec\.rb|)
37
+ watch(%r|^lib/(.*)\.rb|) { |m| "spec/#{m[1]}_spec.rb" }
38
+ watch(%r|^spec/spec_helper\.rb|) { "spec" }
39
+ end
40
+ """
41
+ And the file "fizz_buzz/shuhari.yml" should contain:
42
+ """
43
+ project_name: FizzBuzz
44
+ test_framework: minitest_spec
45
+ """
46
+
47
+ @osx
48
+ Scenario: OS X
49
+ When I run `shuhari new FizzBuzz --minitest_spec`
50
+ Then the file "fizz_buzz/Gemfile" should contain:
51
+ """
52
+ group :development do
53
+ gem 'minitest'
54
+ gem 'guard-minitest'
55
+ gem 'coolline', :require => false
56
+ gem 'growl'
57
+ # gem 'growl_notify'
58
+ # gem 'ruby_gntp'
59
+ gem 'rb-fsevent'
60
+ end
61
+ """
62
+
63
+ @linux
64
+ Scenario: Linux
65
+ When I run `shuhari new FizzBuzz --minitest_spec`
66
+ Then the file "fizz_buzz/Gemfile" should contain:
67
+ """
68
+ group :development do
69
+ gem 'minitest'
70
+ gem 'guard-minitest'
71
+ gem 'coolline', :require => false
72
+ gem 'libnotify'
73
+ gem 'rb-inotify'
74
+ end
75
+ """
76
+
77
+ @windows
78
+ Scenario: Windows
79
+ When I run `shuhari new FizzBuzz --minitest_spec`
80
+ Then the file "fizz_buzz/Gemfile" should contain:
81
+ """
82
+ group :development do
83
+ gem 'minitest'
84
+ gem 'guard-minitest'
85
+ gem 'rb-notifu'
86
+ gem 'win32console'
87
+ gem 'wdm'
88
+ end
89
+ """
@@ -0,0 +1,93 @@
1
+ Feature: RSpec Kata Generation
2
+
3
+ Scenario: All Platforms
4
+ When I run `shuhari new FizzBuzz --rspec`
5
+ Then a directory named "fizz_buzz" should exist
6
+ And the following files should exist:
7
+ |fizz_buzz/Gemfile |
8
+ |fizz_buzz/Guardfile |
9
+ |fizz_buzz/lib/fizz_buzz.rb |
10
+ |fizz_buzz/spec/spec_helper.rb |
11
+ |fizz_buzz/spec/fizz_buzz_spec.rb |
12
+ |fizz_buzz/shuhari.yml |
13
+ And the file "fizz_buzz/spec/fizz_buzz_spec.rb" should contain:
14
+ """
15
+ require 'spec_helper'
16
+
17
+ describe FizzBuzz do
18
+ end
19
+ """
20
+ And the file "fizz_buzz/lib/fizz_buzz.rb" should contain:
21
+ """
22
+ class FizzBuzz
23
+ end
24
+ """
25
+ And the file "fizz_buzz/spec/spec_helper.rb" should contain:
26
+ """
27
+ require 'fizz_buzz'
28
+ require 'rspec'
29
+
30
+ # Requires supporting files with custom matchers and macros, etc,
31
+ # in ./support/ and its subdirectories.
32
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
33
+
34
+ RSpec.configure do |config|
35
+ end
36
+ """
37
+ And the file "fizz_buzz/Guardfile" should contain:
38
+ """
39
+ guard 'rspec', :version => 2 do
40
+ watch(%r{^spec/.+_spec\.rb$})
41
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
42
+ watch('spec/spec_helper.rb') { "spec/" }
43
+ end
44
+ """
45
+ And the file "fizz_buzz/shuhari.yml" should contain:
46
+ """
47
+ project_name: FizzBuzz
48
+ test_framework: rspec
49
+ """
50
+
51
+ @osx
52
+ Scenario: OS X
53
+ When I run `shuhari new FizzBuzz --rspec`
54
+ Then the file "fizz_buzz/Gemfile" should contain:
55
+ """
56
+ group :development do
57
+ gem 'rspec'
58
+ gem 'guard-rspec'
59
+ gem 'coolline', :require => false
60
+ gem 'growl'
61
+ # gem 'growl_notify'
62
+ # gem 'ruby_gntp'
63
+ gem 'rb-fsevent'
64
+ end
65
+ """
66
+
67
+ @linux
68
+ Scenario: Linux
69
+ When I run `shuhari new FizzBuzz --rspec`
70
+ Then the file "fizz_buzz/Gemfile" should contain:
71
+ """
72
+ group :development do
73
+ gem 'rspec'
74
+ gem 'guard-rspec'
75
+ gem 'coolline', :require => false
76
+ gem 'libnotify'
77
+ gem 'rb-inotify'
78
+ end
79
+ """
80
+
81
+ @windows
82
+ Scenario: Windows
83
+ When I run `shuhari new FizzBuzz --rspec`
84
+ Then the file "fizz_buzz/Gemfile" should contain:
85
+ """
86
+ group :development do
87
+ gem 'rspec'
88
+ gem 'guard-rspec'
89
+ gem 'rb-notifu'
90
+ gem 'win32console'
91
+ gem 'wdm'
92
+ end
93
+ """
@@ -0,0 +1,5 @@
1
+ # This step was copied verbatim from the aruba master branch but it's not yet
2
+ # in the released gem as of version 0.4.11
3
+ Then /^the file "([^"]*)" should contain:$/ do |file, partial_content|
4
+ check_file_content(file, partial_content, true)
5
+ end
@@ -0,0 +1,3 @@
1
+ require 'shuhari'
2
+ require 'aruba/cucumber'
3
+ require 'rspec/expectations'
@@ -0,0 +1,88 @@
1
+ Feature: Test::Unit Kata Generation
2
+
3
+ Scenario: All Platforms
4
+ When I run `shuhari new FizzBuzz --testunit`
5
+ Then a directory named "fizz_buzz" should exist
6
+ And the following files should exist:
7
+ |fizz_buzz/Gemfile |
8
+ |fizz_buzz/Guardfile |
9
+ |fizz_buzz/lib/fizz_buzz.rb |
10
+ |fizz_buzz/test/test_helper.rb |
11
+ |fizz_buzz/test/fizz_buzz_test.rb |
12
+ |fizz_buzz/shuhari.yml |
13
+ And the file "fizz_buzz/test/fizz_buzz_test.rb" should contain:
14
+ """
15
+ require 'test_helper'
16
+
17
+ class FizzBuzzTest < Test::Unit::TestCase
18
+ end
19
+ """
20
+ And the file "fizz_buzz/lib/fizz_buzz.rb" should contain:
21
+ """
22
+ class FizzBuzz
23
+ end
24
+ """
25
+ And the file "fizz_buzz/test/test_helper.rb" should contain:
26
+ """
27
+ $LOAD_PATH.unshift File.expand_path('../lib', File.dirname(__FILE__))
28
+
29
+ require 'fizz_buzz'
30
+ require 'test/unit'
31
+ """
32
+ And the file "fizz_buzz/Guardfile" should contain:
33
+ """
34
+ guard :test do
35
+ watch(%r{^lib/(.+)\.rb$}) { |m| "test/#{m[1]}_test.rb" }
36
+ watch(%r{^test/.+_test\.rb$})
37
+ watch('test/test_helper.rb') { "test" }
38
+ end
39
+ """
40
+ And the file "fizz_buzz/shuhari.yml" should contain:
41
+ """
42
+ project_name: FizzBuzz
43
+ test_framework: testunit
44
+ """
45
+
46
+ @osx
47
+ Scenario: OS X
48
+ When I run `shuhari new FizzBuzz --testunit`
49
+ Then the file "fizz_buzz/Gemfile" should contain:
50
+ """
51
+ group :development do
52
+ gem 'test-unit'
53
+ gem 'guard-test'
54
+ gem 'coolline', :require => false
55
+ gem 'growl'
56
+ # gem 'growl_notify'
57
+ # gem 'ruby_gntp'
58
+ gem 'rb-fsevent'
59
+ end
60
+ """
61
+
62
+ @linux
63
+ Scenario: Linux
64
+ When I run `shuhari new FizzBuzz --testunit`
65
+ Then the file "fizz_buzz/Gemfile" should contain:
66
+ """
67
+ group :development do
68
+ gem 'test-unit'
69
+ gem 'guard-test'
70
+ gem 'coolline', :require => false
71
+ gem 'libnotify'
72
+ gem 'rb-inotify'
73
+ end
74
+ """
75
+
76
+ @windows
77
+ Scenario: Windows
78
+ When I run `shuhari new FizzBuzz --testunit`
79
+ Then the file "fizz_buzz/Gemfile" should contain:
80
+ """
81
+ group :development do
82
+ gem 'test-unit'
83
+ gem 'guard-test'
84
+ gem 'rb-notifu'
85
+ gem 'win32console'
86
+ gem 'wdm'
87
+ end
88
+ """
@@ -0,0 +1,9 @@
1
+ module Shuhari
2
+
3
+ PROJECT_ROOT = File.expand_path('..', File.dirname(__FILE__))
4
+
5
+ autoload :App, 'shuhari/app'
6
+ autoload :Platform, 'shuhari/platform'
7
+ autoload :PlatformGems, 'shuhari/platform_gems'
8
+ autoload :ProjectGeneration, 'shuhari/project_generation'
9
+ end
@@ -0,0 +1,87 @@
1
+ require 'thor'
2
+ require 'shuhari'
3
+
4
+ module Shuhari
5
+ class App < Thor
6
+ include Thor::Actions
7
+ include ProjectGeneration
8
+
9
+ desc 'new [NAME]', 'Create a new Kata project'
10
+
11
+ method_option :rspec, :type => :boolean, :aliases => '-r',
12
+ :desc => 'Test using RSpec', :default => true
13
+
14
+ method_option :minitest, :type => :boolean, :aliases => '-m',
15
+ :desc => 'Test using Minitest::Unit'
16
+
17
+ method_option :minitest_spec, :type => :boolean, :aliases => '-s',
18
+ :desc => 'Test using Minitest::Spec'
19
+
20
+ method_option :testunit, :type => :boolean, :aliases => '-t',
21
+ :desc => 'Test using Test::Unit'
22
+
23
+ method_option :cucumber, :type => :boolean, :aliases => '-c',
24
+ :desc => 'Test using Cucumber'
25
+
26
+ if Platform.unix?
27
+ method_option :gemset, :type => :boolean, :aliases => '-g',
28
+ :desc => 'Create .rvmrc to use a gemset', :default => Platform.rvm?
29
+ end
30
+
31
+ def new(name=nil)
32
+ @name = name || ask('Project Name:')
33
+ setup_source_paths
34
+ inside snake_name, :verbose => true do
35
+ self.destination_root = '.'
36
+ create_project
37
+ end
38
+ end
39
+
40
+ desc 'empty', 'Restart the Kata with empty mind and project'
41
+ def empty
42
+ @name = load_setting(:project_name)
43
+ @framework = load_setting(:test_framework)
44
+ clean_project
45
+ setup_source_paths
46
+ setup_code
47
+ end
48
+
49
+ protected
50
+
51
+ def load_setting(name)
52
+ require 'yaml'
53
+ @settings ||= YAML.load_file('shuhari.yml')
54
+ @settings[name.to_s] or raise Thor::Error, "#{name} missing from shuhari.yml"
55
+ end
56
+
57
+ def setup_source_paths
58
+ ['base', framework].each do |sub|
59
+ source_paths << File.join(PROJECT_ROOT, 'templates', sub)
60
+ end
61
+ end
62
+
63
+ attr_accessor :name
64
+
65
+ def camel_name
66
+ @camel_name ||= Util.camel_case(name)
67
+ end
68
+
69
+ def snake_name
70
+ @snake_name ||= Util.snake_case(name)
71
+ end
72
+
73
+ def human_name
74
+ @human_name ||= snake_name.split('_').map { |i| i.capitalize }.join(' ')
75
+ end
76
+
77
+ def framework
78
+ @framework ||= %w(
79
+ minitest minitest_spec testunit cucumber rspec
80
+ ).find { |f| options[f.to_sym] }
81
+ end
82
+
83
+ def gemset
84
+ options[:gemset] && "#{snake_name}_kata"
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,32 @@
1
+ require 'shuhari'
2
+
3
+ module Shuhari
4
+ module Platform
5
+
6
+ module_function
7
+
8
+ def rvm?
9
+ !`which rvm`.empty?
10
+ end
11
+
12
+ def unix?
13
+ osx? or linux?
14
+ end
15
+
16
+ def osx?
17
+ os == :osx
18
+ end
19
+
20
+ def linux?
21
+ os == :linux
22
+ end
23
+
24
+ def os
25
+ @os ||= case RUBY_PLATFORM
26
+ when /darwin/ then :osx
27
+ when /linux/ then :linux
28
+ when /win32/, /mingw32/ then :windows
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,41 @@
1
+ require 'shuhari'
2
+
3
+ module Shuhari
4
+ module PlatformGems
5
+
6
+ protected
7
+
8
+ def osx_gems
9
+ unix_gems +
10
+ [ "gem 'growl'",
11
+ "# gem 'growl_notify'",
12
+ "# gem 'ruby_gntp'",
13
+ "gem 'rb-fsevent'" ]
14
+ end
15
+
16
+ def linux_gems
17
+ unix_gems +
18
+ [ "gem 'libnotify'",
19
+ "gem 'rb-inotify'" ]
20
+ end
21
+
22
+ def unix_gems
23
+ [ "gem 'coolline', :require => false" ]
24
+ end
25
+
26
+ def windows_gems
27
+ [ "gem 'rb-notifu'",
28
+ "gem 'win32console'",
29
+ "gem 'wdm'" ]
30
+ end
31
+
32
+ def platform_gems
33
+ case Platform.os
34
+ when :osx then osx_gems
35
+ when :linux then linux_gems
36
+ when :windows then windows_gems
37
+ else []
38
+ end.join "\n "
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,58 @@
1
+ require 'thor'
2
+
3
+ module Shuhari
4
+ module ProjectGeneration
5
+ include Thor::Actions
6
+ include PlatformGems
7
+
8
+ protected
9
+
10
+ def create_project
11
+ template 'Gemfile.tt'
12
+ copy_file 'Guardfile'
13
+ setup_code
14
+ template 'shuhari.yml.tt'
15
+ template '.rvmrc.tt' if gemset
16
+ end
17
+
18
+ def setup_code
19
+ inside('lib') { template 'kata.rb.tt', "#{snake_name}.rb" }
20
+ inside(test_directory) { send :"setup_#{framework}" }
21
+ end
22
+
23
+ def setup_rspec
24
+ template 'spec_helper.rb.tt'
25
+ template 'kata_spec.rb.tt', "#{snake_name}_spec.rb"
26
+ end
27
+
28
+ def setup_minitest
29
+ template 'test_helper.rb.tt'
30
+ template 'test_kata.rb.tt', "test_#{snake_name}.rb"
31
+ end
32
+
33
+ alias_method :setup_minitest_spec, :setup_rspec
34
+
35
+ def setup_testunit
36
+ template 'test_helper.rb.tt'
37
+ template 'kata_test.rb.tt', "#{snake_name}_test.rb"
38
+ end
39
+
40
+ def setup_cucumber
41
+ inside('support') { template 'env.rb.tt' }
42
+ directory 'step_definitions'
43
+ template 'kata.feature.tt', "#{snake_name}.feature"
44
+ end
45
+
46
+ def clean_project
47
+ ['lib', test_directory].each { |dir| remove_dir dir }
48
+ end
49
+
50
+ def test_directory
51
+ case framework
52
+ when 'rspec', 'minitest_spec' then 'spec'
53
+ when 'cucumber' then 'features'
54
+ else 'test'
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,3 @@
1
+ module Shuhari
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,19 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/shuhari/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Jason Arhart"]
6
+ gem.email = ["jarhart@gmail.com"]
7
+ gem.description = %q{Shuhari generates new projects for doing TDD Kata.}
8
+ gem.summary = %q{TDD Kata project generator}
9
+ gem.homepage = ""
10
+
11
+ gem.files = `git ls-files`.split($\)
12
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
+ gem.name = "shuhari"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = Shuhari::VERSION
17
+
18
+ gem.add_dependency "thor", "~> 0.14"
19
+ end
@@ -0,0 +1 @@
1
+ rvm use @<%= gemset %> --create
@@ -0,0 +1,2 @@
1
+ class <%= camel_name %>
2
+ end
@@ -0,0 +1,2 @@
1
+ project_name: <%= camel_name %>
2
+ test_framework: <%= framework %>
@@ -0,0 +1,8 @@
1
+ source :rubygems
2
+
3
+ group :development do
4
+ gem 'cucumber'
5
+ gem 'rspec'
6
+ gem 'guard-cucumber'
7
+ <%= platform_gems %>
8
+ end
@@ -0,0 +1,5 @@
1
+ guard 'cucumber' do
2
+ watch(%r{^lib/.+\.rb$}) { 'features' }
3
+ watch(%r{^features/.+\.feature$})
4
+ watch(%r{^features/(support|step_definitions)/.+$}) { 'features' }
5
+ end
@@ -0,0 +1 @@
1
+ Feature: <%= human_name %>
@@ -0,0 +1,4 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../lib', File.dirname(__FILE__))
2
+
3
+ require '<%= snake_name %>'
4
+ require 'rspec/expectations'
@@ -0,0 +1,7 @@
1
+ source :rubygems
2
+
3
+ group :development do
4
+ gem 'minitest'
5
+ gem 'guard-minitest'
6
+ <%= platform_gems %>
7
+ end
@@ -0,0 +1,5 @@
1
+ guard 'minitest' do
2
+ watch(%r|^test/test_(.*)\.rb|)
3
+ watch(%r|^lib/(.*)\.rb|) { |m| "test/test_#{m[1]}.rb" }
4
+ watch(%r|^test/test_helper\.rb|) { "test" }
5
+ end
@@ -0,0 +1,5 @@
1
+ $LOAD_PATH.unshift File.expand_path('../lib', File.dirname(__FILE__))
2
+
3
+ require '<%= snake_name %>'
4
+ require 'minitest/autorun'
5
+ require 'minitest/pride'
@@ -0,0 +1,4 @@
1
+ require File.expand_path('test_helper', File.dirname(__FILE__))
2
+
3
+ class Test<%= camel_name %> < MiniTest::Unit::TestCase
4
+ end
@@ -0,0 +1,7 @@
1
+ source :rubygems
2
+
3
+ group :development do
4
+ gem 'minitest'
5
+ gem 'guard-minitest'
6
+ <%= platform_gems %>
7
+ end
@@ -0,0 +1,5 @@
1
+ guard 'minitest' do
2
+ watch(%r|^spec/(.*)_spec\.rb|)
3
+ watch(%r|^lib/(.*)\.rb|) { |m| "spec/#{m[1]}_spec.rb" }
4
+ watch(%r|^spec/spec_helper\.rb|) { "spec" }
5
+ end
@@ -0,0 +1,4 @@
1
+ require File.expand_path('spec_helper', File.dirname(__FILE__))
2
+
3
+ describe <%= camel_name %> do
4
+ end
@@ -0,0 +1,5 @@
1
+ $LOAD_PATH.unshift File.expand_path('../lib', File.dirname(__FILE__))
2
+
3
+ require '<%= snake_name %>'
4
+ require 'minitest/autorun'
5
+ require 'minitest/pride'
@@ -0,0 +1,7 @@
1
+ source :rubygems
2
+
3
+ group :development do
4
+ gem 'rspec'
5
+ gem 'guard-rspec'
6
+ <%= platform_gems %>
7
+ end
@@ -0,0 +1,5 @@
1
+ guard 'rspec', :version => 2 do
2
+ watch(%r{^spec/.+_spec\.rb$})
3
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
4
+ watch('spec/spec_helper.rb') { "spec/" }
5
+ end
@@ -0,0 +1,4 @@
1
+ require 'spec_helper'
2
+
3
+ describe <%= camel_name %> do
4
+ end
@@ -0,0 +1,9 @@
1
+ require '<%= snake_name %>'
2
+ require 'rspec'
3
+
4
+ # Requires supporting files with custom matchers and macros, etc,
5
+ # in ./support/ and its subdirectories.
6
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
7
+
8
+ RSpec.configure do |config|
9
+ end
@@ -0,0 +1,7 @@
1
+ source :rubygems
2
+
3
+ group :development do
4
+ gem 'test-unit'
5
+ gem 'guard-test'
6
+ <%= platform_gems %>
7
+ end
@@ -0,0 +1,5 @@
1
+ guard :test do
2
+ watch(%r{^lib/(.+)\.rb$}) { |m| "test/#{m[1]}_test.rb" }
3
+ watch(%r{^test/.+_test\.rb$})
4
+ watch('test/test_helper.rb') { "test" }
5
+ end
@@ -0,0 +1,4 @@
1
+ require 'test_helper'
2
+
3
+ class <%= camel_name %>Test < Test::Unit::TestCase
4
+ end
@@ -0,0 +1,4 @@
1
+ $LOAD_PATH.unshift File.expand_path('../lib', File.dirname(__FILE__))
2
+
3
+ require '<%= snake_name %>'
4
+ require 'test/unit'
metadata ADDED
@@ -0,0 +1,119 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: shuhari
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Jason Arhart
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-09-04 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: thor
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '0.14'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '0.14'
30
+ description: Shuhari generates new projects for doing TDD Kata.
31
+ email:
32
+ - jarhart@gmail.com
33
+ executables:
34
+ - shuhari
35
+ extensions: []
36
+ extra_rdoc_files: []
37
+ files:
38
+ - .gitignore
39
+ - Gemfile
40
+ - Gemfile.lock
41
+ - Guardfile
42
+ - LICENSE
43
+ - README.md
44
+ - Rakefile
45
+ - bin/shuhari
46
+ - cucumber.yml
47
+ - features/cucumber_kata.feature
48
+ - features/getting_help.feature
49
+ - features/minitest_kata.feature
50
+ - features/minitest_spec_kata.feature
51
+ - features/rspec_kata.feature
52
+ - features/step_definitions/steps.rb
53
+ - features/support/env.rb
54
+ - features/testunit_kata.feature
55
+ - lib/shuhari.rb
56
+ - lib/shuhari/app.rb
57
+ - lib/shuhari/platform.rb
58
+ - lib/shuhari/platform_gems.rb
59
+ - lib/shuhari/project_generation.rb
60
+ - lib/shuhari/version.rb
61
+ - shuhari.gemspec
62
+ - templates/base/.rvmrc.tt
63
+ - templates/base/lib/kata.rb.tt
64
+ - templates/base/shuhari.yml.tt
65
+ - templates/cucumber/Gemfile.tt
66
+ - templates/cucumber/Guardfile
67
+ - templates/cucumber/features/kata.feature.tt
68
+ - templates/cucumber/features/step_definitions/steps.rb
69
+ - templates/cucumber/features/support/env.rb.tt
70
+ - templates/minitest/Gemfile.tt
71
+ - templates/minitest/Guardfile
72
+ - templates/minitest/test/test_helper.rb.tt
73
+ - templates/minitest/test/test_kata.rb.tt
74
+ - templates/minitest_spec/Gemfile.tt
75
+ - templates/minitest_spec/Guardfile
76
+ - templates/minitest_spec/spec/kata_spec.rb.tt
77
+ - templates/minitest_spec/spec/spec_helper.rb.tt
78
+ - templates/rspec/Gemfile.tt
79
+ - templates/rspec/Guardfile
80
+ - templates/rspec/spec/kata_spec.rb.tt
81
+ - templates/rspec/spec/spec_helper.rb.tt
82
+ - templates/testunit/Gemfile.tt
83
+ - templates/testunit/Guardfile
84
+ - templates/testunit/test/kata_test.rb.tt
85
+ - templates/testunit/test/test_helper.rb.tt
86
+ homepage: ''
87
+ licenses: []
88
+ post_install_message:
89
+ rdoc_options: []
90
+ require_paths:
91
+ - lib
92
+ required_ruby_version: !ruby/object:Gem::Requirement
93
+ none: false
94
+ requirements:
95
+ - - ! '>='
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ required_rubygems_version: !ruby/object:Gem::Requirement
99
+ none: false
100
+ requirements:
101
+ - - ! '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ requirements: []
105
+ rubyforge_project:
106
+ rubygems_version: 1.8.24
107
+ signing_key:
108
+ specification_version: 3
109
+ summary: TDD Kata project generator
110
+ test_files:
111
+ - features/cucumber_kata.feature
112
+ - features/getting_help.feature
113
+ - features/minitest_kata.feature
114
+ - features/minitest_spec_kata.feature
115
+ - features/rspec_kata.feature
116
+ - features/step_definitions/steps.rb
117
+ - features/support/env.rb
118
+ - features/testunit_kata.feature
119
+ has_rdoc: