ci-helper 0.1.1 → 0.2.6

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: be5f0daccd23cb1ced8508dd4dd4048925d62fa6074e0fece72838f081c5e255
4
- data.tar.gz: eb5c8470d8b1123d41d7a4125c78dd1635fdb1dd8044afa0abc7b0da1c1fa8d6
3
+ metadata.gz: e4041f65da690c41117fb7784cd41dba96dd13313e6e9f3caaeddbb55b585b4e
4
+ data.tar.gz: aa4d96e07893b21e88259f6f6d39fa438f9af9382ade808f30f32c7accf42988
5
5
  SHA512:
6
- metadata.gz: '0209abc7579fb06c9e86e70bf4a76312a0cc78130c416660395aec20b7ceaecd1ae2b78aa47518c57dd38f1344146b65baaeaeb29427259195a514e4e1365a4b'
7
- data.tar.gz: 48522ba56eb1ce4d907a2d52b21fb71d340c84f2b64ffb9b3923810a758d18b5c01fb5d782f09cefde340e8d0e9e67038704dcff0e5a55eca7ce39d8d5fa3853
6
+ metadata.gz: 4ce17c1aa8fa9f7039ce3adaafdac51da7256c13e76bda63b38d3d6e69a477d7a1a630f08515434ae45bee55158044db566f98524f563427c7111eb6f66ebd11
7
+ data.tar.gz: a781c0965d67bf987bda0ef703addc8a892bb31b317a0a4efe280fec5fc874e5a34393048d85d9c02fa82222ff493c550143e421dbb242d4cf519571103ca770
@@ -13,8 +13,11 @@ on:
13
13
  pull_request:
14
14
  branches: [ master ]
15
15
 
16
+ env:
17
+ FULL_COVERAGE_CHECK: true
18
+
16
19
  jobs:
17
- test:
20
+ test-latest:
18
21
 
19
22
  runs-on: ubuntu-latest
20
23
 
@@ -24,7 +27,7 @@ jobs:
24
27
  # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
25
28
  # change this to (see https://github.com/ruby/setup-ruby#versioning):
26
29
  # uses: ruby/setup-ruby@v1
27
- uses: ruby/setup-ruby@ec106b438a1ff6ff109590de34ddc62c540232e0
30
+ uses: ruby/setup-ruby@v1
28
31
  with:
29
32
  ruby-version: 2.7
30
33
  - name: Install dependencies
@@ -33,6 +36,8 @@ jobs:
33
36
  run: bundle exec rake install
34
37
  - name: Run Linter
35
38
  run: ci-helper RubocopLint
39
+ - name: Check missed spec suffixes
40
+ run: ci-helper CheckSpecSuffixes --extra-paths spec/*.rb --ignored-paths spec/*_helper.rb
36
41
  - name: Run specs
37
42
  run: ci-helper RunSpecs
38
43
  - name: Audit
@@ -41,3 +46,39 @@ jobs:
41
46
  uses: coverallsapp/github-action@v1.1.1
42
47
  with:
43
48
  github-token: ${{ secrets.GITHUB_TOKEN }}
49
+ specs-for-26:
50
+ runs-on: ubuntu-latest
51
+
52
+ steps:
53
+ - uses: actions/checkout@v2
54
+ - name: Set up Ruby
55
+ # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
56
+ # change this to (see https://github.com/ruby/setup-ruby#versioning):
57
+ # uses: ruby/setup-ruby@v1
58
+ uses: ruby/setup-ruby@v1
59
+ with:
60
+ ruby-version: 2.6
61
+ - name: Install dependencies
62
+ run: bundle install && gem install bundler-audit
63
+ - name: Build and install gem to systems gems
64
+ run: bundle exec rake install
65
+ - name: Run specs
66
+ run: ci-helper RunSpecs
67
+ specs-for-25:
68
+ runs-on: ubuntu-latest
69
+
70
+ steps:
71
+ - uses: actions/checkout@v2
72
+ - name: Set up Ruby
73
+ # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
74
+ # change this to (see https://github.com/ruby/setup-ruby#versioning):
75
+ # uses: ruby/setup-ruby@v1
76
+ uses: ruby/setup-ruby@v1
77
+ with:
78
+ ruby-version: 2.5
79
+ - name: Install dependencies
80
+ run: bundle install && gem install bundler-audit
81
+ - name: Build and install gem to systems gems
82
+ run: bundle exec rake install
83
+ - name: Run specs
84
+ run: ci-helper RunSpecs
data/.gitignore CHANGED
@@ -6,3 +6,5 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
+
10
+ Gemfile.lock
@@ -10,3 +10,7 @@ Naming/MethodParameterName:
10
10
 
11
11
  RSpec/EmptyLineAfterHook:
12
12
  Enabled: false
13
+
14
+ Naming/FileName:
15
+ Exclude:
16
+ - lib/ci-helper.rb
data/README.md CHANGED
@@ -1,26 +1,122 @@
1
- # CIHelper [![Actions Status](https://github.com/umbrellio/ci_helper/workflows/Ruby/badge.svg)](https://github.com/umbrellio/ci_helper/actions) [![Coverage Status](https://coveralls.io/repos/github/umbrellio/ci_helper/badge.svg?branch=master)](https://coveralls.io/github/umbrellio/ci_helper?branch=master)
2
-
3
- Documentation about gem here.
1
+ # CIHelper [![Actions Status](https://github.com/umbrellio/ci_helper/workflows/Ruby/badge.svg)](https://github.com/umbrellio/ci_helper/actions) [![Coverage Status](https://coveralls.io/repos/github/umbrellio/ci_helper/badge.svg?branch=master)](https://coveralls.io/github/umbrellio/ci_helper?branch=master) [![Gem Version](https://badge.fury.io/rb/ci-helper.svg)](https://badge.fury.io/rb/ci-helper)
4
2
 
5
3
  ## Installation
6
4
 
7
5
  Add this line to your application's Gemfile:
8
6
 
9
7
  ```ruby
10
- gem 'ci_helper'
8
+ gem "ci-helper", require: false
11
9
  ```
12
10
 
13
11
  And then execute:
12
+ ```bash
13
+ $ bundle install
14
+ ```
15
+ Or install it yourself as:
16
+ ```bash
17
+ $ gem install ci_helper
18
+ ```
14
19
 
15
- $ bundle install
20
+ ## Usage
16
21
 
17
- Or install it yourself as:
22
+ ### Command Line
18
23
 
19
- $ gem install ci_helper
24
+ You can use this gem as command line utility. For example, to lint project by rubocop,
25
+ execute the following command in the project root:
26
+ ```bash
27
+ $ ci-helper RubocopLint # Here's RubocopLint is a command
28
+ ```
20
29
 
21
- ## Usage
30
+ A command can accept list of options (parameters). Option values are passed through flags.
31
+ For example, the BundlerAudit command accepts the ignored_advisories option
32
+ You can set a value of this option by setting the flag `--ignored-advisories ignored-advisory`.
33
+ It should be noted that all hyphens in flag names are automatically replaced with underscores.
34
+ ```bash
35
+ $ ci-helper BundlerAudit --ignored-advisories first,second
36
+ ```
37
+
38
+ List of available commands:
39
+
40
+ * **BundlerAudit** — executes `bundler-audit`. Accepted flags: `--ignored-advisories`.
41
+ * `--ignored-advisories [values]` — accepts advisory codes, delimited by comma.
42
+ * **CheckDBDevelopment** — executes rails db commands (`db:drop`, `db:create`, `db:migrate`)
43
+ and seeds database. Does not accept flags.
44
+ * **CheckDBRollback** — executes rails db commands with additional command
45
+ `db:rollback_new_migrations`, which rollbacks migrations, added in tested branch.
46
+ Does not accept flags. Gem provides this rake task, but only for `Sequel`.
47
+ If you want to use `ActiveRecord::Migrator`, you'll have to write rake task by your own.
48
+ * **RubocopLint** — executes rubocop linter. Does not accept flags.
49
+ * **RunSpecs** — executes `rspec` in project root.
50
+ Accepted flags: `--node-index`, `node-total`, `with-database`, `split-resultset`.
51
+ * `--node-index` — if you run specs in parallel in CI, then you might use this flag.
52
+ * `--node-total` — if you run specs in parallel in CI, then you might use this flag.
53
+ * `--with-database` — if you want to prepare database before executing specs,
54
+ you should set this flag to `true`.
55
+ * `--split-resultset` — if you run specs in parallel in CI,
56
+ then you might use this flag to `true`. If this flag set to true,
57
+ final `.resultset.json` will be renamed to `.resultset.#{node_index}.json`
58
+ * **CheckSpecSuffixes** — checks specs in the spec subdirectories for `_spec` suffix,
59
+ by default ignores directories `support`, `factories` and files with `context` suffix.
60
+ Accepted flags: `--extra_paths`, `--ignored_paths`.
61
+ * `--extra-paths [values]` - accepts additional path patterns that should be scanned,
62
+ delimited by coma.
63
+ * `--ignored-paths [values]` - accepts path patterns that should be ignored,
64
+ delimited by coma.
65
+
66
+ ### Rake Tasks
22
67
 
23
- TODO: Write usage instructions here
68
+ As you can see, some commands use generic rake tasks. To make tasks available in your application,
69
+ you need to require the file `ci_helper/railtie`. Also, you can require it directly in `Gemfile`:
70
+ `gem "ci-helper", require: "ci_helper/railtie, group: :test`.
71
+ Or if you haven't set `require` option to `false`, rake tasks loads automatically.
72
+
73
+ ### Script
74
+
75
+ Also, you can write your own script, which can executes this commands by calling classes:
76
+ `CIHelper::Commands::#{command_name}`. For example,
77
+ if you want to execute `RunSpecs` command in your script, you can write following lines:
78
+ ```ruby
79
+ begin
80
+ CIHelper::Commands::RunSpecs.call!(with_database: "true") # returned value is exit code.
81
+ rescue CIHelper::Commands::Error => e # Command raise error with this class if something went wrong.
82
+ abort e.message
83
+ end
84
+ ```
85
+
86
+ ## Adding your own commands
87
+
88
+ You can write plugins (gems) that add new commands.
89
+ You just need create gem with following structure:
90
+ ```
91
+ - lib
92
+ - ci_helper
93
+ - commands
94
+ - cool_command.rb
95
+ ```
96
+
97
+ Where your `CoolCoomand` class may look something like this:
98
+ ```ruby
99
+ module CIHelper
100
+ module Commands
101
+ class CoolCommand < BaseCommand
102
+ def call
103
+ execute("ls #{options[:cool_options]}")
104
+ end
105
+ end
106
+ end
107
+ end
108
+ ```
109
+
110
+ Then you add your gem to a Gemfile:
111
+ ```ruby
112
+ gem "ci-helper", require: false
113
+ gem "ci-helper-plugin-gem", require: false
114
+ ```
115
+
116
+ And now, you can use your custom command with command line tool:
117
+ ```bash
118
+ $ ci-helper CoolCommand --cool-options option_value
119
+ ```
24
120
 
25
121
  ## Contributing
26
122
 
@@ -30,3 +126,11 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/umbrel
30
126
  ## License
31
127
 
32
128
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
129
+
130
+ ## Authors
131
+
132
+ Created by Ivan Chernov.
133
+
134
+ <a href="https://github.com/umbrellio/">
135
+ <img style="float: left;" src="https://umbrellio.github.io/Umbrellio/supported_by_umbrellio.svg" alt="Supported by Umbrellio" width="439" height="72">
136
+ </a>
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
12
12
  spec.description = "CIHelper is a gem with Continuous Integration helpers for Ruby"
13
13
  spec.homepage = "https://github.com/umbrellio/ci_helper"
14
14
  spec.license = "MIT"
15
- spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0")
15
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.5.0")
16
16
 
17
17
  spec.metadata["homepage_uri"] = spec.homepage
18
18
  spec.metadata["source_code_uri"] = "https://github.com/umbrellio/ci_helper"
@@ -26,6 +26,7 @@ Gem::Specification.new do |spec|
26
26
 
27
27
  spec.add_runtime_dependency "colorize", "~> 0.8"
28
28
  spec.add_runtime_dependency "dry-inflector", "~> 0.2"
29
+ spec.add_runtime_dependency "umbrellio-sequel-plugins", "~> 0.4"
29
30
 
30
31
  spec.add_development_dependency "bundler"
31
32
  spec.add_development_dependency "bundler-audit"
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "./ci_helper"
@@ -1,5 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ module CIHelper
4
+ end
5
+
3
6
  require "colorized_string"
4
7
  require "delegate"
5
8
  require "dry/inflector"
@@ -14,5 +17,4 @@ require "ci_helper/tools/colorize"
14
17
  require "ci_helper/tools/inflector"
15
18
  require "ci_helper/version"
16
19
 
17
- module CIHelper
18
- end
20
+ require "ci_helper/railtie" if defined?(Rails)
@@ -54,6 +54,11 @@ module CIHelper
54
54
  raise Error, message
55
55
  end
56
56
 
57
+ def plural_option(key)
58
+ return [] unless options.key?(key)
59
+ options[key].split(",")
60
+ end
61
+
57
62
  def path
58
63
  @path ||= Pathname.pwd
59
64
  end
@@ -11,14 +11,14 @@ module CIHelper
11
11
 
12
12
  def audit_cmd
13
13
  (+"bundle exec bundler-audit check --update").tap do |audit_cmd|
14
- if ignored_advisories&.any?
14
+ if ignored_advisories.any?
15
15
  audit_cmd << " --ignore #{ignored_advisories.join(" ")}"
16
16
  end
17
17
  end
18
18
  end
19
19
 
20
20
  def ignored_advisories
21
- @ignored_advisories ||= options[:ignored_advisories]&.split(",")
21
+ @ignored_advisories ||= plural_option(:ignored_advisories)
22
22
  end
23
23
  end
24
24
  end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CIHelper
4
+ module Commands
5
+ class CheckSpecSuffixes < BaseCommand
6
+ def call
7
+ paths = target_paths.reject { |path| path.end_with?("_spec.rb") }
8
+ fail!("Detected specs without _spec suffix: #{paths.join(" ")}") if paths.any?
9
+ 0
10
+ end
11
+
12
+ private
13
+
14
+ def target_paths
15
+ spec_paths + extra_paths - ignored_paths
16
+ end
17
+
18
+ def spec_paths
19
+ base_paths.select do |path|
20
+ next if path.start_with?("spec/support")
21
+ next if path.start_with?("spec/factories")
22
+ next if path.end_with?("context.rb")
23
+ true
24
+ end
25
+ end
26
+
27
+ def base_paths
28
+ Dir["spec/*/**/*.rb"]
29
+ end
30
+
31
+ def extra_paths
32
+ @extra_paths ||= plural_option(:extra_paths).flat_map { |path| Dir[path] }
33
+ end
34
+
35
+ def ignored_paths
36
+ @ignored_paths ||= plural_option(:ignored_paths).flat_map { |path| Dir[path] }
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CIHelper
4
+ class Railtie < Rails::Railtie
5
+ rake_tasks do
6
+ load "tasks/sequel_management.rake"
7
+ end
8
+ end
9
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CIHelper
4
- VERSION = "0.1.1"
4
+ VERSION = "0.2.6"
5
5
  end
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "logger"
4
+ require "sequel/timestamp_migrator_undo_extension"
5
+
6
+ class SequelManagement
7
+ include Rake::DSL
8
+
9
+ MIGRATIONS_PATH = "db/migrate"
10
+
11
+ def initialize
12
+ self.logger = Logger.new(STDOUT)
13
+
14
+ define_db_task!
15
+ end
16
+
17
+ private
18
+
19
+ attr_accessor :logger
20
+
21
+ def migrations_path
22
+ self.class::MIGRATIONS_PATH
23
+ end
24
+
25
+ def define_db_task!
26
+ namespace :db do
27
+ desc "Rollback all migrations, which doesn't exist in master branch"
28
+ task rollback_new_migrations: :environment do
29
+ abort "Shouldn't run in production mode!" if Rails.env.production?
30
+
31
+ logger.info "Begin rolling back new migrations"
32
+
33
+ original_migrations = `#{git_command}`.split.map { |path| File.basename(path) }
34
+ migrations_to_rollback = (migrator.applied_migrations - original_migrations).sort.reverse
35
+
36
+ next if migrations_to_rollback.empty?
37
+
38
+ logger.info "Rolling back migrations:"
39
+ logger.info migrations_to_rollback.join("\n")
40
+
41
+ rollback!(migrations_to_rollback)
42
+ end
43
+ end
44
+ end
45
+
46
+ def git_command
47
+ "git ls-tree --name-only origin/master #{migrations_path}/"
48
+ end
49
+
50
+ def migrator
51
+ @migrator ||= begin
52
+ full_path = Rails.root.join(migrations_path)
53
+ Sequel::TimestampMigrator.new(DB, full_path, allow_missing_migration_files: true)
54
+ end
55
+ end
56
+
57
+ def rollback!(migrations)
58
+ migrations.each do |migration|
59
+ migrator.undo(migration.to_i)
60
+ rescue Sequel::Migrator::Error => error
61
+ if error.message.include?("does not exist in the filesystem")
62
+ logger.info error.message
63
+ else
64
+ raise error
65
+ end
66
+ end
67
+ end
68
+ end
69
+
70
+ SequelManagement.new
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ci-helper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - JustAnotherDude
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-06-10 00:00:00.000000000 Z
11
+ date: 2020-09-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: umbrellio-sequel-plugins
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.4'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.4'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: bundler
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -164,7 +178,6 @@ files:
164
178
  - ".rspec"
165
179
  - ".rubocop.yml"
166
180
  - Gemfile
167
- - Gemfile.lock
168
181
  - LICENSE.txt
169
182
  - README.md
170
183
  - Rakefile
@@ -172,17 +185,21 @@ files:
172
185
  - bin/setup
173
186
  - ci_helper.gemspec
174
187
  - exe/ci-helper
188
+ - lib/ci-helper.rb
175
189
  - lib/ci_helper.rb
176
190
  - lib/ci_helper/cli.rb
177
191
  - lib/ci_helper/commands.rb
178
192
  - lib/ci_helper/commands/bundler_audit.rb
179
193
  - lib/ci_helper/commands/check_db_development.rb
180
194
  - lib/ci_helper/commands/check_db_rollback.rb
195
+ - lib/ci_helper/commands/check_spec_suffixes.rb
181
196
  - lib/ci_helper/commands/rubocop_lint.rb
182
197
  - lib/ci_helper/commands/run_specs.rb
198
+ - lib/ci_helper/railtie.rb
183
199
  - lib/ci_helper/tools/colorize.rb
184
200
  - lib/ci_helper/tools/inflector.rb
185
201
  - lib/ci_helper/version.rb
202
+ - lib/tasks/sequel_management.rake
186
203
  homepage: https://github.com/umbrellio/ci_helper
187
204
  licenses:
188
205
  - MIT
@@ -197,14 +214,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
197
214
  requirements:
198
215
  - - ">="
199
216
  - !ruby/object:Gem::Version
200
- version: 2.7.0
217
+ version: 2.5.0
201
218
  required_rubygems_version: !ruby/object:Gem::Requirement
202
219
  requirements:
203
220
  - - ">="
204
221
  - !ruby/object:Gem::Version
205
222
  version: '0'
206
223
  requirements: []
207
- rubygems_version: 3.1.3
224
+ rubygems_version: 3.1.4
208
225
  signing_key:
209
226
  specification_version: 4
210
227
  summary: Continuous Integration helpers for Ruby
@@ -1,104 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- ci-helper (0.1.1)
5
- colorize (~> 0.8)
6
- dry-inflector (~> 0.2)
7
-
8
- GEM
9
- remote: https://rubygems.org/
10
- specs:
11
- activesupport (6.0.3.1)
12
- concurrent-ruby (~> 1.0, >= 1.0.2)
13
- i18n (>= 0.7, < 2)
14
- minitest (~> 5.1)
15
- tzinfo (~> 1.1)
16
- zeitwerk (~> 2.2, >= 2.2.2)
17
- ast (2.4.1)
18
- bundler-audit (0.6.1)
19
- bundler (>= 1.2.0, < 3)
20
- thor (~> 0.18)
21
- coderay (1.1.3)
22
- colorize (0.8.1)
23
- concurrent-ruby (1.1.6)
24
- diff-lcs (1.3)
25
- docile (1.3.2)
26
- dry-inflector (0.2.0)
27
- i18n (1.8.3)
28
- concurrent-ruby (~> 1.0)
29
- jaro_winkler (1.5.4)
30
- method_source (1.0.0)
31
- minitest (5.14.1)
32
- parallel (1.19.1)
33
- parser (2.7.1.3)
34
- ast (~> 2.4.0)
35
- pry (0.13.1)
36
- coderay (~> 1.1)
37
- method_source (~> 1.0)
38
- rack (2.2.2)
39
- rainbow (3.0.0)
40
- rake (13.0.1)
41
- rexml (3.2.4)
42
- rspec (3.9.0)
43
- rspec-core (~> 3.9.0)
44
- rspec-expectations (~> 3.9.0)
45
- rspec-mocks (~> 3.9.0)
46
- rspec-core (3.9.2)
47
- rspec-support (~> 3.9.3)
48
- rspec-expectations (3.9.2)
49
- diff-lcs (>= 1.2.0, < 2.0)
50
- rspec-support (~> 3.9.0)
51
- rspec-mocks (3.9.1)
52
- diff-lcs (>= 1.2.0, < 2.0)
53
- rspec-support (~> 3.9.0)
54
- rspec-support (3.9.3)
55
- rubocop (0.81.0)
56
- jaro_winkler (~> 1.5.1)
57
- parallel (~> 1.10)
58
- parser (>= 2.7.0.1)
59
- rainbow (>= 2.2.2, < 4.0)
60
- rexml
61
- ruby-progressbar (~> 1.7)
62
- unicode-display_width (>= 1.4.0, < 2.0)
63
- rubocop-config-umbrellio (0.81.0.78)
64
- rubocop (= 0.81.0)
65
- rubocop-performance (= 1.5.2)
66
- rubocop-rails (= 2.5.0)
67
- rubocop-rspec (= 1.38.1)
68
- rubocop-performance (1.5.2)
69
- rubocop (>= 0.71.0)
70
- rubocop-rails (2.5.0)
71
- activesupport
72
- rack (>= 1.1)
73
- rubocop (>= 0.72.0)
74
- rubocop-rspec (1.38.1)
75
- rubocop (>= 0.68.1)
76
- ruby-progressbar (1.10.1)
77
- simplecov (0.18.5)
78
- docile (~> 1.1)
79
- simplecov-html (~> 0.11)
80
- simplecov-html (0.12.2)
81
- simplecov-lcov (0.8.0)
82
- thor (0.20.3)
83
- thread_safe (0.3.6)
84
- tzinfo (1.2.7)
85
- thread_safe (~> 0.1)
86
- unicode-display_width (1.7.0)
87
- zeitwerk (2.3.0)
88
-
89
- PLATFORMS
90
- ruby
91
-
92
- DEPENDENCIES
93
- bundler
94
- bundler-audit
95
- ci-helper!
96
- pry
97
- rake
98
- rspec
99
- rubocop-config-umbrellio
100
- simplecov
101
- simplecov-lcov
102
-
103
- BUNDLED WITH
104
- 2.1.4