bobbyno-tbox 0.5.2 → 0.6

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 (36) hide show
  1. data/History.txt +6 -0
  2. data/Manifest.txt +23 -12
  3. data/README.rdoc +20 -9
  4. data/Rakefile +13 -1
  5. data/app_generators/java/USAGE +14 -0
  6. data/app_generators/java/java_generator.rb +39 -0
  7. data/app_generators/java/templates/Greeting.java +24 -0
  8. data/app_generators/java/templates/GreetingTest.java +18 -0
  9. data/app_generators/java/templates/build.xml +55 -0
  10. data/app_generators/java/templates/lib/hamcrest-core.jar +0 -0
  11. data/app_generators/java/templates/lib/junit.jar +0 -0
  12. data/app_generators/java/templates/project.iml +22 -0
  13. data/app_generators/java/templates/project.ipr +259 -0
  14. data/app_generators/{tbox → ruby}/USAGE +1 -2
  15. data/app_generators/ruby/ruby_generator.rb +34 -0
  16. data/app_generators/{tbox → ruby}/templates/file.txt +0 -0
  17. data/app_generators/{tbox → ruby}/templates/rakefile.rb +0 -0
  18. data/app_generators/{tbox → ruby}/templates/right_triangle.rb +0 -6
  19. data/app_generators/{tbox → ruby}/templates/tbox.rb +0 -0
  20. data/app_generators/ruby/templates/test_helper.rb +9 -0
  21. data/app_generators/{tbox → ruby}/templates/test_io.rb +0 -0
  22. data/app_generators/{tbox → ruby}/templates/test_right_triangle.rb +0 -0
  23. data/bin/tbox +6 -3
  24. data/lib/languages.rb +22 -0
  25. data/lib/tbox.rb +1 -1
  26. data/lib/tbox_app_generator.rb +41 -0
  27. data/test/test_generator_helper.rb +37 -0
  28. data/test/test_java_generator.rb +37 -0
  29. data/test/test_languages.rb +32 -0
  30. data/test/test_ruby_generator.rb +32 -0
  31. metadata +31 -18
  32. data/app_generators/tbox/tbox_generator.rb +0 -84
  33. data/app_generators/tbox/templates/README +0 -45
  34. data/app_generators/tbox/templates/test_helper.rb +0 -9
  35. data/tbox.gemspec +0 -40
  36. data/test/test_tbox_generator.rb +0 -63
@@ -2,8 +2,7 @@ Description:
2
2
 
3
3
  tbox lowers the barrier to entry for test-driven learning by providing a basic infrastructure in which
4
4
  to start coding: A directory structure, some classes and unit tests to get started, and a Rakefile to run
5
- all tests. For now, tbox is geared toward Ruby, though the technique is applicable to any language that
6
- lends itself to TDD.
5
+ all tests.
7
6
 
8
7
  Usage:
9
8
 
@@ -0,0 +1,34 @@
1
+ require 'tbox_app_generator'
2
+
3
+ class RubyGenerator < TboxAppGenerator
4
+
5
+ def manifest
6
+ record do |m|
7
+ # Ensure appropriate folder(s) exists
8
+ m.directory ''
9
+ BASEDIRS.each { |path| m.directory path }
10
+
11
+ m.file "rakefile.rb", "rakefile.rb"
12
+ m.directory "lib/samples"
13
+ m.file "right_triangle.rb", "lib/samples/right_triangle.rb"
14
+ m.file "tbox.rb", "lib/tbox.rb"
15
+ m.directory "test/samples"
16
+ m.directory "test/data"
17
+ m.file "test_right_triangle.rb", "test/samples/test_right_triangle.rb"
18
+ m.file "test_io.rb", "test/test_io.rb"
19
+ m.file "file.txt", "test/data/file.txt"
20
+ m.file "test_helper.rb", "test/test_helper.rb"
21
+
22
+ m.dependency "install_rubigen_scripts", [destination_root, 'tbox'],
23
+ :shebang => options[:shebang], :collision => :force
24
+ end
25
+ end
26
+
27
+ protected
28
+ # Installation skeleton.
29
+ BASEDIRS = %w(
30
+ lib
31
+ script
32
+ test
33
+ )
34
+ end
File without changes
File without changes
@@ -14,11 +14,5 @@ class RightTriangle
14
14
  def area
15
15
  0.5 * @a * @b
16
16
  end
17
-
18
- private
19
17
 
20
- def s
21
- semiperimeter
22
- end
23
-
24
18
  end
File without changes
@@ -0,0 +1,9 @@
1
+ require 'stringio'
2
+ require 'test/unit'
3
+ require File.dirname(__FILE__) + '/../lib/tbox'
4
+
5
+ module Constants
6
+ if (!defined? TEST_DATA_DIR)
7
+ TEST_DATA_DIR = File.join(File.expand_path(File.dirname(__FILE__)), "data")
8
+ end
9
+ end
File without changes
data/bin/tbox CHANGED
@@ -2,16 +2,19 @@
2
2
 
3
3
  require 'rubygems'
4
4
  require 'rubigen'
5
-
5
+ require File.dirname(__FILE__) + "/../lib/tbox"
6
+ require File.dirname(__FILE__) + "/../lib/languages"
7
+
6
8
  if %w(-v --version).include? ARGV.first
7
- require File.dirname(__FILE__) + "/../lib/tbox"
8
9
  puts "#{File.basename($0)} #{Tbox::VERSION}"
9
10
  exit(0)
10
11
  end
11
12
 
12
13
  require 'rubigen/scripts/generate'
14
+
13
15
  source = RubiGen::PathSource.new(:application,
14
16
  File.join(File.dirname(__FILE__), "../app_generators"))
15
17
  RubiGen::Base.reset_sources
16
18
  RubiGen::Base.append_sources source
17
- RubiGen::Scripts::Generate.new.run(ARGV, :generator => 'tbox')
19
+
20
+ RubiGen::Scripts::Generate.new.run(ARGV, :generator => Languages.parse(ARGV))
data/lib/languages.rb ADDED
@@ -0,0 +1,22 @@
1
+ class Languages
2
+
3
+ def self.parse(args)
4
+ lang = args.find {|arg| ((arg =~ /-l=/) or (arg =~ /--language=/)) }
5
+ lang = "-l=ruby" if lang.nil?
6
+ lang = lang.split('=')[1]
7
+ raise "Supported languages: #{current.inspect}" if (!current.member?(lang))
8
+ lang
9
+ end
10
+
11
+ def self.current
12
+ langs = Dir.entries(File.join(File.dirname(__FILE__), "../app_generators"))
13
+ langs.reject {|i| ((i == ".") or (i == ".."))}
14
+ end
15
+
16
+ def self.print
17
+ list = ""
18
+ current.each {|lang| list << lang << '|'}
19
+ list.chomp('|')
20
+ end
21
+
22
+ end
data/lib/tbox.rb CHANGED
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__)) unless
2
2
  $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
3
 
4
4
  module Tbox
5
- VERSION = '0.5.2'
5
+ VERSION = '0.6'
6
6
  end
@@ -0,0 +1,41 @@
1
+ class TboxAppGenerator < 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
+
41
+ end
@@ -27,3 +27,40 @@ rescue LoadError
27
27
  require 'rubigen'
28
28
  end
29
29
  require 'rubigen/helpers/generator_test_helper'
30
+
31
+ module RubiGen::GeneratorTestHelper
32
+ def assert_file_contains(keyword, filename)
33
+ ipr = IO.readlines(File.join(APP_ROOT, filename)).to_s
34
+ assert(ipr =~ Regexp.new(keyword))
35
+ end
36
+
37
+ def run_generated_build_script(cmd)
38
+ FileUtils::cd(APP_ROOT) do
39
+ puts "Running generated build script in #{FileUtils::pwd} with #{cmd}"
40
+ `#{cmd}`
41
+ raise "Exit code #{$?} while running generated build script with #{cmd}" if ($?.to_s != "0")
42
+ end
43
+ end
44
+
45
+ def sources
46
+ [RubiGen::PathSource.new(:test, File.join(File.dirname(__FILE__),"..", generator_path))]
47
+ end
48
+
49
+ def generator_path
50
+ "app_generators"
51
+ end
52
+ # Some generator-related assertions:
53
+ # assert_generated_file(name, &block) # block passed the file contents
54
+ # assert_directory_exists(name)
55
+ # assert_generated_class(name, &block)
56
+ # assert_generated_module(name, &block)
57
+ # assert_generated_test_for(name, &block)
58
+ # The assert_generated_(class|module|test_for) &block is passed the body of the class/module within the file
59
+ # assert_has_method(body, *methods) # check that the body has a list of methods (methods with parentheses not supported yet)
60
+ #
61
+ # Other helper methods are:
62
+ # app_root_files - put this in teardown to show files generated by the test method (e.g. p app_root_files)
63
+ # bare_setup - place this in setup method to create the APP_ROOT folder for each test
64
+ # bare_teardown - place this in teardown method to destroy the TMP_ROOT or APP_ROOT folder after each test
65
+ end
66
+
@@ -0,0 +1,37 @@
1
+ require File.join(File.dirname(__FILE__), "test_generator_helper.rb")
2
+
3
+ class TestJavaGenerator < Test::Unit::TestCase
4
+ include RubiGen::GeneratorTestHelper
5
+
6
+ def setup
7
+ bare_setup
8
+ end
9
+
10
+ def teardown
11
+ bare_teardown
12
+ end
13
+
14
+ def test_generator_without_options
15
+ run_generator('java', [APP_ROOT], sources)
16
+ assert_generated_file "myproject.ipr"
17
+ assert_generated_file "myproject.iml"
18
+ assert_file_contains(PROJECT_NAME, "myproject.ipr")
19
+
20
+ assert_directory_exists "build"
21
+ assert_generated_file "build/build.xml"
22
+ assert_file_contains(PROJECT_NAME, "build/build.xml")
23
+
24
+ assert_directory_exists "lib"
25
+ assert_generated_file "lib/junit.jar"
26
+ assert_generated_file "lib/hamcrest-core.jar"
27
+
28
+ assert_directory_exists "src"
29
+ assert_generated_file "src/com/samples/Greeting.java"
30
+
31
+ assert_directory_exists "test"
32
+ assert_generated_file "test/com/samples/GreetingTest.java"
33
+
34
+ run_generated_build_script("ant -f build/build.xml")
35
+ end
36
+
37
+ end
@@ -0,0 +1,32 @@
1
+ require File.join(File.dirname(__FILE__), "test_generator_helper.rb")
2
+ require 'languages'
3
+
4
+ class TestLanguages < Test::Unit::TestCase
5
+
6
+ def test_list_current_languages
7
+ langs = Languages.current
8
+ assert(langs.length > 1)
9
+ assert(!langs.include?("."))
10
+ assert(!langs.include?(".."))
11
+ end
12
+
13
+ def test_parse_command_for_valid_language
14
+ args = %w{-l=java MyAppName}
15
+ assert_equal("java", Languages.parse(args))
16
+ args = %w{--language=ruby app_name}
17
+ assert_equal("ruby", Languages.parse(args))
18
+ end
19
+
20
+ def test_reject_invalid_language
21
+ args = %w{-l=non sense}
22
+ assert_raise RuntimeError do
23
+ Languages.parse(args)
24
+ end
25
+ end
26
+
27
+ def test_print_languages
28
+ base = "java|ruby"
29
+ print = Languages.print
30
+ assert(print.include?(base))
31
+ end
32
+ end
@@ -0,0 +1,32 @@
1
+ require File.join(File.dirname(__FILE__), "test_generator_helper.rb")
2
+ require 'fileutils'
3
+
4
+ class TestRubyGenerator < 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('ruby', [APP_ROOT], sources)
17
+
18
+ assert_generated_file "rakefile.rb"
19
+ assert_directory_exists "lib/samples"
20
+ assert_generated_file "lib/samples/right_triangle.rb"
21
+ assert_generated_file "lib/tbox.rb"
22
+ assert_directory_exists "test/samples"
23
+ assert_generated_file "test/samples/test_right_triangle.rb"
24
+ assert_directory_exists "test/data"
25
+ assert_generated_file "test/data/file.txt"
26
+ assert_generated_file "test/test_io.rb"
27
+ assert_generated_file "test/test_helper.rb"
28
+
29
+ run_generated_build_script("rake")
30
+ end
31
+
32
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bobbyno-tbox
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: "0.6"
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bobby Norton
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-06-18 00:00:00 -07:00
12
+ date: 2009-06-24 00:00:00 -07:00
13
13
  default_executable: tbox
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -32,7 +32,7 @@ dependencies:
32
32
  - !ruby/object:Gem::Version
33
33
  version: 1.8.0
34
34
  version:
35
- description: Provides a basic directory structure for test-driven learning.
35
+ description: "Test-driven learning is a way to master a programming language by writing unit tests around its API's. tbox lowers the barrier to entry for test-driven learning by providing a basic infrastructure in which to start coding: A directory structure, some classes and unit tests to get started, and a build script."
36
36
  email:
37
37
  - codeculturist@gmail.com
38
38
  executables:
@@ -44,7 +44,7 @@ extra_rdoc_files:
44
44
  - Manifest.txt
45
45
  - PostInstall.txt
46
46
  - README.rdoc
47
- - app_generators/tbox/templates/file.txt
47
+ - app_generators/ruby/templates/file.txt
48
48
  files:
49
49
  - History.txt
50
50
  - MIT-LICENSE
@@ -52,25 +52,36 @@ files:
52
52
  - PostInstall.txt
53
53
  - README.rdoc
54
54
  - Rakefile
55
- - app_generators/tbox/USAGE
56
- - app_generators/tbox/tbox_generator.rb
57
- - app_generators/tbox/templates/README
58
- - app_generators/tbox/templates/file.txt
59
- - app_generators/tbox/templates/rakefile.rb
60
- - app_generators/tbox/templates/right_triangle.rb
61
- - app_generators/tbox/templates/tbox.rb
62
- - app_generators/tbox/templates/test_helper.rb
63
- - app_generators/tbox/templates/test_io.rb
64
- - app_generators/tbox/templates/test_right_triangle.rb
55
+ - app_generators/java/USAGE
56
+ - app_generators/java/java_generator.rb
57
+ - app_generators/java/templates/Greeting.java
58
+ - app_generators/java/templates/GreetingTest.java
59
+ - app_generators/java/templates/build.xml
60
+ - app_generators/java/templates/lib/hamcrest-core.jar
61
+ - app_generators/java/templates/lib/junit.jar
62
+ - app_generators/java/templates/project.iml
63
+ - app_generators/java/templates/project.ipr
64
+ - app_generators/ruby/USAGE
65
+ - app_generators/ruby/ruby_generator.rb
66
+ - app_generators/ruby/templates/file.txt
67
+ - app_generators/ruby/templates/rakefile.rb
68
+ - app_generators/ruby/templates/right_triangle.rb
69
+ - app_generators/ruby/templates/tbox.rb
70
+ - app_generators/ruby/templates/test_helper.rb
71
+ - app_generators/ruby/templates/test_io.rb
72
+ - app_generators/ruby/templates/test_right_triangle.rb
65
73
  - bin/tbox
74
+ - lib/languages.rb
66
75
  - lib/tbox.rb
76
+ - lib/tbox_app_generator.rb
67
77
  - script/console
68
78
  - script/destroy
69
79
  - script/generate
70
- - tbox.gemspec
71
80
  - test/test_generator_helper.rb
72
81
  - test/test_helper.rb
73
- - test/test_tbox_generator.rb
82
+ - test/test_java_generator.rb
83
+ - test/test_languages.rb
84
+ - test/test_ruby_generator.rb
74
85
  has_rdoc: false
75
86
  homepage: http://github.com/bobbyno/tbox/tree/master
76
87
  post_install_message: PostInstall.txt
@@ -97,8 +108,10 @@ rubyforge_project: tbox
97
108
  rubygems_version: 1.2.0
98
109
  signing_key:
99
110
  specification_version: 3
100
- summary: "Test-driven learning is a way to master a programming language by writing unit tests around its API's, tbox lowers the barrier to entry for test-driven learning by providing a basic infrastructure in which to start coding: A directory structure, some classes and unit tests to get started, and a Rakefile to run all tests."
111
+ summary: Test-driven learning is a way to master a programming language by writing unit tests around its API's
101
112
  test_files:
102
113
  - test/test_generator_helper.rb
103
114
  - test/test_helper.rb
104
- - test/test_tbox_generator.rb
115
+ - test/test_java_generator.rb
116
+ - test/test_languages.rb
117
+ - test/test_ruby_generator.rb
@@ -1,84 +0,0 @@
1
- class TboxGenerator < RubiGen::Base
2
-
3
- DEFAULT_SHEBANG = File.join(Config::CONFIG['bindir'],
4
- Config::CONFIG['ruby_install_name'])
5
-
6
- default_options :author => nil
7
-
8
- attr_reader :name
9
-
10
- def initialize(runtime_args, runtime_options = {})
11
- super
12
- usage if args.empty?
13
- @destination_root = File.expand_path(args.shift)
14
- @name = base_name
15
- extract_options
16
- end
17
-
18
- def manifest
19
- record do |m|
20
- # Ensure appropriate folder(s) exists
21
- m.directory ''
22
- BASEDIRS.each { |path| m.directory path }
23
-
24
- m.file "rakefile.rb", "rakefile.rb"
25
- m.file "README", "README"
26
- m.file "../../../MIT-LICENSE", "MIT-LICENSE"
27
- # Create stubs
28
- # m.template "template.rb", "some_file_after_erb.rb"
29
- # m.template_copy_each ["template.rb", "template2.rb"]
30
- # m.file "file", "some_file_copied"
31
- # m.file_copy_each ["path/to/file", "path/to/file2"]
32
- m.directory "lib/samples"
33
- m.file "right_triangle.rb", "lib/samples/right_triangle.rb"
34
- m.file "tbox.rb", "lib/tbox.rb"
35
- m.directory "test/samples"
36
- m.directory "test/data"
37
- m.file "test_right_triangle.rb", "test/samples/test_right_triangle.rb"
38
- m.file "test_io.rb", "test/test_io.rb"
39
- m.file "file.txt", "test/data/file.txt"
40
- m.file "test_helper.rb", "test/test_helper.rb"
41
-
42
- m.dependency "install_rubigen_scripts", [destination_root, 'tbox'],
43
- :shebang => options[:shebang], :collision => :force
44
- end
45
- end
46
-
47
- protected
48
- def banner
49
- <<-EOS
50
- Creates a test-driven learning environment: A directory structure, some sample classes and unit tests,
51
- and a Rakefile to run all tests.
52
-
53
- USAGE: #{spec.name} dir_name
54
- EOS
55
- end
56
-
57
- def add_options!(opts)
58
- opts.separator ''
59
- opts.separator 'Options:'
60
- # For each option below, place the default
61
- # at the top of the file next to "default_options"
62
- # opts.on("-a", "--author=\"Your Name\"", String,
63
- # "Some comment about this option",
64
- # "Default: none") { |o| options[:author] = o }
65
- opts.on("-v", "--version", "Show the #{File.basename($0)} version number and quit.")
66
- end
67
-
68
- def extract_options
69
- # for each option, extract it into a local variable (and create an "attr_reader :author" at the top)
70
- # Templates can access these value via the attr_reader-generated methods, but not the
71
- # raw instance variable value.
72
- # @author = options[:author]
73
- end
74
-
75
- # Installation skeleton. Intermediate directories are automatically
76
- # created so don't sweat their absence here.
77
- BASEDIRS = %w(
78
- lib
79
- log
80
- script
81
- test
82
- tmp
83
- )
84
- end