spiker 0.1.1 → 0.1.5

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a83635eae4874bcb567fdcae912b250f3c4096620c5703885d5de9c501527090
4
- data.tar.gz: f2dc29b6a4dd30cf380c44b68f970f15ac93cea3db71ab86db22c657a4e9ea65
3
+ metadata.gz: d65d9dc195dfb1282b040fbfcac1139d9cc4c44f8bae2441deef02901ad0e38a
4
+ data.tar.gz: add551461d8e80b7626e5c96e738ed79b93ee360b3c2d7f809f07e90390a20f6
5
5
  SHA512:
6
- metadata.gz: 63f83edb340f1480c296fbc6eff8e1f943086f0bfecf3146d0f9581d0a674131b66bb196ae65bcf9893e5c3003fa0dda49419b3acdfa06449f27c4118dafc448
7
- data.tar.gz: '03718cc66377cd005f6a27334da152ab2f331c52e5f58d60a0f24dcc73eda967a30cc94a8479433b59fdc19c577a9bf880ef36e92352bffde3b523069accab0e'
6
+ metadata.gz: f90ec88cf889ab847482622d47e040b5c6ba64b664e261b21c3076963a5f669d027f3cbc494349d48fcc7c44902cec6878a60e50181e67690f6facacf3abfef4
7
+ data.tar.gz: 0ec1b5564017f569255ffbec1286b85a5edf793c98e9a23fa4cd08d1c1b4bbda6b20ad2cb09ee648bc91be32c284f947748e2293002ed90fe079b26674eaa100
data/.rubocop.yml CHANGED
@@ -12,6 +12,5 @@ Layout/LineLength:
12
12
  AllCops:
13
13
  NewCops: enable
14
14
  Exclude:
15
- - 'lib/spiker/generators/templates/**'
16
15
  - 'exe/spiker'
17
16
  - 'spiker.gemspec'
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- spiker (0.1.1)
4
+ spiker (0.1.5)
5
5
  thor (~> 0.19)
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -1,20 +1,12 @@
1
1
  # Spiker
2
2
 
3
- Spiker helps you validate your ideas under test. It can also be a basic educational tool, giving the learner a minimal framework to start writing and testing the Ruby code.
3
+ Spiker helps you validate your ideas under test. It can also be a basic educational tool, giving the learner a minimal framework to start writing and testing their Ruby code.
4
4
 
5
5
  ## Installation
6
6
 
7
- Add this line to your application's Gemfile:
7
+ [![Gem Version](https://badge.fury.io/rb/spiker.svg)](https://badge.fury.io/rb/spiker)
8
8
 
9
- ```ruby
10
- gem 'spiker'
11
- ```
12
-
13
- And then execute:
14
-
15
- $ bundle install
16
-
17
- Or install it yourself as:
9
+ Install it directly:
18
10
 
19
11
  $ gem install spiker
20
12
 
@@ -29,9 +21,10 @@ Then, create a new spike:
29
21
  $ spiker simple my_spike
30
22
  $ cd my_spike
31
23
 
32
- Using the "simple" formula, Spiker will create an `app.rb` file, a `Gemfile`, and a `Guardfile`. The `app.rb` file will contain boilerplate for both Minitest and a Ruby class in the same file:
24
+ Using the "simple" formula, Spiker will create an `app.rb` file, a `Gemfile`, a `Guardfile` and an `.env` file for configuration, to be read by the `dotenv` gem. The `app.rb` file will contain boilerplate for both Minitest and a Ruby class in the same file:
33
25
 
34
26
  ```ruby
27
+ require 'dotenv/load'
35
28
  require 'minitest'
36
29
  require 'minitest/autorun'
37
30
  require 'minitest/reporters'
@@ -39,8 +32,12 @@ require 'minitest/reporters'
39
32
  Minitest::Reporters.use!
40
33
 
41
34
  class MySpikeTest < Minitest::Test
42
- def test_that_it_works
43
- assert true
35
+ def test_name
36
+ assert_equal "Fred", MySpike.new(name: "Fred").name
37
+ end
38
+
39
+ def test_default_env_value
40
+ assert_equal "test", ENV["TEST_VALUE"]
44
41
  end
45
42
  end
46
43
 
@@ -54,7 +51,12 @@ end
54
51
 
55
52
  From here, the user should be able to start Guard and immediately begin development in a red-green fashion.
56
53
 
57
- The "multiple" option is not implemented yet, but is intended to flesh out a more complex spike that includes a tests directory and `test_helper.rb`, a `lib` directory, README.md, etc.
54
+ The "multi" option places directories and files into a named directory, and is intended to flesh out a more complex spike that includes a tests directory and `test_helper.rb`, a `lib` directory, README.md, etc. The overall workflow is still the same:
55
+
56
+ $ spiker multi my_spike
57
+ $ cd my_spike
58
+
59
+ Bundle will run automatically and the user will be able to start development in a red-green fashion just the same as with the simple spike. There is also a Rakefile provided, the Guardfile is modified from the simple version to include files in directories, and simple tests are predefined.
58
60
 
59
61
  ## Development
60
62
 
data/lib/spiker/cli.rb CHANGED
@@ -3,12 +3,15 @@
3
3
  require "thor"
4
4
  require_relative "version"
5
5
  require_relative "generators/simple"
6
- require_relative "generators/multiple"
6
+ require_relative "generators/given"
7
+ require_relative "generators/multi"
7
8
 
8
9
  module Spiker
9
- # Accept options "single" and "multiple"
10
- # for single file spikes or multi-file spikes
11
- # and a name for the spike directory. That is all
10
+ # Accept options "simple", "given", or "multi".
11
+ # Both Simple and Given create "single file" spikes
12
+ # with the tests and spike code in a single file.
13
+ # The Multi option creates a more traditionally structured
14
+ # spike directory with tests, code, README, etc. That is all.
12
15
  class CLI < Thor
13
16
  desc "version", "Show version"
14
17
  def version
@@ -21,10 +24,16 @@ module Spiker
21
24
  Spiker::Generators::Simple.start([name])
22
25
  end
23
26
 
24
- desc "multiple NAME", "Spike over multiple files"
27
+ desc "given NAME", "Spike in a single file using Given syntax"
28
+ method_option :name, type: :string, aliases: "-n", desc: "Name of the spike"
29
+ def given(name)
30
+ Spiker::Generators::GivenOption.start([name])
31
+ end
32
+
33
+ desc "multi NAME", "Spike over multiple files"
25
34
  method_option :name, type: :string, aliases: "-n", desc: "Name of the spike"
26
35
  def multiple(name)
27
- Spiker::Generators::Multiple.start([name])
36
+ Spiker::Generators::Multi.start([name])
28
37
  end
29
38
  end
30
39
  end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "thor/group"
4
+ require_relative "../../spiker"
5
+
6
+ module Spiker
7
+ module Generators
8
+ # Generates a single spike file, with supporting infrastructure.
9
+ # For simpler spikes that don't need a ton of organization.
10
+ class GivenOption < Thor::Group
11
+ include Thor::Actions
12
+
13
+ argument :name, type: :string
14
+
15
+ def self.source_root
16
+ "#{File.dirname(__FILE__)}/templates/given"
17
+ end
18
+
19
+ def create_spike_directory
20
+ empty_directory(name)
21
+ end
22
+
23
+ def create_spike_file
24
+ opts = { name_as_class: Spiker.classify(name) }
25
+ template("app.rb.erb", "#{name}/app.rb", opts)
26
+ end
27
+
28
+ def create_guard_file
29
+ template("guardfile.rb", "#{name}/Guardfile")
30
+ end
31
+
32
+ def create_gem_file
33
+ template("gemfile.rb", "#{name}/Gemfile")
34
+ end
35
+
36
+ def create_env_file
37
+ template("../common/basic.env", "#{name}/.env")
38
+ end
39
+
40
+ def run_bundler
41
+ inside(name) do
42
+ run("bundle install")
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "thor/group"
4
+ require_relative "../../spiker"
5
+
6
+ module Spiker
7
+ module Generators
8
+ # Generates multiple spike files, seperating tests from the
9
+ # tested code. For when the spike gets too hairy for a single
10
+ # file.
11
+ class Multi < Thor::Group
12
+ include Thor::Actions
13
+
14
+ argument :name, type: :string
15
+
16
+ def self.source_root
17
+ "#{File.dirname(__FILE__)}/templates/multi"
18
+ end
19
+
20
+ def create_spike_directories
21
+ empty_directory(name)
22
+ empty_directory("#{name}/lib")
23
+ empty_directory("#{name}/test")
24
+ end
25
+
26
+ def create_test_files
27
+ name_in_snake_case = Spiker.snake_case(name)
28
+ name_as_class = Spiker.classify(name)
29
+ opts = { name_as_class: name_as_class, name_in_snake_case: name_in_snake_case }
30
+ template("app_test.rb.erb", "#{name}/test/#{name_in_snake_case}_test.rb", opts)
31
+ template("test_helper.rb", "#{name}/test/test_helper.rb", opts)
32
+ end
33
+
34
+ def create_app_files
35
+ name_in_snake_case = Spiker.snake_case(name)
36
+ opts = { name_as_class: Spiker.classify(name) }
37
+ template("app.rb.erb", "#{name}/lib/#{name_in_snake_case}.rb", opts)
38
+ end
39
+
40
+ def create_guard_file
41
+ template("guardfile.rb", "#{name}/Guardfile")
42
+ end
43
+
44
+ def create_gem_file
45
+ template("gemfile.rb", "#{name}/Gemfile")
46
+ end
47
+
48
+ def create_rake_file
49
+ template("rakefile.rb", "#{name}/Rakefile")
50
+ end
51
+
52
+ def create_readme_file
53
+ opts = { name_as_class: Spiker.classify(name), name: name }
54
+ template("readme.md.erb", "#{name}/README.md", opts)
55
+ end
56
+
57
+ def create_env_file
58
+ template("../common/basic.env", "#{name}/.env")
59
+ end
60
+
61
+ def run_bundler
62
+ inside(name) do
63
+ run("bundle install")
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -13,7 +13,7 @@ module Spiker
13
13
  argument :name, type: :string
14
14
 
15
15
  def self.source_root
16
- "#{File.dirname(__FILE__)}/templates"
16
+ "#{File.dirname(__FILE__)}/templates/simple"
17
17
  end
18
18
 
19
19
  def create_spike_directory
@@ -21,16 +21,20 @@ module Spiker
21
21
  end
22
22
 
23
23
  def create_spike_file
24
- opts = {name_as_class: Spiker.classify(name)}
25
- template("simple_app.rb", "#{name}/app.rb", opts)
24
+ opts = { name_as_class: Spiker.classify(name) }
25
+ template("app.rb.erb", "#{name}/app.rb", opts)
26
26
  end
27
27
 
28
28
  def create_guard_file
29
- template("simple_guardfile.rb", "#{name}/Guardfile")
29
+ template("guardfile.rb", "#{name}/Guardfile")
30
30
  end
31
31
 
32
32
  def create_gem_file
33
- template("simple_gemfile.rb", "#{name}/Gemfile")
33
+ template("gemfile.rb", "#{name}/Gemfile")
34
+ end
35
+
36
+ def create_env_file
37
+ template("../common/basic.env", "#{name}/.env")
34
38
  end
35
39
 
36
40
  def run_bundler
@@ -0,0 +1 @@
1
+ TEST_VALUE="test"
@@ -0,0 +1,23 @@
1
+ require 'dotenv/load'
2
+ require 'minitest'
3
+ require 'minitest/autorun'
4
+ require 'minitest/reporters'
5
+ require 'minitest/given'
6
+
7
+ Minitest::Reporters.use!
8
+
9
+ describe 'When Initializing a <%= config[:name_as_class] %>' do
10
+ context 'Named Fred' do
11
+ Given(:fred) { <%= config[:name_as_class] %>.new(name: 'Fred') }
12
+ Then {
13
+ expect(fred.name).must_equal 'Fred'
14
+ }
15
+ end
16
+ end
17
+
18
+ class <%= config[:name_as_class] %>
19
+ attr_accessor :name
20
+ def initialize(name:)
21
+ @name = name
22
+ end
23
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
6
+
7
+ gem "minitest"
8
+ gem "minitest-reporters"
9
+ gem "minitest-given"
10
+
11
+ gem "guard"
12
+ gem "guard-minitest"
13
+
14
+ gem "dotenv"
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ clearing :on
4
+
5
+ guard :minitest, all_after_pass: true, test_folders: ["."], test_file_patterns: "*.rb" do
6
+ # We're using Minitest's Spec syntax, loaded by Given.
7
+ # We don't have to watch for spec files through because
8
+ # we're using a single file, which is also the app file.
9
+ watch(/^app\.rb$/) { "./app.rb" }
10
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dotenv/load"
4
+
5
+ class <%= config[:name_as_class] %>
6
+ def self.hello
7
+ "Hello, world!"
8
+ end
9
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ class <%= config[:name_as_class] %>Test < MiniTest::Test
6
+ def test_default_class_instantiates
7
+ assert <%= config[:name_as_class] %>.new
8
+ end
9
+
10
+ def test_default_class_responds_to_hello
11
+ assert_equal "Hello, world!", <%= config[:name_as_class] %>.hello
12
+ end
13
+ end
@@ -4,8 +4,8 @@ source "https://rubygems.org"
4
4
 
5
5
  git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
6
6
 
7
- gem 'minitest'
8
- gem 'minitest-reporters'
9
-
10
- gem 'guard'
11
- gem 'guard-minitest'
7
+ gem "minitest"
8
+ gem "minitest-reporters"
9
+ gem "guard"
10
+ gem "guard-minitest"
11
+ gem "dotenv"
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ clearing :on
4
+
5
+ guard :minitest, all_after_pass: true do
6
+ # with Minitest::Unit
7
+ watch(%r{^test/(.*)/?(.*)_test\.rb$})
8
+ watch(%r{^lib/(.*/)?([^/]+)\.rb$}) { |m| "test/#{m[1]}#{m[2]}_test.rb" }
9
+ watch(%r{^test/test_helper\.rb$}) { "test" }
10
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "rake/testtask"
5
+
6
+ Rake::TestTask.new(:test) do |t|
7
+ t.libs << "test"
8
+ t.libs << "lib"
9
+ t.test_files = FileList["test/**/*_test.rb"]
10
+ end
11
+
12
+ task default: %i[test]
@@ -0,0 +1,44 @@
1
+ # <%= config[:name_as_class] %> Spike
2
+
3
+ This is the auto-generated README for the <%= config[:name_as_class] %> spike. This content was generated by the [Spiker](https://github.com/norlinga/spiker) gem.
4
+
5
+ ## Getting Started
6
+
7
+ This directory is the result of **someone** running the following command on a command line:
8
+
9
+ $ gem install spiker
10
+ $ spiker multi <%= config[:name] %>
11
+ $ cd <%= config[:name] %>
12
+
13
+ Once inside the spike directory, open your favorite text editor and then execute the following command:
14
+
15
+ $ bundle install
16
+ $ guard
17
+
18
+ Bundler will have executed once when the spike directory was first created, but it's no problem to run it again (in case the spike directory was shared between machines / environments).
19
+
20
+ After starting Guard you should have been greeted with passing tests. You are now ready to start hashing out your spike under test.
21
+
22
+ ## Adding to This README
23
+
24
+ This README could be a great place to capture findings from your spike. Topics to address in this README might include:
25
+
26
+ - what was the initial motivation for this spike?
27
+ - what is the current state of this spike?
28
+ - is there a future intention or unrealized goal for this spike?
29
+ - what was discovered in the course of this spike?
30
+ - who is involved in this spike?
31
+
32
+ ## Feel Free to Include Code
33
+
34
+ Embedding code in a Markdown file is easy - this README uses the triple backtick syntax. The following code will be rendered as a Ruby code block:
35
+
36
+ ```ruby
37
+ require 'dotenv'
38
+
39
+ puts ENV["TEST_VALUE"]
40
+
41
+ "maybe show some code in your README?".capitalize
42
+ ```
43
+
44
+ Spikes are intended to be short lived, but that's no reason to skip proper practices in your spike development. Have fun!
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.unshift File.expand_path("../lib", __dir__)
4
+ # require the default lib file
5
+ require "<%= config[:name_in_snake_case] %>"
6
+
7
+ require "minitest/autorun"
8
+ require "minitest/reporters"
9
+ require "dotenv/load"
10
+
11
+ Minitest::Reporters.use!
12
+
13
+ # ensure the environment is available
14
+ class DefaultEnvironmentTest < MiniTest::Test
15
+ def test_default_environment
16
+ assert_equal "test", ENV["TEST_VALUE"]
17
+ end
18
+ end
@@ -1,3 +1,4 @@
1
+ require 'dotenv/load'
1
2
  require 'minitest'
2
3
  require 'minitest/autorun'
3
4
  require 'minitest/reporters'
@@ -5,8 +6,12 @@ require 'minitest/reporters'
5
6
  Minitest::Reporters.use!
6
7
 
7
8
  class <%= config[:name_as_class] %>Test < Minitest::Test
8
- def test_that_it_works
9
- assert true
9
+ def test_name
10
+ assert_equal "Fred", <%= config[:name_as_class] %>.new(name: 'Fred').name
11
+ end
12
+
13
+ def test_default_env_value
14
+ assert_equal "test", ENV["TEST_VALUE"]
10
15
  end
11
16
  end
12
17
 
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
6
+
7
+ gem "minitest"
8
+ gem "minitest-reporters"
9
+
10
+ gem "guard"
11
+ gem "guard-minitest"
12
+
13
+ gem "dotenv"
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ clearing :on
4
+
5
+ guard :minitest, all_after_pass: true, test_folders: ["."], test_file_patterns: "*.rb" do
6
+ # with Minitest::Unit
7
+ watch(/^app\.rb$/) { "./app.rb" }
8
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Spiker
4
- VERSION = "0.1.1"
4
+ VERSION = "0.1.5"
5
5
  end
data/lib/spiker.rb CHANGED
@@ -2,10 +2,20 @@
2
2
 
3
3
  require_relative "spiker/version"
4
4
 
5
+ # Spiker is a simple spike generator.
5
6
  module Spiker
6
7
  class Error < StandardError; end
7
8
 
8
9
  def self.classify(str)
9
10
  str.split(/[^A-Za-z0-0]/).map(&:capitalize).join
10
11
  end
12
+
13
+ def self.snake_case(str)
14
+ # lifted from ActiveSupport inflectors
15
+ str.gsub(/::/, "/")
16
+ .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
17
+ .gsub(/([a-z\d])([A-Z])/, '\1_\2')
18
+ .tr("-", "_")
19
+ .downcase
20
+ end
11
21
  end
data/spiker.gemspec CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
 
11
11
  spec.summary = "Properly spike your Ruby"
12
12
  spec.description = "Scaffold for code spikes, includes simple boilerplate with Minitest + Guard to make red/green work out-of-the-box."
13
- spec.homepage = "http://github.com/norling/spiker."
13
+ spec.homepage = "http://github.com/norlinga/spiker"
14
14
  spec.license = "MIT"
15
15
  spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
16
16
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spiker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Norling
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-01-19 00:00:00.000000000 Z
11
+ date: 2022-01-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -47,19 +47,31 @@ files:
47
47
  - exe/spiker
48
48
  - lib/spiker.rb
49
49
  - lib/spiker/cli.rb
50
- - lib/spiker/generators/multiple.rb
50
+ - lib/spiker/generators/given.rb
51
+ - lib/spiker/generators/multi.rb
51
52
  - lib/spiker/generators/simple.rb
52
- - lib/spiker/generators/templates/simple_app.rb
53
- - lib/spiker/generators/templates/simple_gemfile.rb
54
- - lib/spiker/generators/templates/simple_guardfile.rb
53
+ - lib/spiker/generators/templates/common/basic.env
54
+ - lib/spiker/generators/templates/given/app.rb.erb
55
+ - lib/spiker/generators/templates/given/gemfile.rb
56
+ - lib/spiker/generators/templates/given/guardfile.rb
57
+ - lib/spiker/generators/templates/multi/app.rb.erb
58
+ - lib/spiker/generators/templates/multi/app_test.rb.erb
59
+ - lib/spiker/generators/templates/multi/gemfile.rb
60
+ - lib/spiker/generators/templates/multi/guardfile.rb
61
+ - lib/spiker/generators/templates/multi/rakefile.rb
62
+ - lib/spiker/generators/templates/multi/readme.md.erb
63
+ - lib/spiker/generators/templates/multi/test_helper.rb
64
+ - lib/spiker/generators/templates/simple/app.rb.erb
65
+ - lib/spiker/generators/templates/simple/gemfile.rb
66
+ - lib/spiker/generators/templates/simple/guardfile.rb
55
67
  - lib/spiker/version.rb
56
68
  - spiker.gemspec
57
- homepage: http://github.com/norling/spiker.
69
+ homepage: http://github.com/norlinga/spiker
58
70
  licenses:
59
71
  - MIT
60
72
  metadata:
61
73
  allowed_push_host: https://rubygems.org
62
- homepage_uri: http://github.com/norling/spiker.
74
+ homepage_uri: http://github.com/norlinga/spiker
63
75
  source_code_uri: https://github.com/norlinga/spiker
64
76
  changelog_uri: https://github.com/norlinga/spiker
65
77
  post_install_message:
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "thor/group"
4
- module Spiker
5
- module Generators
6
- # Generates multiple spike files, seperating tests from the
7
- # tested code. For when the spike gets too hairy for a single
8
- # file.
9
- class Multiple < Thor::Group
10
- include Thor::Actions
11
-
12
- argument :name, type: :string
13
- end
14
- end
15
- end
@@ -1,6 +0,0 @@
1
- clearing :on
2
-
3
- guard :minitest, all_after_pass: true, test_folders: ['.'], test_file_patterns: '*.rb' do
4
- # with Minitest::Unit
5
- watch(%r{^app\.rb$}) { './app.rb' }
6
- end