roo_on_rails 1.0.2 → 1.1.0

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
  SHA1:
3
- metadata.gz: 213753be11bedb855c752ec49f3ad7eba9b65aaa
4
- data.tar.gz: a6b32aa80c06c64a9ba661933043391d8d407c67
3
+ metadata.gz: b45d0f189c82243df2453d720547a7c7d7100e3b
4
+ data.tar.gz: cee0095e6548020f230d34d803c18ca98440f18c
5
5
  SHA512:
6
- metadata.gz: 359431c5ef3b923886cb8a4f8042d017b8dc650b760da97a7fae2c269cbbcb6c6e1cc74857c8fbd3a504024ab54c19aae584631381e5b00e99be3b60590ac2ef
7
- data.tar.gz: d9bd7a03a37b17e29c469ef89ef7ccbdf2ecfa46f8cf87dcd2361db45cb066c45a18188866811b661835459bdb552e6e3c9e63079ab36c285f32edfe6ace5378
6
+ metadata.gz: bdb535531b139b82612d8c77ac1088de2a1e132961a35866b3aa911ab0b2b5bd27a596f5f136625d5d0e887434ae9610f9de239b766b07a4362c0e88d6833950
7
+ data.tar.gz: 3de9f215afe327094c19a120cd7ba522b987cd4d04cd847ac1cfcf3ca66ada4cbab6cff74675f0e9619d50e715435b9cdaf58c6887ac3325b258fce24be175ae
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ # v1.1.0 (2017-02-20)
2
+
3
+ Features:
4
+
5
+ - `roo_on_rails` command, with basic Heroku app checks
6
+
1
7
  # v1.0.1 (2017-01-20)
2
8
 
3
9
  Bug fixes:
data/Gemfile CHANGED
@@ -2,3 +2,6 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in roo_on_rails.gemspec
4
4
  gemspec
5
+
6
+ gem 'guard'
7
+ gem 'guard-rspec'
data/Guardfile ADDED
@@ -0,0 +1,70 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ ## Uncomment and set this to only include directories you want to watch
5
+ # directories %w(app lib config test spec features) \
6
+ # .select{|d| Dir.exists?(d) ? d : UI.warning("Directory #{d} does not exist")}
7
+
8
+ ## Note: if you are using the `directories` clause above and you are not
9
+ ## watching the project directory ('.'), then you will want to move
10
+ ## the Guardfile to a watched dir and symlink it back, e.g.
11
+ #
12
+ # $ mkdir config
13
+ # $ mv Guardfile config/
14
+ # $ ln -s config/Guardfile .
15
+ #
16
+ # and, you'll have to watch "config/Guardfile" instead of "Guardfile"
17
+
18
+ # Note: The cmd option is now required due to the increasing number of ways
19
+ # rspec may be run, below are examples of the most common uses.
20
+ # * bundler: 'bundle exec rspec'
21
+ # * bundler binstubs: 'bin/rspec'
22
+ # * spring: 'bin/rspec' (This will use spring if running and you have
23
+ # installed the spring binstubs per the docs)
24
+ # * zeus: 'zeus rspec' (requires the server to be started separately)
25
+ # * 'just' rspec: 'rspec'
26
+
27
+ guard :rspec, cmd: "bundle exec rspec" do
28
+ require "guard/rspec/dsl"
29
+ dsl = Guard::RSpec::Dsl.new(self)
30
+
31
+ # Feel free to open issues for suggestions and improvements
32
+
33
+ # RSpec files
34
+ rspec = dsl.rspec
35
+ watch(rspec.spec_helper) { rspec.spec_dir }
36
+ watch(rspec.spec_support) { rspec.spec_dir }
37
+ watch(rspec.spec_files)
38
+
39
+ # Ruby files
40
+ ruby = dsl.ruby
41
+ dsl.watch_spec_files_for(ruby.lib_files)
42
+
43
+ # Rails files
44
+ rails = dsl.rails(view_extensions: %w(erb haml slim))
45
+ dsl.watch_spec_files_for(rails.app_files)
46
+ dsl.watch_spec_files_for(rails.views)
47
+
48
+ watch(rails.controllers) do |m|
49
+ [
50
+ rspec.spec.call("routing/#{m[1]}_routing"),
51
+ rspec.spec.call("controllers/#{m[1]}_controller"),
52
+ rspec.spec.call("acceptance/#{m[1]}")
53
+ ]
54
+ end
55
+
56
+ # Rails config changes
57
+ # watch(rails.spec_helper) { rspec.spec_dir }
58
+ # watch(rails.routes) { "#{rspec.spec_dir}/routing" }
59
+ # watch(rails.app_controller) { "#{rspec.spec_dir}/controllers" }
60
+
61
+ # Capybara features specs
62
+ # watch(rails.view_dirs) { |m| rspec.spec.call("features/#{m[1]}") }
63
+ # watch(rails.layouts) { |m| rspec.spec.call("features/#{m[1]}") }
64
+
65
+ # Turnip features and steps
66
+ # watch(%r{^spec/acceptance/(.+)\.feature$})
67
+ # watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) do |m|
68
+ # Dir[File.join("**/#{m[1]}.feature")][0] || "spec/acceptance"
69
+ # end
70
+ end
data/README.md CHANGED
@@ -20,14 +20,36 @@ Remove the following configuration files:
20
20
 
21
21
  - `newrelic.yml` or `config/newrelic.yml`
22
22
 
23
+ Also remove any other gem-specific configuration from your repository.
24
+
23
25
  And then execute:
24
26
 
25
27
  $ bundle
26
28
 
27
29
  Then re-run your test suite to make sure everything is shipshape.
28
30
 
31
+ ## Usage
32
+
33
+ Run the following from your app's top-level directory:
34
+
35
+ ```
36
+ bundle exec roo_on_rails
37
+ ```
38
+
39
+ This will run a series of checks of your application's setup, as descirbed
40
+ below.
41
+
42
+
29
43
  ## Features
30
44
 
45
+ ### App validation
46
+
47
+ Running the `roo_on_rails` script currently checks for:
48
+
49
+ - compliant Heroku app naming;
50
+ - presence of the Heroku preboot flag.
51
+
52
+
31
53
  ### New Relic configuration
32
54
 
33
55
  We enforce configuration of New Relic.
data/exe/roo_on_rails CHANGED
@@ -1,3 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
+ require 'rubygems'
3
+ require 'pry'
4
+ require 'roo_on_rails/config'
5
+ require 'roo_on_rails/harness'
2
6
 
3
- require "roo_on_rails"
7
+ module RooOnRails
8
+ Harness.new(try_fix: true, context: Config.load).run
9
+ end
@@ -0,0 +1,93 @@
1
+ require 'roo_on_rails/checks'
2
+ require 'roo_on_rails/checks/helpers'
3
+ require 'roo_on_rails/shell'
4
+ require 'bundler'
5
+
6
+ module RooOnRails
7
+ module Checks
8
+ class Base
9
+ include Helpers
10
+
11
+ # Add `dependencies` to the list of prerequisites for this check.
12
+ # If none are specified, return the list of dependencies.
13
+ def self.requires(*dependencies)
14
+ @requires ||= Set.new
15
+ dependencies.any? ? @requires.merge(dependencies) : @requires
16
+ end
17
+
18
+
19
+ def initialize(options = {})
20
+ @options = options.dup
21
+ @fix = @options.delete(:fix) { false }
22
+ @context = @options.delete(:context) { Hashie::Mash.new }
23
+ @shell = @options.delete(:shell) { Shell.new }
24
+ end
25
+
26
+ def run
27
+ resolve dependencies
28
+ say intro
29
+ call
30
+ true
31
+ rescue Failure => e
32
+ raise if e === FinalFailure
33
+ raise unless @fix
34
+ say "\t· attempting to fix", %i[yellow]
35
+ fix
36
+ say "\t· re-checking", %i[yellow]
37
+ call
38
+ end
39
+
40
+ protected
41
+
42
+ attr_reader :shell, :context, :options
43
+
44
+ # Returns prerequisite checks. Can be overriden.
45
+ def dependencies
46
+ self.class.requires.map { |k|
47
+ k.new(fix: @fix, context: @context, shell: @shell, **@options)
48
+ }
49
+ end
50
+
51
+ def intro
52
+ self.class.name
53
+ end
54
+
55
+ def call
56
+ fail! "this check wasn't implemented"
57
+ end
58
+
59
+ def fix
60
+ fail! "can't fix this on my own"
61
+ end
62
+
63
+ def pass(msg)
64
+ say "\t✔ #{msg}", :green
65
+ end
66
+
67
+ def fail!(msg)
68
+ say "\t✘ #{msg}", :red
69
+ raise Failure, msg
70
+ end
71
+
72
+ def final_fail!(msg)
73
+ say "\t✘ #{msg}", :red
74
+ raise FinalFailure, msg
75
+ end
76
+
77
+ # Return a unique signature for this check
78
+ def signature
79
+ [self.class.name]
80
+ end
81
+
82
+ private
83
+
84
+ # Run each dependency, then mark them as run.
85
+ def resolve(deps)
86
+ deps.each do |dep|
87
+ context.deps ||= {}
88
+ context.deps[dep.signature.join('/')] ||= dep.run
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,20 @@
1
+ require 'roo_on_rails/checks/base'
2
+
3
+ module RooOnRails
4
+ module Checks
5
+ # Base class for checks that are applicable per-environment.
6
+ # The `env` passed to the initializer becomes part of the check signature.
7
+ class EnvSpecific < Base
8
+ attr_reader :env
9
+
10
+ def initialize(**options)
11
+ super(options)
12
+ @env = @options[:env]
13
+ end
14
+
15
+ def signature
16
+ super + [@env]
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,22 @@
1
+ require 'roo_on_rails/checks/env_specific'
2
+ require 'roo_on_rails/checks/heroku/app_exists'
3
+ require 'roo_on_rails/checks/heroku/preboot_enabled'
4
+
5
+ module RooOnRails
6
+ module Checks
7
+ class Environment < EnvSpecific
8
+ requires Heroku::PrebootEnabled
9
+
10
+ def call
11
+ # nothing to do
12
+ end
13
+
14
+ protected
15
+
16
+ def intro
17
+ "Validated #{bold @env} environment"
18
+ end
19
+ end
20
+ end
21
+ end
22
+
@@ -0,0 +1,27 @@
1
+ require 'roo_on_rails/checks/base'
2
+
3
+ module RooOnRails
4
+ module Checks
5
+ module Git
6
+ class Origin < Base
7
+ # Output context:
8
+ # - git_org (string)
9
+ # - git_repo (string)
10
+ def intro
11
+ "Checking your Git origin remote..."
12
+ end
13
+
14
+ def call
15
+ status, url = shell.run "git config remote.origin.url"
16
+ fail! "Origin does not seem to be configured." unless status
17
+
18
+ org, repo = url.strip.sub(%r{\.git$}, '').split(%r{[:/]}).last(2)
19
+ context.git_org = org
20
+ context.git_repo = repo
21
+ pass "organisation #{bold org}, repository: #{bold repo}"
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+
@@ -0,0 +1,27 @@
1
+ require 'forwardable'
2
+ require 'singleton'
3
+ require 'thor'
4
+
5
+ module RooOnRails
6
+ module Checks
7
+ module Helpers
8
+ class Receiver < Thor::Group
9
+ include Singleton
10
+ include Thor::Actions
11
+ end
12
+
13
+ def self.included(by)
14
+ by.class_eval do
15
+ extend Forwardable
16
+ delegate %i[say set_color] => :'RooOnRails::Checks::Helpers::Receiver.instance'
17
+ end
18
+ end
19
+
20
+ def bold(str)
21
+ "\e[1;4m#{str}\e[22;24m"
22
+ end
23
+ end
24
+ end
25
+ end
26
+
27
+
@@ -0,0 +1,65 @@
1
+ require 'roo_on_rails/checks/env_specific'
2
+ require 'roo_on_rails/checks/git/origin'
3
+ require 'roo_on_rails/checks/heroku/token'
4
+ require 'active_support/core_ext/enumerable'
5
+
6
+ module RooOnRails
7
+ module Checks
8
+ module Heroku
9
+ # Check if a corresponding app exists on Heroku (for a given environment)
10
+ #
11
+ # Input context
12
+ # - git_repo: the name of the repository
13
+ # - heroku.api_client: a connected PlatformAPI client
14
+ # - app_name_stem (optional): a name override
15
+ #
16
+ # Output context:
17
+ # - heroku.app.{env}: an app name.
18
+ class AppExists < EnvSpecific
19
+ requires Git::Origin, Heroku::Token
20
+
21
+ def intro
22
+ "Checking if #{bold env} app exist..."
23
+ end
24
+
25
+ def call
26
+ all_apps = client.app.list.map { |a| a['name'] }
27
+ matches = all_apps.select { |a| candidates.include?(a) }
28
+
29
+ if matches.empty?
30
+ fail! "no apps with matching names detected"
31
+ end
32
+
33
+ if matches.many?
34
+ final_fail! "multiple matching apps detected: #{candidates.map { |c| bold c}.join(', ')}"
35
+ end
36
+
37
+ context.heroku.app![env] = matches.first
38
+ pass "found app #{bold matches.first}"
39
+ end
40
+
41
+ private
42
+
43
+ def name_stem
44
+ context.app_name_stem || context.git_repo.delete('.')
45
+ end
46
+
47
+ def candidates
48
+ [
49
+ ['deliveroo', 'roo', nil],
50
+ [name_stem],
51
+ [env],
52
+ ].tap { |a|
53
+ a.replace a.first.product(*a[1..-1])
54
+ }.map { |c|
55
+ c.compact.join('-')
56
+ }
57
+ end
58
+
59
+ def client
60
+ context.heroku.api_client
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,30 @@
1
+ require 'roo_on_rails/checks/base'
2
+ require 'roo_on_rails/checks/heroku/toolbelt_working'
3
+
4
+ module RooOnRails
5
+ module Checks
6
+ module Heroku
7
+ class Login < Base
8
+ requires ToolbeltWorking
9
+
10
+ def intro
11
+ "Checking if you're signed in to Heroku..."
12
+ end
13
+
14
+ def call
15
+ status, email = shell.run "heroku whoami"
16
+ if status
17
+ pass "logged in as #{bold email.strip}"
18
+ else
19
+ fail! "not logged in"
20
+ end
21
+ end
22
+
23
+ def fix
24
+ shell.run! "heroku auth:login --sso"
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+
@@ -0,0 +1,43 @@
1
+ require 'roo_on_rails/checks/env_specific'
2
+ require 'roo_on_rails/checks/git/origin'
3
+ require 'roo_on_rails/checks/heroku/app_exists'
4
+
5
+ module RooOnRails
6
+ module Checks
7
+ module Heroku
8
+ # Input context
9
+ # - heroku.api_client: a connected PlatformAPI client
10
+ # - heroku.app.{env}: an existing app name.
11
+ class PrebootEnabled < EnvSpecific
12
+ requires Git::Origin, Heroku::AppExists
13
+
14
+ def intro
15
+ "Checking preboot status on #{bold app_name}"
16
+ end
17
+
18
+ def call
19
+ status = client.app_feature.info(app_name, 'preboot')
20
+ if status['enabled']
21
+ pass 'preboot enabled'
22
+ else
23
+ fail! 'preboot disabled'
24
+ end
25
+ end
26
+
27
+ private
28
+
29
+ def fix
30
+ client.app_feature.update(app_name, 'preboot', enabled: true)
31
+ end
32
+
33
+ def app_name
34
+ context.heroku.app[env]
35
+ end
36
+
37
+ def client
38
+ context.heroku.api_client
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,27 @@
1
+ require 'roo_on_rails/checks/base'
2
+ require 'roo_on_rails/checks/heroku/login'
3
+ require 'platform-api'
4
+
5
+ module RooOnRails
6
+ module Checks
7
+ module Heroku
8
+ # Output context:
9
+ # - heroku.api_client: a connected PlatformAPI client
10
+ class Token < Base
11
+ requires Login
12
+
13
+ def intro
14
+ "Obtaining Heroku auth token..."
15
+ end
16
+
17
+ def call
18
+ status, token = shell.run "heroku auth:token"
19
+ fail! "could not get a token" unless status
20
+
21
+ context.heroku!.api_client = PlatformAPI.connect_oauth(token.strip)
22
+ pass "connected to Heroku's API"
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,23 @@
1
+ require 'roo_on_rails/checks/base'
2
+
3
+ module RooOnRails
4
+ module Checks
5
+ module Heroku
6
+ class ToolbeltInstalled < Base
7
+ def intro
8
+ "Checking if the Heroku Toolbelt is installed..."
9
+ end
10
+
11
+ def call
12
+ status, path = shell.run "which heroku"
13
+ if status
14
+ pass "found #{bold path.strip} binary"
15
+ else
16
+ fail! "'heroku' binary missing"
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+
@@ -0,0 +1,24 @@
1
+ require 'roo_on_rails/checks/base'
2
+ require 'roo_on_rails/checks/heroku/toolbelt_installed'
3
+
4
+ module RooOnRails
5
+ module Checks
6
+ module Heroku
7
+ class ToolbeltWorking < Base
8
+ requires ToolbeltInstalled
9
+
10
+ def intro
11
+ "Checking if the Heroku Toolbelt is working..."
12
+ end
13
+
14
+ def call
15
+ if shell.run? 'heroku status > /dev/null'
16
+ pass 'read heroku status'
17
+ else
18
+ fail! "could not run 'heroku status'"
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,7 @@
1
+ module RooOnRails
2
+ module Checks
3
+ Failure = Class.new(StandardError)
4
+ FinalFailure = Class.new(Failure)
5
+ end
6
+ end
7
+
@@ -0,0 +1,13 @@
1
+ require 'hashie'
2
+ require 'pathname'
3
+
4
+ module RooOnRails
5
+ class Config < Hashie::Mash
6
+ class << self
7
+ def load
8
+ path = Pathname '.roo_on_rails.yml'
9
+ path.exist? ? super(path) : new
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,28 @@
1
+ require 'thor'
2
+ require 'hashie'
3
+ require 'roo_on_rails/checks/environment'
4
+
5
+ module RooOnRails
6
+ class Harness
7
+ include Thor::Shell
8
+
9
+ def initialize(try_fix: false, context: nil)
10
+ @try_fix = try_fix
11
+ @context = context || Hashie::Mash.new
12
+ end
13
+
14
+ def run
15
+ [
16
+ Checks::Environment.new(env: 'staging', fix: @try_fix, context: @context),
17
+ Checks::Environment.new(env: 'production', fix: @try_fix, context: @context),
18
+ ].each(&:run)
19
+ self
20
+ rescue Shell::CommandFailed
21
+ say 'A command failed to run, aborting', %i[bold red]
22
+ exit 2
23
+ rescue Checks::Failure
24
+ say 'A check failed, exiting', %i[bold red]
25
+ exit 1
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,21 @@
1
+ require 'bundler'
2
+ require 'roo_on_rails/checks'
3
+
4
+ module RooOnRails
5
+ class Shell
6
+ CommandFailed = Class.new(StandardError)
7
+
8
+ def run(cmd)
9
+ result = Bundler.with_clean_env { %x{#{cmd}} }
10
+ return [$?.success?, result]
11
+ end
12
+
13
+ def run!(cmd)
14
+ raise CommandFailed.new(cmd) unless run(cmd).first
15
+ end
16
+
17
+ def run?(cmd)
18
+ run(cmd).first
19
+ end
20
+ end
21
+ end
@@ -1,3 +1,3 @@
1
1
  module RooOnRails
2
- VERSION = '1.0.2'
2
+ VERSION = '1.1.0'
3
3
  end
data/lib/roo_on_rails.rb CHANGED
@@ -1,7 +1,9 @@
1
1
  require 'roo_on_rails/version'
2
- require 'dotenv/rails-now'
3
2
 
4
3
  module RooOnRails
5
4
  end
6
5
 
7
- require 'roo_on_rails/railtie' if defined?(Rails)
6
+ if defined?(Rails)
7
+ require 'dotenv/rails-now'
8
+ require 'roo_on_rails/railtie'
9
+ end
data/roo_on_rails.gemspec CHANGED
@@ -24,6 +24,8 @@ Gem::Specification.new do |spec|
24
24
  spec.add_runtime_dependency 'dotenv-rails', '~> 2.1'
25
25
  spec.add_runtime_dependency 'newrelic_rpm', '~> 3.17'
26
26
  spec.add_runtime_dependency 'rails', '~> 5.0'
27
+ spec.add_runtime_dependency 'platform-api', '~> 0.8'
28
+ spec.add_runtime_dependency 'hashie', '~> 3.4'
27
29
 
28
30
  spec.add_development_dependency "bundler", "~> 1.13"
29
31
  spec.add_development_dependency "rake", "~> 10.0"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roo_on_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julien Letessier
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-02-09 00:00:00.000000000 Z
11
+ date: 2017-02-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dotenv-rails
@@ -52,6 +52,34 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '5.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: platform-api
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.8'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.8'
69
+ - !ruby/object:Gem::Dependency
70
+ name: hashie
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.4'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.4'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: bundler
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -135,6 +163,7 @@ files:
135
163
  - ".travis.yml"
136
164
  - CHANGELOG.md
137
165
  - Gemfile
166
+ - Guardfile
138
167
  - LICENSE.txt
139
168
  - README.md
140
169
  - Rakefile
@@ -142,8 +171,23 @@ files:
142
171
  - bin/setup
143
172
  - exe/roo_on_rails
144
173
  - lib/roo_on_rails.rb
174
+ - lib/roo_on_rails/checks.rb
175
+ - lib/roo_on_rails/checks/base.rb
176
+ - lib/roo_on_rails/checks/env_specific.rb
177
+ - lib/roo_on_rails/checks/environment.rb
178
+ - lib/roo_on_rails/checks/git/origin.rb
179
+ - lib/roo_on_rails/checks/helpers.rb
180
+ - lib/roo_on_rails/checks/heroku/app_exists.rb
181
+ - lib/roo_on_rails/checks/heroku/login.rb
182
+ - lib/roo_on_rails/checks/heroku/preboot_enabled.rb
183
+ - lib/roo_on_rails/checks/heroku/token.rb
184
+ - lib/roo_on_rails/checks/heroku/toolbelt_installed.rb
185
+ - lib/roo_on_rails/checks/heroku/toolbelt_working.rb
186
+ - lib/roo_on_rails/config.rb
145
187
  - lib/roo_on_rails/default.env
188
+ - lib/roo_on_rails/harness.rb
146
189
  - lib/roo_on_rails/railtie.rb
190
+ - lib/roo_on_rails/shell.rb
147
191
  - lib/roo_on_rails/version.rb
148
192
  - roo_on_rails.gemspec
149
193
  homepage: https://github.com/deliveroo/roo_on_rails