Class: Ruby
- Inherits:
-
Object
- Object
- Ruby
- Defined in:
- lib/kicker/recipes/ruby.rb
Direct Known Subclasses
Class Attribute Summary collapse
-
.runner_bin ⇒ Object
Returns the ruby command to run the tests with.
-
.test_cases_root ⇒ Object
Returns the root directory of where test cases will be looked up.
-
.test_options ⇒ Object
Assigns extra options that are to be passed on to the runner_bin.
-
.test_type ⇒ Object
Returns the type of tests to run.
Instance Attribute Summary collapse
-
#tests ⇒ Object
readonly
The list of collected tests.
Class Method Summary collapse
-
.call(files) ⇒ Object
:nodoc:.
-
.run_tests(tests) ⇒ Object
Runs the given tests, if there are any, with the method defined by test_type.
-
.run_with_spec_runner(tests) ⇒ Object
Runs the given tests with ‘spec’ as RSpec tests.
-
.run_with_test_runner(tests) ⇒ Object
Runs the given tests with ‘ruby’ as unit-test tests.
- .spec_runner_command(tests) ⇒ Object
- .test_runner_command(tests) ⇒ Object
Instance Method Summary collapse
-
#handle! ⇒ Object
This method is called to collect tests.
-
#initialize(files) ⇒ Ruby
constructor
:nodoc:.
-
#runner_bin ⇒ Object
A shortcut to Ruby.runner_bin.
-
#test_cases_root ⇒ Object
A shortcut to Ruby.test_cases_root.
-
#test_file(name) ⇒ Object
Returns the file for
nameif it exists. -
#test_type ⇒ Object
A shortcut to Ruby.test_type.
Constructor Details
#initialize(files) ⇒ Ruby
:nodoc:
96 97 98 99 |
# File 'lib/kicker/recipes/ruby.rb', line 96 def initialize(files) #:nodoc: @files = files @tests = [] end |
Class Attribute Details
.runner_bin ⇒ Object
Returns the ruby command to run the tests with. Eg: ‘ruby’ or ‘spec’.
Defaults to ‘ruby’ if test_type is ‘test’ and ‘spec’ if test_type is ‘spec’.
22 23 24 |
# File 'lib/kicker/recipes/ruby.rb', line 22 def runner_bin @runner_bin ||= test_type == 'test' ? 'ruby' : 'spec' end |
.test_cases_root ⇒ Object
Returns the root directory of where test cases will be looked up.
Defaults to the value of test_type. Eg: ‘test’ or ‘spec’.
32 33 34 |
# File 'lib/kicker/recipes/ruby.rb', line 32 def test_cases_root @test_cases_root ||= test_type end |
.test_options ⇒ Object
Assigns extra options that are to be passed on to the runner_bin.
Ruby. << '-I ./lib/foo'
41 42 43 |
# File 'lib/kicker/recipes/ruby.rb', line 41 def @test_options ||= [] end |
.test_type ⇒ Object
Returns the type of tests to run. Eg: ‘test’ or ‘spec’.
Defaults to ‘test’ if no ‘spec’ directory exists.
9 10 11 |
# File 'lib/kicker/recipes/ruby.rb', line 9 def test_type @test_type ||= File.exist?('spec') ? 'spec' : 'test' end |
Instance Attribute Details
#tests ⇒ Object (readonly)
The list of collected tests.
94 95 96 |
# File 'lib/kicker/recipes/ruby.rb', line 94 def tests @tests end |
Class Method Details
.call(files) ⇒ Object
:nodoc:
87 88 89 90 91 |
# File 'lib/kicker/recipes/ruby.rb', line 87 def self.call(files) #:nodoc: handler = new(files) handler.handle! run_tests(handler.tests) end |
.run_tests(tests) ⇒ Object
Runs the given tests, if there are any, with the method defined by test_type. If test_type is ‘test’ the run_with_test_runner method is used. The same applies when test_type is ‘spec’.
48 49 50 |
# File 'lib/kicker/recipes/ruby.rb', line 48 def run_tests(tests) send("run_with_#{test_type}_runner", tests) unless tests.empty? end |
.run_with_spec_runner(tests) ⇒ Object
Runs the given tests with ‘spec’ as RSpec tests.
If you want to adjust the logging, stdout and growl, override this, call spec_runner_command with the tests to get the command and call execute with the custom logging block.
78 79 80 81 82 83 84 |
# File 'lib/kicker/recipes/ruby.rb', line 78 def run_with_spec_runner(tests) execute(spec_runner_command(tests)) do |status| if status.after? && status.growl? status.output.split("\n").last end end end |
.run_with_test_runner(tests) ⇒ Object
Runs the given tests with ‘ruby’ as unit-test tests.
If you want to adjust the logging, stdout and growl, override this, call test_runner_command with the tests to get the command and call execute with the custom logging block.
61 62 63 64 65 66 67 |
# File 'lib/kicker/recipes/ruby.rb', line 61 def run_with_test_runner(tests) execute(test_runner_command(tests)) do |status| if status.after? && status.growl? status.output.split("\n").last end end end |
.spec_runner_command(tests) ⇒ Object
69 70 71 |
# File 'lib/kicker/recipes/ruby.rb', line 69 def spec_runner_command(tests) "#{runner_bin} #{.join(' ')} #{tests.join(' ')}" end |
.test_runner_command(tests) ⇒ Object
52 53 54 |
# File 'lib/kicker/recipes/ruby.rb', line 52 def test_runner_command(tests) "#{runner_bin} #{.join(' ')} -r #{tests.join(' -r ')} -e ''" end |
Instance Method Details
#handle! ⇒ Object
This method is called to collect tests. Override this if you’re subclassing and make sure to call super.
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |
# File 'lib/kicker/recipes/ruby.rb', line 128 def handle! @tests.concat(@files.take_and_map do |file| case file # Match any ruby test file when /^#{test_cases_root}\/.+_#{test_type}\.rb$/ file # A file such as ./lib/namespace/foo.rb is mapped to: # * ./test/namespace/foo_test.rb # * ./test/foo_test.rb when /^lib\/(.+)\.rb$/ if namespaced = test_file($1) namespaced elsif in_test_root = test_file(File.basename(file, '.rb')) in_test_root end end end) end |
#runner_bin ⇒ Object
A shortcut to Ruby.runner_bin.
107 108 109 |
# File 'lib/kicker/recipes/ruby.rb', line 107 def runner_bin self.class.runner_bin end |
#test_cases_root ⇒ Object
A shortcut to Ruby.test_cases_root.
112 113 114 |
# File 'lib/kicker/recipes/ruby.rb', line 112 def test_cases_root self.class.test_cases_root end |
#test_file(name) ⇒ Object
Returns the file for name if it exists.
test_file('foo') # => "test/foo_test.rb"
test_file('foo/bar') # => "test/foo/bar_test.rb"
test_file('does/not/exist') # => nil
121 122 123 124 |
# File 'lib/kicker/recipes/ruby.rb', line 121 def test_file(name) file = File.join(test_cases_root, "#{name}_#{test_type}.rb") file if File.exist?(file) end |
#test_type ⇒ Object
A shortcut to Ruby.test_type.
102 103 104 |
# File 'lib/kicker/recipes/ruby.rb', line 102 def test_type self.class.test_type end |