spiker 0.1.1 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
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