shubox 0.9

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 (58) hide show
  1. data/History.txt +57 -0
  2. data/MIT-LICENSE +22 -0
  3. data/Manifest.txt +57 -0
  4. data/PostInstall.txt +6 -0
  5. data/README.rdoc +128 -0
  6. data/Rakefile +61 -0
  7. data/app_generators/clojure/USAGE +15 -0
  8. data/app_generators/clojure/clojure_generator.rb +46 -0
  9. data/app_generators/clojure/templates/README.rdoc +29 -0
  10. data/app_generators/clojure/templates/bin/repl.sh +3 -0
  11. data/app_generators/clojure/templates/bin/runtests.sh +3 -0
  12. data/app_generators/clojure/templates/lib/clojure-contrib.jar +0 -0
  13. data/app_generators/clojure/templates/lib/clojure.jar +0 -0
  14. data/app_generators/clojure/templates/lib/jline-0.9.94.jar +0 -0
  15. data/app_generators/clojure/templates/project.iml +19 -0
  16. data/app_generators/clojure/templates/project.ipr +261 -0
  17. data/app_generators/clojure/templates/src/repl.clj +3 -0
  18. data/app_generators/clojure/templates/test/core/about_clojure_testing.clj +21 -0
  19. data/app_generators/clojure/templates/test/core/about_forms.clj +22 -0
  20. data/app_generators/clojure/templates/test/tests.clj +11 -0
  21. data/app_generators/java/USAGE +14 -0
  22. data/app_generators/java/java_generator.rb +39 -0
  23. data/app_generators/java/templates/Greeting.java +24 -0
  24. data/app_generators/java/templates/GreetingTest.java +18 -0
  25. data/app_generators/java/templates/build.xml +55 -0
  26. data/app_generators/java/templates/lib/hamcrest-core.jar +0 -0
  27. data/app_generators/java/templates/lib/junit.jar +0 -0
  28. data/app_generators/java/templates/project.iml +22 -0
  29. data/app_generators/java/templates/project.ipr +259 -0
  30. data/app_generators/ruby/USAGE +12 -0
  31. data/app_generators/ruby/ruby_generator.rb +37 -0
  32. data/app_generators/ruby/templates/file.txt +3 -0
  33. data/app_generators/ruby/templates/rakefile.rb +9 -0
  34. data/app_generators/ruby/templates/right_triangle.rb +18 -0
  35. data/app_generators/ruby/templates/shubox.rb +6 -0
  36. data/app_generators/ruby/templates/test_helper.rb +9 -0
  37. data/app_generators/ruby/templates/test_io.rb +15 -0
  38. data/app_generators/ruby/templates/test_right_triangle.rb +21 -0
  39. data/bin/shubox +24 -0
  40. data/cleaner_generators/test_unit_cleaner/USAGE +7 -0
  41. data/cleaner_generators/test_unit_cleaner/lib/test_unit_cleaner.rb +93 -0
  42. data/cleaner_generators/test_unit_cleaner/templates/clean_test_unit +12 -0
  43. data/cleaner_generators/test_unit_cleaner/templates/filter_test_unit +13 -0
  44. data/cleaner_generators/test_unit_cleaner/test_unit_cleaner_generator.rb +27 -0
  45. data/lib/languages.rb +20 -0
  46. data/lib/shubox.rb +11 -0
  47. data/lib/shubox_app_generator.rb +40 -0
  48. data/script/console +10 -0
  49. data/script/destroy +14 -0
  50. data/script/generate +14 -0
  51. data/test/cleaners/test_test_unit_cleaner.rb +111 -0
  52. data/test/generators/test_clojure_generator.rb +44 -0
  53. data/test/generators/test_java_generator.rb +37 -0
  54. data/test/generators/test_ruby_generator.rb +34 -0
  55. data/test/lib/test_languages.rb +38 -0
  56. data/test/test_generator_helper.rb +72 -0
  57. data/test/test_helper.rb +4 -0
  58. metadata +144 -0
@@ -0,0 +1,7 @@
1
+ USAGE: test_unit_cleaner path/to/file
2
+
3
+ Give the test files a clean sweep to retest yourself.
4
+ Deletes the method bodies from all tests in the specified file,
5
+ a clean sweep to retest yourself. If file is a directory,
6
+ all tests in the directory matching the pattern
7
+ path/to/file/test/**/test_*.rb will be affected.
@@ -0,0 +1,93 @@
1
+ module Shubox
2
+ class TestUnitCleaner
3
+
4
+ attr_reader :class_pattern
5
+ attr_reader :test_pattern
6
+ attr_reader :test_file_path
7
+ attr_reader :ending
8
+
9
+ attr_reader :koan_pattern
10
+ attr_reader :koan_file_path
11
+
12
+ def initialize
13
+ @class_pattern = /class [a-zA-Z]\S* < Test::Unit::TestCase/
14
+ @test_pattern = /^\s*def test_/
15
+ @test_file_path = "/test/**/test_*.rb"
16
+ @ending = "end"
17
+
18
+ # Support for github.com/edgecase/ruby_koans
19
+ @koan_pattern = /class [a-zA-Z]\S* < EdgeCase::Koan/
20
+ @koan_file_path = "/test/**/about_*.rb"
21
+ end
22
+
23
+ def run(args)
24
+ target = args.first
25
+ return usage if empty_or_help?(target)
26
+
27
+ if File.file?(target)
28
+ clean_file(target)
29
+ else
30
+ clean_directory(target)
31
+ end
32
+ end
33
+
34
+ def clean_class(lines)
35
+ output = []
36
+ outside_class = true
37
+
38
+ lines.each do |line|
39
+ if (outside_class || comment?(line))
40
+ output << line
41
+ elsif (start_of_test?(line))
42
+ output << line
43
+ output << " #{@ending}\n"
44
+ end
45
+
46
+ if (start_of_class?(line))
47
+ outside_class = false
48
+ end
49
+ end
50
+ output << @ending
51
+ output.join
52
+ end
53
+
54
+ def comment?(line)
55
+ (line =~ /^\s*#/ || line =~ /^\s*$/)
56
+ end
57
+
58
+ def empty_or_help?(input)
59
+ return (input.nil? || input.empty? || %w(-h --help).include?(input))
60
+ end
61
+
62
+ def usage
63
+ usage_file = File.dirname(__FILE__) + "/../USAGE"
64
+ return File.readlines(usage_file)
65
+ end
66
+
67
+ private
68
+ def start_of_class?(line)
69
+ (@class_pattern =~ line || @koan_pattern =~ line)
70
+ end
71
+
72
+ def start_of_test?(line)
73
+ @test_pattern =~ line
74
+ end
75
+
76
+ def clean_directory(dir)
77
+ Dir[dir + @test_file_path].each { |file| clean_file(file) }
78
+ Dir[dir + @koan_file_path].each { |file| clean_file(file) }
79
+ end
80
+
81
+ def clean_file(filename)
82
+ return if /test_helper.rb/ =~ filename
83
+ puts "cleaning: #{filename}"
84
+
85
+ lines = File.readlines(filename)
86
+ output = clean_class(lines)
87
+
88
+ open(filename, 'w') do |f|
89
+ f.puts output
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ begin
4
+ require 'shubox'
5
+ rescue LoadError
6
+ require 'rubygems'
7
+ require 'shubox'
8
+ end
9
+
10
+ require 'test_unit_cleaner/lib/test_unit_cleaner'
11
+
12
+ puts Shubox::TestUnitCleaner.new.run(ARGV)
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ begin
4
+ require 'shubox'
5
+ rescue LoadError
6
+ require 'rubygems'
7
+ require 'shubox'
8
+ end
9
+
10
+ require 'test_unit_cleaner/lib/test_unit_cleaner'
11
+
12
+ doc = ARGF.readlines
13
+ puts Shubox::TestUnitCleaner.new.clean_class(doc)
@@ -0,0 +1,27 @@
1
+ class TestUnitCleanerGenerator < RubiGen::Base
2
+
3
+ def initialize(runtime_args, runtime_options = {})
4
+ super
5
+ @destination_root = File.expand_path(destination_root)
6
+ end
7
+
8
+ def manifest
9
+ script_options = { :chmod => 0755 }
10
+
11
+ record do |m|
12
+ m.directory 'script'
13
+ m.file "clean_test_unit", "script/clean_test_unit", script_options
14
+ m.file "filter_test_unit", "script/filter_test_unit", script_options
15
+ end
16
+ end
17
+
18
+ protected
19
+ def banner
20
+ <<-EOS
21
+ Install a cleaner for Test::Unit tests.
22
+
23
+ Deletes all method bodies in the tests.
24
+
25
+ EOS
26
+ end
27
+ end
@@ -0,0 +1,20 @@
1
+ class Languages
2
+ def self.parse(args)
3
+ lang = args.find {|arg| ((arg =~ /-l=/) or (arg =~ /--language=/)) }
4
+ lang ||= "-l=ruby"
5
+ lang = lang.split('=')[1]
6
+ raise "Supported languages: #{current.inspect}" if (!current.member?(lang))
7
+ lang
8
+ end
9
+
10
+ def self.current
11
+ langs = Dir.entries(File.join(File.dirname(__FILE__), "../app_generators"))
12
+ langs.reject {|i| ((i == ".") or (i == ".."))}
13
+ end
14
+
15
+ def self.print
16
+ list = ""
17
+ current.each {|lang| list << lang << '|'}
18
+ list.chomp('|')
19
+ end
20
+ end
@@ -0,0 +1,11 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ $:.unshift(File.dirname(__FILE__) + '/../cleaner_generators') unless
5
+ $:.include?(File.dirname(__FILE__) + '/../cleaner_generators') || $:.include?(File.expand_path(File.dirname(__FILE__) + '../cleaner_generators'))
6
+
7
+ module Shubox
8
+ VERSION = '0.9'
9
+ end
10
+
11
+ require 'test_unit_cleaner/lib/test_unit_cleaner'
@@ -0,0 +1,40 @@
1
+ class ShuboxAppGenerator < RubiGen::Base
2
+
3
+ DEFAULT_SHEBANG = File.join(Config::CONFIG['bindir'],
4
+ Config::CONFIG['ruby_install_name'])
5
+
6
+ default_options :language => 'ruby'
7
+
8
+ attr_reader :language
9
+ attr_reader :name
10
+
11
+ def initialize(runtime_args, runtime_options = {})
12
+ super
13
+ usage if args.empty?
14
+ @destination_root = File.expand_path(args.shift)
15
+ @name = base_name
16
+ extract_options
17
+ end
18
+
19
+ protected
20
+
21
+ def banner
22
+ "\n" << IO.readlines(File.join(File.dirname(__FILE__), "../README.rdoc"))[0]
23
+ end
24
+
25
+ def add_options!(opts)
26
+ opts.separator ''
27
+ opts.separator 'Options:'
28
+ # For each option below, place the default
29
+ # at the top of the file next to "default_options"
30
+ # opts.on("-a", "--author=\"Your Name\"", String,
31
+ # "Some comment about this option",
32
+ # "Default: none") { |o| options[:author] = o }
33
+ opts.on("-l", "--language=name", "Language of the environment to generate. Options: #{Languages.print}", "Default: ruby")
34
+ opts.on("-v", "--version", "Show the #{File.basename($0)} version number and quit.")
35
+ end
36
+
37
+ def extract_options
38
+ @language = options[:language]
39
+ end
40
+ end
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ # File: script/console
3
+ irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
4
+
5
+ libs = " -r irb/completion"
6
+ # Perhaps use a console_lib to store any extra methods I may want available in the cosole
7
+ # libs << " -r #{File.dirname(__FILE__) + '/../lib/console_lib/console_logger.rb'}"
8
+ libs << " -r #{File.dirname(__FILE__) + '/../lib/shubox.rb'}"
9
+ puts "Loading shubox gem"
10
+ exec "#{irb} #{libs} --simple-prompt"
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/destroy'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Destroy.new.run(ARGV)
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/generate'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Generate.new.run(ARGV)
@@ -0,0 +1,111 @@
1
+ require File.join(File.dirname(__FILE__), "..", "test_generator_helper.rb")
2
+ require File.join(File.dirname(__FILE__), '..', '..', 'cleaner_generators', 'test_unit_cleaner', 'lib', 'test_unit_cleaner')
3
+ require 'fileutils'
4
+ require 'languages'
5
+
6
+ class TestTestUnitCleaner < Test::Unit::TestCase
7
+ include RubiGen::GeneratorTestHelper
8
+
9
+ def setup
10
+ bare_setup
11
+ run_generator('ruby', [APP_ROOT], sources)
12
+ end
13
+
14
+ def teardown
15
+ bare_teardown
16
+ end
17
+
18
+ def test_display_usage_with_no_args_or_help
19
+ cleaner = Shubox::TestUnitCleaner.new
20
+ no_args = cleaner.run([""])
21
+ assert_equal(cleaner.usage, no_args)
22
+
23
+ help = cleaner.run(["--help"])
24
+ assert_equal(cleaner.usage, help)
25
+ end
26
+
27
+ def test_detect_comments
28
+ line = " # Comment here"
29
+ cleaner = Shubox::TestUnitCleaner.new
30
+ assert(cleaner.comment?(line))
31
+ assert(!cleaner.comment?("hello"))
32
+ end
33
+
34
+ def test_run_cleaner_on_directory
35
+ dir_to_clean = File.expand_path(File.join(File.dirname(__FILE__), '..', 'tmp', 'myproject'))
36
+ clean_file = File.join(dir_to_clean, 'test', 'test_io.rb')
37
+ Shubox::TestUnitCleaner.new.run([dir_to_clean, "ignored extra parameter"])
38
+ assert_equal <<-EOF, File.read(clean_file)
39
+ require File.dirname(__FILE__) + '/test_helper'
40
+
41
+ # Pro tip: Keeping an inline bookmark to the rdocs for the class under study
42
+ # makes it easy to continue your learning later.
43
+
44
+ # Exploring the methods of the IO class: http://www.ruby-doc.org/core/classes/IO.html
45
+ class TestIO < Test::Unit::TestCase
46
+
47
+ # See String Match for =~ syntax: http://www.ruby-doc.org/core/classes/String.html#M000792
48
+ def test_readlines_reads_files_as_array
49
+ end
50
+
51
+ end
52
+ EOF
53
+ end
54
+
55
+ def test_run_cleaner_on_single_file
56
+ file_to_clean = File.expand_path(File.join(File.dirname(__FILE__), '..', 'tmp', 'myproject', 'test', 'samples', 'test_right_triangle.rb'))
57
+ contents = File.read(file_to_clean)
58
+
59
+ cleaner = Shubox::TestUnitCleaner.new
60
+ cleaner.run([file_to_clean])
61
+ cleaned_file = File.read(file_to_clean)
62
+
63
+ assert_equal <<-EOF, cleaned_file
64
+ require File.dirname(__FILE__) + '/../test_helper'
65
+ require 'samples/right_triangle'
66
+
67
+ # An example of testing a class in the lib folder.
68
+ class TestRightTriangle < Test::Unit::TestCase
69
+
70
+
71
+ def test_hypotenuse
72
+ end
73
+
74
+ def test_area
75
+ end
76
+
77
+ end
78
+ EOF
79
+
80
+ cleaned_contents = cleaner.clean_class(contents)
81
+ assert_equal(cleaned_contents, cleaned_file.strip)
82
+ end
83
+
84
+ # Including support for cleaning github.com/edgecase/ruby_koans
85
+ def test_clean_koans
86
+ koan = <<-EOF
87
+ require File.dirname(__FILE__) + '/edgecase'
88
+
89
+ class AboutAsserts < EdgeCase::Koan
90
+
91
+ # We shall contemplate truth by testing reality, via asserts.
92
+ def test_assert_truth
93
+ assert true
94
+ end
95
+ end
96
+ EOF
97
+
98
+ clean_koan = <<-EOF
99
+ require File.dirname(__FILE__) + '/edgecase'
100
+
101
+ class AboutAsserts < EdgeCase::Koan
102
+
103
+ # We shall contemplate truth by testing reality, via asserts.
104
+ def test_assert_truth
105
+ end
106
+ end
107
+ EOF
108
+ cleaner = Shubox::TestUnitCleaner.new
109
+ assert_equal(clean_koan.strip, cleaner.clean_class(koan))
110
+ end
111
+ end
@@ -0,0 +1,44 @@
1
+ require File.join(File.dirname(__FILE__), "..", "test_generator_helper.rb")
2
+ require 'fileutils'
3
+ require 'languages'
4
+
5
+ class TestClojureGenerator < Test::Unit::TestCase
6
+ include RubiGen::GeneratorTestHelper
7
+
8
+ def setup
9
+ bare_setup
10
+ end
11
+
12
+ def teardown
13
+ bare_teardown
14
+ end
15
+
16
+ def test_generator_without_options
17
+ run_generator('clojure', [APP_ROOT], sources)
18
+
19
+ assert_generated_file "README.rdoc"
20
+ assert_generated_file "myproject.ipr"
21
+ assert_generated_file "myproject.iml"
22
+ assert_file_contains(PROJECT_NAME, "myproject.ipr")
23
+
24
+ assert_directory_exists "bin"
25
+ assert_generated_file "bin/repl.sh"
26
+ assert_generated_file "bin/runtests.sh"
27
+
28
+ assert_directory_exists "lib"
29
+ assert_generated_file "lib/clojure.jar"
30
+ assert_generated_file "lib/clojure-contrib.jar"
31
+ assert_generated_file "lib/jline-0.9.94.jar"
32
+
33
+ assert_directory_exists "src"
34
+ assert_generated_file "src/repl.clj"
35
+
36
+ assert_directory_exists "test"
37
+ assert_directory_exists "test/core"
38
+ assert_generated_file "test/core/about_clojure_testing.clj"
39
+ assert_generated_file "test/core/about_forms.clj"
40
+ assert_generated_file "test/tests.clj"
41
+
42
+ run_generated_build_script("bin/runtests.sh")
43
+ end
44
+ end
@@ -0,0 +1,37 @@
1
+ require File.join(File.dirname(__FILE__), "..", "test_generator_helper.rb")
2
+ require 'languages'
3
+
4
+ class TestJavaGenerator < Test::Unit::TestCase
5
+ include RubiGen::GeneratorTestHelper
6
+
7
+ def setup
8
+ bare_setup
9
+ end
10
+
11
+ def teardown
12
+ bare_teardown
13
+ end
14
+
15
+ def test_generator_without_options
16
+ run_generator('java', [APP_ROOT], sources)
17
+ assert_generated_file "myproject.ipr"
18
+ assert_generated_file "myproject.iml"
19
+ assert_file_contains(PROJECT_NAME, "myproject.ipr")
20
+
21
+ assert_directory_exists "build"
22
+ assert_generated_file "build/build.xml"
23
+ assert_file_contains(PROJECT_NAME, "build/build.xml")
24
+
25
+ assert_directory_exists "lib"
26
+ assert_generated_file "lib/junit.jar"
27
+ assert_generated_file "lib/hamcrest-core.jar"
28
+
29
+ assert_directory_exists "src"
30
+ assert_generated_file "src/com/samples/Greeting.java"
31
+
32
+ assert_directory_exists "test"
33
+ assert_generated_file "test/com/samples/GreetingTest.java"
34
+
35
+ run_generated_build_script("ant -f build/build.xml")
36
+ end
37
+ end